Become a fan of Slashdot on Facebook

 



Forgot your password?
typodupeerror
Programming Businesses Apple IT Technology

Steve Jobs thinks Objective C is Perfect? 784

Posted by Hemos
from the good-or-bad dept.
josht writes "Nitesh Dhanjani has posted an e-mail thread between Steve Jobs and himself. Dhanjani argues "I'd like to see Apple developers gain more choice. With every iteration of OSX, there seems to be so much effort put into innovation of desktop components, but the development environment is age old." I agree with Dhanjani. What has Apple done recently to wow the developers, and make it fun to code Cocoa components? I've looked into the Objective C and Xcode environment but compared to Microsoft's .NET solutions, it doesn't impress me at all. I think Apple can do a lot better. Steve Jobs disagrees. What do the readers think about Objective C and Xcode?"
This discussion has been archived. No new comments can be posted.

Steve Jobs thinks Objective C is Perfect?

Comments Filter:
  • Wowing developers... (Score:3, Interesting)

    by Svartalf (2997) on Monday December 26, 2005 @12:13PM (#14339929) Homepage
    While wowing the developers is important, also providing them with a high performance, high reliability, and easy to use framework is important as well- moreso than wowing them. It does no good if it's "cool" to develop for a programming language, etc. if I'm spending 2-3 times the coding time for the other one or 2-3 times the debugging time, etc.

    C#, for all of the claims of performance, is a a JIT based interpretive language. Ditto Java.

    C#, for all of it's nicety, is little more than Java taken in MS' desired direction. If it weren't for Mono, C# wouldn't even be a subject of discussion as it'd been an MS only tool for use only on Windows (or whatever MS ends up calling thier stuff in the future...)

    C, C++, and Objective-C are stable, robust languages that have been around for some time now. C# has not been around all that long, but since it's got all the "buzz" about it, people keep trying to deploy it everywhere.

    Objective-C is actually a fairly clean OO language, moreso than C++. C++, while it's really good, has been muddied up with a bunch of conflicting design ideas that make for some...fun...with your coding if you're not paying attention to what you're doing.

    All in all, I'd say that it's decent enough for doing Apple development- if you want to adapt Mono to that interface (Which, I believe, can be done...) knock yourself out.
  • by netwiz (33291) on Monday December 26, 2005 @12:17PM (#14339945) Homepage
    Personally, I prefer Obj-C to .NET, mostly due to the (IMO) superior organization and layout of the object model. It's simpler than .NET's API, which tends toward "everything and the kitchen sink." Not that Cocoa doesn't have it's problems. It's probably more difficult to write big projects using it, but for quick development, I find it faster to just throw something together in Xcode. Besides, it doesn't hurt that Xcode and it's related dev tools are free on OSX, whereas it's a $600 investement on Windows for the equivalent software.

    A good example of the complexity is the file access models for both APIs. .NET has something like three different objects to deal with different types of file access. Cocoa implements these in a single object with multiple methods for the data access style (streaming, read the whole thing once, etc.) Now, it's probably just personal preference on my part, but why invent multiple objects when you could just roll them up as separate methods for what is essentially the same data structure? There's probably a reason, and I'd be interested in learning why this is so, but it just seems to me that Cocoa did it right in the first place.
  • by piyamaradus (447473) on Monday December 26, 2005 @12:22PM (#14339966)
    As an old-school programmer (20+ years of Fortran, C, various assembly languages, C++ many many years ago), who's spent the last dozen years or so focused almost exclusively on server-side high-performance networking systems (in other words, heavy-duty C/Unix/threading), I've taken my 'spare time' in the last few months to teach myself ObjC/Cocoa, Java, and some of the .NET technologies. I found it unfortunate that Apple deprecated Java + Cocoa in the last XCode release -- not because I particularly enjoyed Java but because it was easier to learn both Java and ObjC at the same time when I could be doing the same things with it.

    Comparing ObjC to what MSFT offers nowadays seems to be apples and oranges (no pun intended) and the learning curve is much different -- coming from straight C, ObjC is much cleaner, and I can slide more extensive Cocoaization in as I go. On the other hand, the ObjC syntax is a mess and weird for people who've never done Smalltalk ... and I'm guessing the set of people who have is extremely small nowadays.

    As for development environments, so far I've _hated_ everything to do with visual * -- it seems to be a monster to use, to customize, and to work with efficiently, at least for this old Unix hack. XCode is far far far from perfect -- I wish the SCM integration were better, that the whole thing were a _lot_ faster, and that they'd release incremental documentation updates rather than 250M batches every couple weeks -- but since it's all wrapped on gcc/g++/gdb/make at the back end, you can entirely do your stuff with vi/emacs/whatever at the command line and never use the GUI much at all, if that's your preference...
  • Dev tools plus/minus (Score:5, Interesting)

    by boatboy (549643) on Monday December 26, 2005 @12:26PM (#14339985) Homepage
    As a .NET developer, I haven't looked too hard at Mac dev tools, but I will say I could see an argument that Microsoft's rich development environment has some unexcpected consequences. Microsoft has made it easy for just about anybody to pick up software development, and as a result, just about anybody has picked up software development. =)

    This can be good, but a downside is that some of the emphasis on design, best practices, etc. is lost. An office nerd who happens to get into VB is not traditionally pushed to think about things like standard UI guidelines. So in a sense the rich toolset can detract from good software. MS seems to be aware of this, and you can see a definite push for more guidance from them. Still, they have a ways to go IMO, and finding the balance between making development easy and making it "good" is difficult.

  • Xcode rocks. (Score:3, Interesting)

    by wangmaster (760932) on Monday December 26, 2005 @12:26PM (#14339986)
    There are legions of NeXT fans that would disagree with your statement regarding .NET. The Interface Builder component has always been considered one of the most elegant, easy to use, intuitive UI constructing tools out there. It does what it needs to do, is well integrated into the rest of the tool (and the language) and just plain rocks. I have yet to use a UI layout tool that comes near the ease of use and effectiveness of InterfaceBuilder.app. When it comes to Xcode (or ProjectBuilder.app as the old NeXT fans were used to), it's also an intuitive, easy to use project management system. I don't like IDEs, I hate IDEs. I prefer vi/vim to do all my code editing. The nice thing about ProjectBuilder in old days (I'm not sure about Xcode, I haven't had the opportunity to do much with my mac mini yet) was that it did what I needed (collect all my files in a nice visual fashion, manage my building and integration with UI components, and built skeleton files). It does all those things well, without forcing the user to be hampered by some built in editor components. There are legions and legions of developers out there that consider the NeXT development tools to be the ultimate developer toolkit (and objective c is a pretty nice language). It's nice to see it didn't disappear into history :)
  • Re:Love it (Score:5, Interesting)

    by rplacd (123904) on Monday December 26, 2005 @12:31PM (#14340001) Homepage
    On the other hand, after several years of writing code in mostly python and other similar languages, the thought of going back to something like C (pointers!) doesn't really motivate me to write code for my mac. It's a good thing there are bridges like py-objc and such.

    (Disclaimer: I first became aware of Objective-C about a decade ago, and have used IB/etc on Openstep -- on a NeXT slab, even).
  • by oldCoder (172195) on Monday December 26, 2005 @12:33PM (#14340006)
    C# is not a jit-based interpretive language. .NET languages generate an intermediate form called IL that is similar to java byte codes but is compiled to native machine code before execution. That is, the IL is never interpreted in the sense that byte-codes are.

    I've always assumed that one of the motivations for publishing IL instead of machine code was so that a single binary could distributed for different architectures. The decision to go for IL was made when Intels Itanium looked a lot better than it does now.

    I don't know that MS has made claims for the execution speed of the .NET languages specifically. I am suspicious since the installation license forbids publishing benchmarks. I think that ought to be illegal. Really.

    Perhaps the most useful language and most widely used is also the slowest: javascript.

  • by morcheeba (260908) * on Monday December 26, 2005 @12:35PM (#14340018) Journal
    Why was this modded insightful? It's just namecalling and has no information.

    Honestly, I would like to know why you think IntelliJ IDEA [jetbrains.com] and the other IDEs are better than XCode. What features do you find important that are missing, or was there some unliveable annoyance? What language do you code in, and what level of debugger support are you expecting? IDEA doesn't seem to support C, so while I would get the benefit of less suckage compared to Xcode, I would have to switch programming languages.

    Your post had potential...
  • by bhima (46039) <Bhima@Pandava.gmail@com> on Monday December 26, 2005 @12:37PM (#14340034) Journal
    The idea that the OS X development environment should include the option of using managed is code is fine (although I shudder to think just how much work this truly encompasses). But I haven't yet seen the real benefit of using .Net or Mono while I have successfully used Objective C.

    I think sometimes we get caught up in the tinkering with latest wizbang language and loose sight of the fact that if we simply paid attention and used the languages we already know we could solve whatever we are programming much simpler.

    Over the winter break I have run into two miserable examples of this...

    ONE the program Autopano-sift (100% managed C# code developed using mono) This program does nothing couldn't be done in C++ and little that couldn't be done in C. I've lost count of the megabytes I've downloaded to access the functionality of a program that has no cause to occupy much over a half meg... it's like having the bloat of windows and the user friendliness of circa '92 Linux all at the same time.

    TWO Canon and the "software" that accompanies their cameras, specifically the 350D AKA Digital Rebel XT. I am very interested in controlling that camera by computer (any computer) so I have also signed up for their development program. So I can tell that all of the canon software that came with my camera was developed with the current version of Microsoft Visual Studio and also uses the SDK canon uses to obfuscate the camera's true API. Because of the user interface and some truly bizarre design decisions this is the worst software I have ever installed on any of my computers. With the possible exception being Arcsoft's image management application which was also included. I must admit, I have seen Arcsoft's applications before and while technically they work... the user interface is so poor and has such arbitrary limitations as to make it unusable, so this is not really surprising. Bottom line... sending a few hundreds of kilobyte of data through a USB should be easily accomplished by an 8 bit Microcontroller mounted on a board the size of my thumbnail... and IT IS NOT... thanks to manged code.
  • by rplacd (123904) on Monday December 26, 2005 @12:49PM (#14340092) Homepage
    Actually, that points to another place where objective-c trumps Java or .Net: you can add (your own) methods to classes you don't necessarily have the source code for; see this [wikipedia.org] bit on categories.
  • by jcr (53032) <jcr.mac@com> on Monday December 26, 2005 @12:55PM (#14340119) Journal
    If you think CoreData is cool, check out what you can do with Quartz Composer. Every value in the composition is reachable through keypaths.

    -jcr

  • by Trollll (675299) <trollll23.yahoo@com> on Monday December 26, 2005 @01:02PM (#14340166) Journal
    Steve Jobs never calls Objective-C/Cocoa perfect, he just thinks that it makes for a much better development tool than .NET.

    How the hell did that even get posted to Slashdot in the first place? Does anyone actually check anything before these things go live?

    Check a few comments up for the incredibly boring emails back and forth, where basically the guy starts off by telling Jobs that Objective-C sucks without giving any reason. Makes me wonder why (and IF) he got a response in the first place.
  • by caerwyn (38056) on Monday December 26, 2005 @01:10PM (#14340222)
    "Now, of course you can just call C functions, but then what is the point of objective C?"

    The point of any programming language is to give the developer the tools they need to efficiently (programmer time + machine resources) accomplish the goal they set out to do. No more, no less.

    Not using C functions simply because objective-C has methods is ridiculous; the language has the direct functional call built in for *exactly* the reason you're discussing. I write performance code for simulation data display in Objective-C; it simply requires a little thought into what functions require absolute maximum performance (and can therefore tolerate the lack of flexibility) and what functions (such as GUI functions) are better off with the dynamism that Obj-C methods provide.

    I don't care what language you're programming in, but if you completely ignore one of the tools that the language provides you and then claim that the language sucks, it's difficult to lend any credence to your opinion.
  • by spectre_240sx (720999) on Monday December 26, 2005 @01:32PM (#14340330) Homepage
    I hear that constantly, but actually it's the biggest thing that turned me away from Cocoa programming. I'm far from a professional coder, but I just can't get my head around building interfaces and connecting them to the code with all of these menus. I'd much rather just write the code myself. Maybe after working with it for a while I'd learn to like it, but it made it hard for me to get into it and I ended up going for Java instead.
  • by minniger (32861) on Monday December 26, 2005 @01:46PM (#14340423)
    The issue for me is how much time and effort is it worth learning a language and framework that only exists on a single minority platform?

    I personally feel that OSX is a beautiful combination of unixy goodness and gui usability. So much so that I dropped a load on a quad-g5 last month. And i've been playing with objectivec/cocoa/xcode/ib long enough to develop a few opinions:

    1. Cocoa is the best thing going for the mac. It's feature rich and has loads of good documentation and examples. Far nicer (at a code level) to build GUIs in than say... Swing.
    2. XCode/IB - Hello? 1992 called and wants it tech back. Once you get the hang of it's not a bad combo. But Delphi showed the way forward to today and not having two way tools is painful.
    3. Objective C ditto. As a java guy I-CANT-STAND having to deal with .h files again. Copy and pasting message signatures around sure is a lot of fun. But that's just me. Bigger issue is memory management. It's a pain but it's better than c at least.
    4. Libraries - As long as there is a cocoa lib for what you want to do you're good. As soon as you have to start calling c or c++ based libs you're screwed. It's nice an familiar to c/c++ guys. But it's rather jarring to be running along in objc and all of a sudden have a load of pointers hit you in the face, throw in the CoreFoundatiaon and carbon stuff... ech!. Every time I see it i'm just "argh... this is why I prog in java".
    5. Deprecated Java-Cocoa bridge - Nice idea but making java behave like objc does in cocoa is pretty messy from a java prospective. Probably is better than they just killed it off.

    So, back to the point. ObjC has some good and some bad. If you could hope to even just port your code to another platform I'd be all over it. But without that ability what business is going to let you build an app with it? What business is going to buy an app that is osx only? Given these two constraints what left? Server based apps? Java pretty much has that wrapped up in all but the most fervent windows only shops.

    The good news is that the mac market is expanding like crazy. It's only ~4% or so.. but that's millions and millions of users who actually buy software. Dunno if it's enough to make a living off of yet, but perhaps someday.

  • by jcr (53032) <jcr.mac@com> on Monday December 26, 2005 @01:48PM (#14340429) Journal
    Well, what timeframe are we talking here? In Tiger, they gave us CoreData and Quartz Composer, and Spotlight. In Jaguar, they introduced Cocoa Bindings, Quartz Extreme, the Address Book API, and Rendezvous.

    OS X is gaining major capabilities with every release, and they usually come with an Objective-C API to make them very easy to use.

    -jcr

  • by metamatic (202216) on Monday December 26, 2005 @01:53PM (#14340460) Homepage Journal
    If you look closly to objective C, it is really not a language, it is just C with a enhanced macro pre processor.

    C++ started out as C with a special preprocessor. So what?

    Performance is ABYSMAL compared to any modern language because message sends (the objective C equiv of a method call) has to go through a dispatch map.

    I'd be interested to see some up-to-date figures to back up your assertion. GCC 3.1 gave a 2x speed increase in method dispatch, and GCC 4.0 has -fobjc-direct-dispatch.

    msgc_ObjSend without the GCC 4.0 optimization is 22 cycles. Somehow I doubt that's really your big performance issue.

    Modern languages like Java, C# provide all the dynamsism of objective C, but do it effciently thougth vtables and reflection.

    This is the usual Java/C++ argument of 'There is no value in dynamic typing, because I can write a program that does the same thing using static typing'. Well, yes, and I can write a program that does the same thing in machine code, but that doesn't mean high level languages have no value.

    Some of us like having introspection, metaclasses, true parametric polymorphism and so on, without having to implement ugly workarounds. Personally, I think that ubiquitous (implicit) dynamic typing is a major aid to code reuse and software development agility.

  • ObjectiveC and Cocoa (Score:3, Interesting)

    by macpeep (36699) on Monday December 26, 2005 @01:56PM (#14340481)
    I've been programming since I was 7. I've done Basic, Pascal, C, x86 assembly, Modula 2, SML, C++, Java, plus a large bunch of scripting languages. I've programmed for the Java VM (ME, SE and EE), Amiga, DOS, 16 and 32 bit Windows, most UNIX variants and a large number of mobile OS's including Symbian, PalmOS and Windows Mobile.

    When I got a Apple PowerBook, my intention was not to use it for programming. ObjectiveC and Cocoa was totally irrelevant for me and I didn't bother to learn it. That is, until one evening when I decided to just take a look at some of the ADC docs included with XCode. After reading for about an hour, I was very surprised. It couldn't possibly be this easy and straightforward. It felt like it Cocoa must be seriously limited in functionality. The API was so easy and so compact, and ObjectiveC was like a halfway mix of Java and C++. I bought a book on Cocoa and read through it in about a week. It covered everything from basic GUI programming to drag and drop, printing with pagination, OpenGL, making custom widgets, data binding and persistence, preferences, making and using frameworks (think DLL's), and so much much more. And all of this was amazingly simple compared to any other OS and language combo I had ever used. And not just easier, but dramatically easier.

    As an example, the chapter on drag and drop was something like 5 pages and covered making drag sources, drag targets, controlling the icon you see while you drag, data flavors, and so on. The classes involved were all extremely simple, easy and intuitive. Printing is even easier!

    I haven't really had any need to do any apps of my own lately, so admittedly I haven't used Cocoa for anything in particular other than simple test applications, but I'm thoroughly impressed!! I would give about 80% of the credit to Cocoa, and 20% to ObjectiveC. You can use Cocoa with Java too, but it seems a tad bit more compatible and elegant with Cocoa. Also, looking at the more recent API's like CoreImage, it seems there's more and more functionality in the Cocoa family of API's but the simplicity remains. I strongly recommend picking up ObjectiveC if you know C++ or Java!

    Peppe
  • by the eric conspiracy (20178) on Monday December 26, 2005 @02:00PM (#14340511)
    GC does not necessarily cause load spikes - as modern Java collectors have proven it is possible to to do GC without machine pauses.

    On the other hand, smart pointers fall well short of what Java offers - since smart pointer based software typically suffer from reference count bugs, and don't handle references loops. And doing the memory collection inline rather than in a seperate thread is a real disadvantage - but then it isn't like C++ has a threading model anyway.

    C++ really suffers in many ways by not having modern GC and threading support. It is really starting to look like modern technology is passing it by. THis is becommng more and more of a problem as processors become increasingly parallel.

  • Re:well... (Score:2, Interesting)

    by Overly Critical Guy (663429) on Monday December 26, 2005 @02:14PM (#14340577)
    Memory management is pseudo-automatic as it is right now, but requires you to do all the retain/release stuff. That said, you can compile with automatic garbage collection enabled. It's not on by default. Presumably, it will come to the forefront in the next major version of Xcode. Automatic garbage collection can be so slow sometimes, and perhaps Apple wants to get it perfected before really pushing it out the door. But they ARE working on adding it.

    As an aside, I don't know what this guy is emailing Steve Jobs about. You can code for a Mac in C, C++, Objective-C, Pascal, Java, all the standard UNIX scripting languages, and any other language GCC supports, really. As for making Cocoa "fun," it already is--interface builder is awesome.
  • You don't get why people use regular expressions obviously. They are extremely useful for input validation. You do validate your input don't you? Desktop apps require it just as much as scripting or web applications. One of the joys of .NET is how easy you can create a regular expression or use built in ones (visual studio). Microsoft started pushing them for input validation because it can offer a quick way to sanitize input from sql injection and other attacks. I don't think apple developers have the same mindset about security that a MS developer has. Think about it, using a mac you forget about security. I don't run antivirus on my mac, or spyware tools and i dont' worry when i open my email or surf. On my windows machine, I worry if my virus defs and anti spyware are current or when my last scan occured. Every time I open IE, I remember that i can only go to trusted websites.

    Nothing stops you from using a third party regular expression library like pcre. Or simply use the java - objective c bridge in cocoa to use java's regex stuff. Although java is a second class citizen, it is supported to some degree with cocoa.

    As for xcode vs intellij, I would never use xcode for java after trying intellij. I use xcode for c/c++ programming all the time though. Its a great ide. I like the debugger interface as it reminds me of microsoft's vb.net debugger in some ways. One thing microsoft doesn't do is add a decent spell check library to .net. Apple's got that covered. Its also incredibly easy to create an opengl window from what i've seen. Menus look better in cocoa than vb or c# as well.

    I don't think its fair to compare cocoa and .net. Cocoa is more like MFC and its obvious apple's winning there. .NET is more like java. Now maybe one could argue apple should beef up their cocoa to java bridge and document it better to compete with microsoft. Maybe they should add a third easier language to cocoa, i.e the vb for apple machines.

    Objective c vs C++ is what people should be comparing here. I can see objections to syntax with objective C. It is much different than modern languages using the "." notation and so forth. My wife and I both have trouble remembering the syntax for objective C, but I haven't tried that hard to use it yet either.

    If you think cocoa is so bad, try to write a .NET app in managed C++ sometime. C# is java and vb is easier c#. Its like comparing real basic to C and declaring real basic easier to write a graphical text editor in.

    Apple could add more libraries to cocoa. That would be helpful. I personally found it confusing to connect buttons and objects in interface builder to backend code compared to .NET. Coming from a windows background its weird and feels like extra steps.

  • by Animats (122034) on Monday December 26, 2005 @02:33PM (#14340672) Homepage
    Metrowerks was there for Apple when all Apple had was MPW, which was a clone of the UNIX Programmer's Workbench, circa 1979. Metrowerks made the PowerPC transition possible. And recently, Apple made it hard for users of the Metrowerks environment to convert their programs.

    Metrowerks offered a stable, reliable development environment, even as Apple was frantically moving from one development platform to another. (Use Rhapsody! Prepare for Copeland! Use OpenDoc! Dump OpenDoc! Use Carbon! No, use Cocoa! Use OpenStep! Use Objective-C! Switch to XCode!.) Each time Apple pulled one of these stunts, more developers dropped their platform.

  • by Overly Critical Guy (663429) on Monday December 26, 2005 @02:35PM (#14340679)
    I don't know that MS has made claims for the execution speed of the .NET languages specifically.

    Well, they've done public comparisons to Java that showed C# being way faster, which Java devs pointed out was biased in favor of C#, but that's no surprise. .NET has lost a lot of steam--even Ballmer admitted that earlier this year. A lot of Vista will still be pure native code, and most of the major Windows apps will always be Win32 because companies aren't going to rewrite their codebases, and also they want to retain compatibility with Apple's Carbon, which behaves similarly to Win32 and therefore provides for easier porting.

    Of course, I hear rumors about Apple releasing their Cocoa/Obj-C stuff for Windows. Which would truly rock and would give Windows developers a reason to use those superior APIs. Photoshop could take advantage of things like CoreImage without losing Windows compatibility. But we'll see if that's just a geek fantasy.
  • Re:Love it (Score:3, Interesting)

    by laffer1 (701823) <luke@foolishgame ... minus physicist> on Monday December 26, 2005 @02:54PM (#14340789) Homepage Journal
    The visualization group has a next machine at my university. I got to crack the root password on it and work on it for a few hours when it was first donated. Its the best computer i've ever used. There are websites selling used ones for 500-1000 dollars if you look around. I've been half tempted to buy one. They are incredible. It is the best computer i've ever used. It felt very fast and it was one of the 68k models. Apps started like they do on my current ibook. The color reminded me of a computer several years newer. It didn't feel like a 256 color windows 3.x box from the early to mid 90s. I've never found a machine that was designed the way I think until that next box. I just wish OSX was more next like.
  • by Alioth (221270) <no@spam> on Monday December 26, 2005 @02:58PM (#14340806) Journal
    Overall, objective c message call performance is comparable to Javascript.

    That's highly inaccurate. The ObjC runtime is not as fast as a function call in C, I'll grant you that. However, it isn't that slow - see my signature for a 3D OpenGL game written in Objective C. Objective C overall is certainly faster than Java, and orders of magnitude faster than Javascript.
  • by theAtomicFireball (532233) on Monday December 26, 2005 @03:38PM (#14341012)
    Many of your complaints with the language seem to be much more a "it's different from other things, therefore wrong."

    Namespaces is the one I see foisted around the most. I can see some value to adding namespace, but not enough to muck up the language. Objective-C was designed to be the simplest wrapper around C as possible while enabling an OO approach. With the much flatter hierarchies Objective-C's weak-binding and dynamicism encourage, the lack of namespaces is a relatively minor thing. Some people want them, but there's really no compelling need for them. I, for one, am glad that Objective-C has avoided the "throw in everything but the kitch sink" approach that has caused C++ to bloat in recent years.

    Abstract class support? Again, why? The language doesn't need this. Objective-C's approach is to trust that the developer knows that he or she is doing. It doesn't take the paranoid approach that C++ and Java and the other Modula-3 inspired languages do, but that's not a flaw, it's a design choice. Objective-C is bad for stupid programmers, that I'll readily admit.

    All methods are public, but they don't have to be advertised in your header file. Again, it's the nature of the language, and the result of a conscious design choice, not a flaw. You don't need this, even though many programmers have been indoctrinated into thinking they do.

    I give you some points on the constructor issue. A language-level support for the DI or an official "constructor" method would be a good addition and add relatively little to the language and runtime. Garbage Collection is not something I personally want, but I know many people do; it's in the works. GCC 4.0 has support for it, it just hasn't been fully integrated into Cococa yet. Probably with the next release (is it Puma? I can't even remember all the cat names any more).
  • by Mr. Underbridge (666784) on Monday December 26, 2005 @04:07PM (#14341128)
    I don't understand why people hate pointers. Is it the fear of memory math? What's going on? Because pointers have a ton of advantages. Make it easy to save memory, and also make it easy to allow generic function prototyping through function pointers.

    Function pointers are probably my favorite thing about low-level languages (and even a few higher-level languages that provide such support).

  • Categories (Score:3, Interesting)

    by vandel405 (609163) on Monday December 26, 2005 @05:19PM (#14341425) Homepage Journal
    Categories are *the* best feature of Objective-C. They let you keep problems object orrient when subclassing isn't avaiable. Simple example. Say you're working with a class library that exports a string class, and that string class doesn't have a 'spit/explode' function. In languages without categories you would write a static method some place, or a method on some unrelated 'toolbox' class that takes a string and splits it. In objective-c, you can just put a category on string that is a split method. This way the string is doing the split. If you later hve some subclass of string that can do a more efficent split, well override split, dont' swtich on the class type in your static method. YAY OO.

    I hinted on a much more important feature above. When you have to work with many objects that you know little about, categories are awesome. Take GORM for example. GORM should integrate with many flavores of objects but it really only knows a lot about a couple of base-classes. Classes like view, object, and window. GORM might need to know if a view acts as a container. To do this, it might put a category method on view called 'isContainer'. It could return NO by default and be overrided in all containers to return YES. Now when working with a view, GORM just has to say [view isContainer] to find out if the view is a container. This is much better than looking asside in some table, or manually coding up the reflection hack that would be nessecary to ask such a question in other statically bound/typed languages.
  • by Leimy (6717) on Monday December 26, 2005 @05:35PM (#14341506)
    Non-sissy programmers make mistakes that can let in all sorts of problems with buffer-overruns and other fun vulnerabilities. C is a terrible language for trying to write "secure" or "safe" code.

    I'm not saying C is bad for all situations. I just wouldn't use a saw to drive a nail.

    By the same token I try not to find problems for my solution.

    It may be very simple to do the refernce counting by hand, I'm just saying that it's possible to do a lot of this stuff automatically in a language design. See Limbo. It even has a way to get out of dreaded cycles that cause reference counting to leak memory [a cyclic keyword]. It's a shame Limbo only really works with the Inferno OS.

    Also C++ has libraries of things like shared_ptr that do the reference counting in the constructors and destructors of the object. It also can suffer from the cyclic reference leaks of course but the need to double check code or even suspect it of being wrong at the "use" level is greatly diminished.

    At the end of the day it's worth noting that no language is perfect, and just knowing the syntax doesn't make you a good coder. It takes practice... and just having a degree in CS isn't gonna make you great.
  • Re:Love it (Score:5, Interesting)

    by Yaztromo (655250) <`yaztromo' `at' `mac.com'> on Monday December 26, 2005 @05:45PM (#14341540) Homepage Journal
    On the other hand, after several years of writing code in mostly python and other similar languages, the thought of going back to something like C (pointers!)

    If this is what is keeping you from developing with Objective-C, then you've picked a poor reason to avoid learning it.

    Pointers are as easy to avoid in Objective-C as they are in Java. In Java, all reference types are in fact a pointer, but simply a pointer which you don't need to think about. There is no pass-by-value for reference types, and no pointer arithmetic is allowed.

    In Objective-C, everything is again passed by reference (as opposed to by value). Pointer arithmetic is generally completely unnecessary (although it is technically permitted).

    I recently finished v1.0 of a decent sized Objective-C application, and the "&" operator isn't used once. The '*' operator is only used when defining a variable, return type, or parameter.

    I don't even think of pointers when coding in Objective-C. I tend to think of it as no different than Java. Extra capabilities to do pointer arithmetic are there, but I simply don't typically feel the need to use any of them.

    Yaz.

  • Re:Love it (Score:2, Interesting)

    by waxwing (917397) on Monday December 26, 2005 @05:56PM (#14341579)
    "...a high-level garbage-collected language is a step too far..." Why not a systems-level statically compiled typesafe garbage-collecting language? There is such a thing, you know. There is even a modern OS running on x86, all without any C at all. (Ugh! Pointer aliasing!) It is called Bluebottle. And -- you can skin the GUI by editing an XML file! Woohoo! http://bluebottle.ethz.ch/ [bluebottle.ethz.ch]
  • by gullevek (174152) on Monday December 26, 2005 @06:01PM (#14341608) Homepage Journal
    I read through this and suddenly I asked myself, do I walk back in time, or is something wrong.

    But sadly Top posting is so common nowadays, that managers complain if you don't do. Last time I normaly answered an email to an management person in our office and he complained later why my answer was not on top like "normal" people do ...

    oh where there world went thanks to preset outlook settings ...
  • by ceoyoyo (59147) on Monday December 26, 2005 @06:42PM (#14341789)
    No language does everything perfectly, but to say Python is just a scripting language is not correct. It is a general purpose language, and a very good one at that. You probably don't want to code your MPEG4 transcoder in it, but it's wonderful for the GUI and general purpose stuff. Do your transcoding on the video card, combine it all using Python and PyObjC and you've got a great system.

    You can write apps on Mac OS X using Python that you can't distinguish from ObjC apps without inspecting the contents of the packages. Far better than Java in fact, since the .app is totally self contained -- a copy of the interpreter and all Python modules included.

    If you like Python and you have a Mac, try out PyObjC. It's my favourite development environment by far.
  • Re:namespaces (Score:2, Interesting)

    by Gentlewhisper (759800) on Monday December 26, 2005 @06:43PM (#14341796)

    And I'm sure successful people choose to be born into stable, wealthy societies rather than in some God-forsaken African nation wracked by famine and war, yes? No luck involved there, huh?


    Btw Steve Jobs was abandoned by his birth parents. Stable and wealthy family indeed eh?
  • by mcc (14761) <amcclure@purdue.edu> on Monday December 26, 2005 @07:12PM (#14341919) Homepage
    With programming, the correct cliche would be "evolve or die". Yes, it's true that "good enough" systems can stay around forever and ever and ever in programming, but it's also true that this only tends to happen if the system gets established. Apple is not established, they are still in a position of attempting to sell Cocoa to others. Worse, Apple is competing directly against one clearly-thus-inspired platform which attempts to replicate Apple's functionality (Java), and against another clearly-thus-inspired platform which attempts to replicate Java's functionality (.NET). .NET and Java have not learned from the greatest of Cocoa's triumphs. But they have both learned from Cocoa's mistakes, and each offer interesting new triumphs of their own.

    And there are definitely mistakes in Cocoa, things that are broken and need fixing. Many things in Objective C feel like they're from a 20 year old language-- because they are. The new features in Java 1.5 (generics, real generics not this C++ template crap, and foreach/iterator support) make the cast-filled use of collections in even a simple Objective C program simply painful to contemplate, and objective c could stand to incorporate a few more of C++'s modern features without requiring you to go whole-hog to objective-c++. "Fix and run" or whatever it's called is a neat nod to dynamism, but ultimately is just part of a tendency within the Objective C language and Cocoa tools to go halfway to a state of perfect python-like dynamism but stop halfway. Cocoa is in some ways even more dynamic than Java, but it must be compiled, which offers a sort of dynamism gap which the tools need to bridge. Right now they don't. The tools, amazing as they were compared to the alternatives two or five years ago, really, really need work. The work you must go through to use a language other than Objective C in a Cocoa program is, frankly, bullshit. PyObjc and Camel Bones are clumsy add-ons; they should be built into the developer tools from the moment I install it. In general XCode is too prone to freaking out if I do something unexpected as opposed to just using the expected interface paths, and after you run into this problem where you're afraid to do anything unpredictable in XCode in case everything stops working. In general meanwhile XCode consistently engages in behavior that I can only describe as "mysterious". The great and interesting features XCode offers-- features which are truly necessary to get the most out of Cocoa-- cease to be of use, because XCode's general unreliability prevents you from making use of them. The worst thing about Cocoa comes in when you have to use any library which is written by one of Apple's Carbon-centric groups instead of one of the Cocoa-centric groups. Leave the little cloystered world of cocoa classes and try to work with, say, Quicktime, or CoreAudio, and suddenly you are in a strange and incoherent land, suddenly needing a crash course in new and interesting types of strings and something called the Component Manager, and suddenly devoid of the high documentation standards common in the Cocoa classes. Spend a few weeks using one of these "alien" APIs, and suddenly you won't care how great the core Cocoa APIs are, you'll be simply yearning for an operating system where the GUI library and the sound library are based on OS APIs which vaguely resemble one another.

    Basically, Cocoa was without a doubt the best available developer system five years ago. But that was five years ago. The APIs have received new and interesting additions (KVM and coredata come to mind), but some things have not improved at all, for example the base language (in fact if anything the base language has devolved, thanks to the recent removal of Java as a future-proof coding option), the documentation, in many ways the tools, and the cross-language compatibility. Objective C and Cocoa are in many ways standing still while Java and .NET are constantly on the move, in some ways surpassi
  • The Real Irony (Score:3, Interesting)

    by Reverend528 (585549) on Monday December 26, 2005 @08:01PM (#14342087) Homepage
    The real irony here is that Steve Jobs is calling Garbage Collection "slow" despite the fact that Apple sells a micro-kernel based OS. I know that microkernel-based OSes can be shown to be just as fast as monolithic kernels, but that takes a LOT of work to achieve (more than just kludging BSD onto Mach).

    Most well-designed programming languages allow code that can be optimized to reduce the amount of garbage generated. For the things where speed really matters, it can sometimes be possible to prevent the generation of any garbage.

    This isn't meant to be a troll on how slow OS X is. My point is that the advantages/disadvantages of using GC parallel those of using a microkernel. It seems silly that Steve Jobs would endorse one and not the other.

  • by soft_guy (534437) on Monday December 26, 2005 @08:31PM (#14342202)
    I'm sorry, but I have to agree with Steve and completely disagree with Mr. Dhanjani. I think that the language "choice" on .NET is silly - you can use whatever language you want so long as the language has exactly the same features as C#. For example, look at the feature set of "managed C++". No multiple inheritance and other non-C# features have been removed. Same for other languages.

    I program with Objective-C and Cocoa all the time. I am mostly happy with it and in fact I will not be using the Garbage Collection feature for my apps.

    I have complaints about Cocoa, but not being able to program in Ruby or Python is NOT one of them.
  • I disagree (Score:3, Interesting)

    by FredFnord (635797) on Monday December 26, 2005 @08:34PM (#14342213)

    I disagree.

    Specifically, I work at a small software house that writes exclusively in java. Our product is a piece of server software, quite large, runs on multiple machines, etc. Now, I won't say that GC isn't nice, but I will say this: it took us over three months to find settings that kept java from seizing up for over three minutes once every half hour or so for full GC, when it's under heavy load. When Java 1.5 came out, all those settings failed and we had to try again. (They're still failed; one of the hidden settings we depended upon has been taken out of 1.5, or at least appears to have no effect when used.) When that happens, our servers get out of sync and we had to write an entire new section of code to handle the fact that the servers regularly go away for minutes at a time. One solution, it turns out, is to load up the machine with 4 gigs of RAM, but we're hesitant to suggest this because even Oracle doesn't require 4 gigs of RAM to run. Another solution could be requiring multiple servers and failover setups... that would be awfully popular.

    I agree that situations like this are rare, but they aren't unknown. If we had a choice, it's possible we would, in fact, redo this whole mess in Java Minus GC, despite the headaches. (Unlikely, but possible. I sure know a lot of our customers would like us to.)

    -fred

  • NIH at its finest (Score:3, Interesting)

    by nikster (462799) on Monday December 26, 2005 @09:19PM (#14342366) Homepage
    I was an intern at Apple in 1997 when Steve came back. We all knew he would save the company and were happy when Amelio left.

    This was the time of Windows 95 vs OS 9, pre-OS X. What was a huge problem back then was the Not Invented Here syndrome, which sounds silly until you realize that this is bound to happen at a company like Apple. Apple has the brightest engineers and used to make the best software and hardware. Now, if you are the best, who is going to voluntarily run Windows 3.x (for example) just to keep on top of what's happening on the other side. So at Apple, Win95 was pretty unknown. NT - even more unknown. People had no idea why it was better than OS 9. All they could see was the uglier interface.

    The exact same thing happens these days with XCode and Objective-C. Once upon a time, Objective-C and InterfaceBuilder and the predecessor to XCode were light-years ahead of the competition. They were literally about 10 years ahead in NeXT times. Like, two or three generations ahead. Nowadays, they are falling behind. but because no one at Apple even considers to use anything else, they still think they are the best. XCode developers think that XCode is way better than anything else out there, even though VS.NET, Eclipse, and IDEA for Java development are far better. XCode's latest improvement was auto-completion (that works)... Eclipse and IDEA meanwhile are working on ever more refined refactoring mechanisms that automate away days and weeks of development time.

    As for Objective-C I don't know it well enough to make a judgement but the syntax is certainly extremely different from anything else. I don't want to lean it if it is just for the sake of writing proprietary OS X-only software.

    But since Obj-C is already dynamic and can do "everything" a dynamic programming language can do, why not at least provide wrappers for Ruby and Python? Ruby wrappers should be totally simple to write, and then I could just use my favorite programming language to program my favorite OS. Ruby would really be a perfect fit for OS X - elegance from within.

    Developer's ignorance plays a good part in this too. If XCode is better than the previous XCode and works for you, why should you use anything else. I actually run into this problem with colleagues who use CodeWarrior or some other abomination of an IDE, or who use no IDE at all and claim that that's better for them than learning an IDE. Yeah, right. I have not met anybody who wanted to switch back from a modern IDE (IDEA, Eclipse, VS .NET) to a text editor or emacs or some glorified-text-editor-IDE like CW or XCode. Nobody goes back. The productivity gains are not only real, they are also significant.
  • by Anonymous Coward on Monday December 26, 2005 @10:02PM (#14342541)
    I also agree with Steve.

    To the best of my knowledge he isn't actually a coder. Yet he has concisely and accurately identified the key weaknesses in comtemporary competing products. (Maybe he has good people working for him?).

    Managed code like C# (and Java and maybe Ruby, Python, VB) is slow, and this a problem when developing and deploying apps in a competitive market place.

    Also garbage collection is a performance hit and does tend to use CPU at just the wrong time.

    Actually wrt memory management garbage collection entirely misses the main memory management problem I have to deal with. Now how can I explain what this is... here we go it is "keeping heap out of virtual memory (e.g. off the disk)" (from http://www.theserverside.com/news/thread.tss?threa d_id=29865 [theserverside.com] i love google).

    No comment on C# vs Objective C libraries. I'm not interested in Objective C or C# as I mainly do cross platform GUI development on code that has to be fast. I need mmap more and more.

    (Can you guess who I work for?)
  • Bzzzzt! (Score:2, Interesting)

    by Da VinMan (7669) on Monday December 26, 2005 @10:47PM (#14342732)
    ...you can use whatever language you want so long as the language has exactly the same features as C#...

    Umm.... bzzzzt! Wrong answer contestant!

    Really, do you know what you're talking about? Every language in .NET has the same "features" if you're referring to the fact that they all have access to the .NET standard assemblies + Windows API, etc and that they are all (obstensibly) Turing complete. However, if you want an example of a language that allows one to think about a problem differently AND executes under the .NET CLR, then take a look around. You will find some premium examples like Eiffel.NET (which DOES actually support MI under the CLR; yes they had to put in a hack for it), COBOL.NET (yes, it actually works and customers pay us to use it), and some niche examples like F# (ML dialect). Let's not forget that VS.NET comes with C++, C, C# (don't forget managed AND unmanaged code for this), VB.NET, and J# (Java) right out of the box. I've also seen LISP for the CLR and there's probably others.

    Now, your assertion that language choice under .NET is silly seems rather silly in itself. If it's not important to you fine, but the fact that you're happy with Obj-C + Cocoa doesn't mean that .NET or GC sucks. And by the way, there are a great many hackers out there who are quite happy with hacking on OS X using not Obj-C (gasp!) but Ruby instead. You should check in with them, they might just open your mind.

    Or not. It's your loss then.

    The ONLY major complaint I have about .NET is that it's propagates a software monoculture; you can only deploy to Windows with it. Now THAT'S a legitimate complaint. But you probably realized the futility of complaining about that being a Obj-C/Cocoa developer eh?

To avoid criticism, do nothing, say nothing, be nothing. -- Elbert Hubbard

Working...