Fragile object construction is fundamental to the language, and I don't
think that'll ever change. Some things have gotten a lot better – it
now has closures, which isn't even in Java, and there are a bunch of new
"synthesis" features for auto-generating certain kinds of code
Sounds like they're groping their way slowly and blindly towards
reinventing Lisp -- particularly, functional programming and macros.
Everybody tries Lisp, rejects it because of the infamous prefix math and
parentheses, then spends the rest of their careers using languages that
are trying to recapture all of the goodness of Lisp without giving in to
the evils of prefix math and parentheses.
Some do better -- Ruby, Smalltalk -- and some do worse. (If you want
really bad, try Visual Basic. Now please pardon me while I go wash my
mouth out with soap.)
frankly, Objective-C still has plenty of ways to shoot yourself in the
foot, much more than anything I'd call a _truly_ modern language.
Any powerful language does. The foot bullets just look different.
With C and derivatives it's blue screens and segfaults.
Java gives you exception stacktraces, particularly NPEs,
ClassCastException
)), variations of the themes of ParseException and
IndexOutOfBoundsException, and an assortment of headscratchers. (For
these purposes, SAXException, MalformedURLException, and
NumberFormatException are considered variations on the theme of
ParseException, and NoSuchElementException IndexOutOfBoundsException.)
Oh, and an assortment of anal compiler errors.
Lisp gives you stack overflows and infinite loops when you screw up, or
nils propagating through everything and your program output coming out as
"nil".
Smalltalk has the infamous red-bordered debugger window, almost always a
DoesNotUnderstand caused by a type error that'd silently propagated for a
while.
BASICs run out of memory or give you cryptic wrong results and infinite
loops, thanks to the tendency to write spaghetti code without higher
level constructed types in it. Plus plenty of array bounds errors.
Shell will just quietly erase your filesystem or spam the console with
garbage interspersed with file-not-found errors after going completely
off the rails.
The other scripting languages -- particularly Ruby, Python, and Perl --
generate an assortment of errors mostly reminiscent of either BASIC or
Java depending, although in Perl's case the most common symptom may be
the programmer checking himself into a mental institution after a
while.
A unique pattern with the scripting languages is string manglage -- auto-
generated emails sent to "for" or even to "domain@host", for instance, or
serving up a Web page saying "Current temperature: array index out of
bounds Current air pressure: file not found". Yes, it's quite easy for
the TEXT of the error messages to get mixed into the output! But the foot
bullet symptom particularly characteristic of these is your e-voting site
playing the Michigan U fight song every time someone casts a ballot. In
other words, you get hacked.
Haskell and the ML family yield up a wide variety of compile errors
involving type inference, some real hair-pullers, but on the other hand
if it does compile it actually probably works.
I'll give Objective-C props for one thing: it's certainly as powerful as
most any other "modern" language
Well, duh. I assume the developers of Objective-C at least managed to
churn out something that was Turing-complete.
But as programmers have proven time and time again, even
the good ones really benefit a great deal from a language that focuses
on reliability first, and power second.
Why choose only one when you can use Clojure?