views:

156

answers:

6

Are there examples of significant enhancements to major programming languages that were fully released and then found to be sufficiently flawed that they had to be withdrawn?

UPD @Jeff Foster has an example of a feature that is not consistently implemented and I'd take those as answers

UPD There is a grey area between Deprecated and withdrawn. I suspect that there are thousands of Deprecated examples - which can still be used but are not advised. I can conceive that there are features which some creators thought they could implement fully or consistently but actually broke the integrity of the system.

I was particularly looking for enhancements (not original features) as these will have been planned (probably with community involvement) and released after testing, etc.

+3  A: 

C++ has a keyword "export" which very few compilers implement. It's not been withdrawn, but since so few compilers implement it that it is effectively useless. See here for more information.

Jeff Foster
Also a recent C++0x committee straw poll supported deprecating it: http://herbsutter.wordpress.com/2009/10/23/deprecating-export-considered-for-iso-c0x/ But the C++ standard is not a good place to look for an "enhancement" which has been "removed", since by definition that requires three releases, and C++ has so far only ever had the original standard plus corrections ;-)
Steve Jessop
So if something is "wrong" there have to be three (?major) releases before it's removed? Be interesting to know more
peter.murray.rust
No, I just mean that in this question, for something to be an "enhancement" as opposed to an original feature, it would have to not be in the first release, but be added in a revision. Then for it to be "removed" there must be a third release. Some languages, such as Perl, have had dozens or hundreds of releases. But C++ is almost a demonstration exercise in big design up-front, so there aren't really opportunities for language features to just come and go. C++ implementations do change of course.
Steve Jessop
Also it's ISO good practice only ever to remove deprecated features. So unless something is so disastrously wrong that it breaks the rest of the standard, then actually it should take two releases to remove it - one to deprecate, then one to remove. It's a slow process with ISO, because they really care about backward compatibility. For instance everyone knows `gets` is rubbish, but it isn't even deprecated in C99.
Steve Jessop
C has/had "entry" as a registered keyword. It was supposed to be used to give C-functions multiple entry points, kind of symmetric with allowing them to have multiple exit points.
Christian
+1  A: 

reduce() in Python has been removed from the global namespace from python 3.0. It can still be found in the functools module though, so I don't know if it really counts. The reasoning behind this is given in GvR's blog entry: http://www.artima.com/weblogs/viewpost.jsp?thread=98196.

Nikwin
Good example (by chance we were discussing it yesterday!)
peter.murray.rust
A: 

Even though this is entirely catered toward programming languages it's inevitable to deal with HTML on the web, so I apologize but must mention that..

applet, basefont, center, dir, font, isindex, menu, s, strike, u elements are deprecated in HTML 4.01, most usually in favor of CSS for styling as presentation and structure shouldn't be mixed.

meder
Given that HTML requires huge amounts of code to be written I think this is a reasonable example of withdrawal. In one sense they are not technically flawed, just ugly and superseded by better ways of doing things
peter.murray.rust
A: 

Deprecated features in PHP 5.3.x include magic_quotes, register_globals, and these functions are deprecated:

  • call_user_method() (use call_user_func() instead)
  • call_user_method_array() (use call_user_func_array() instead)
  • define_syslog_variables()
  • dl()
  • ereg() (use preg_match() instead)
  • ereg_replace() (use preg_replace() instead)
  • eregi() (use preg_match() with the 'i' modifier instead)
  • eregi_replace() (use preg_replace() with the 'i' modifier instead)
  • set_magic_quotes_runtime() and its alias, magic_quotes_runtime()
  • session_register() (use the $_SESSION superglobal instead)
  • session_unregister() (use the $_SESSION superglobal instead)
  • session_is_registered() (use the $_SESSION superglobal instead)
  • set_socket_blocking() (use stream_set_blocking() instead)
  • split() (use preg_split() instead)
  • spliti() (use preg_split() with the 'i' modifier instead)
  • sql_regcase()
  • mysql_db_query() (use mysql_select_db() and mysql_query() instead)
  • mysql_escape_string() (use mysql_real_escape_string() instead)
  • Passing locale category names as strings is now deprecated. Use the LC_* family of constants instead.
  • The is_dst parameter to mktime(). Use the new timezone handling functions instead.
meder
Were these enhancements introduced post V1.0? and then found to be flawed?
peter.murray.rust
A: 

Having spent many years hacking FORTRAN here are some of the delightful constructs removed from F77 (http://en.wikipedia.org/wiki/Fortran#Obsolescence%5F.26%5Fdeletions):

In this revision of the standard, a number of features were removed or altered in a manner that might invalidate previously standard-conforming programs. (Removal was the only allowable alternative to X3J3 at that time, since the concept of "deprecation" was not yet available for ANSI standards.) While most of the 24 items in the conflict list (see Appendix A2 of X3.9-1978) addressed loopholes or pathological cases permitted by the previous standard but rarely used, a small number of specific capabilities were deliberately removed, such as:

* Hollerith constants and Hollerith data, such as:

    `GREET = 12HHELLO THERE!`

* Reading into a H edit (Hollerith field) descriptor in a FORMAT

specification. * Overindexing of array bounds by subscripts.

    DIMENSION A(10,5)
>         Y= A(11,1)

* Transfer of control into the range of a DO loop (also known as "Extended Range").

Oh the heartbreak of no longer being able to jump into the middle of deeply nested DO loops.

peter.murray.rust
A: 

There don't seem to be any clear examples.

peter.murray.rust