Hacker News new | past | comments | ask | show | jobs | submit login

Garbage collection was added in 2.0, boilerplate properties code can be removed with the latest LLVM/CLang, and it's message passing rather than method calling. Add namespaces and remove the .h/.m split and I'd argue it was a better language than C# or Java.

And the spec is less than 135 pages long. The Java spec is 650 pages. The C# spec is 530 pages. http://developer.apple.com/library/mac/#documentation/cocoa/... http://java.sun.com/docs/books/jls/download/langspec-3.0.pdf http://www.ecma-international.org/publications/files/ECMA-ST...

To be fair the Java and C# specs are written in a terse but exhaustive manner because standards bodies are the main audience. But it still says something about the conciseness of the languages.




remove the .h/.m split

The header/@interface is more there for you than the compiler. That is, you don't have to have the @implementation and the @interface in separate files. One way is to use the @class declaration to say that the class will exist at run-time and the compiler doesn't have to worry about the lack of a header. Another way is to #import the .m directly.

There are two issues that come up with the first method: A warning when you use the class about it and methods/dot-syntax accessors possibly not existing and problems if you want to subclass a class. There's probably a compiler flag to suppress the warnings for the former problem and class_setSuperclass for the latter. Even if it is deprecated.

For the second method, you'll need to do some trickery to prevent duplicate symbols. Its solvable, but the exact details escapes me at the moment.

Anyway, here's a quick sample project to show the first way in action: http://thisismyinter.net/misc/hn/Lone.zip.

If you guessed that its a giant hack either way, you'd be right!

Add namespaces

This is tricker than you'd think, mostly due to the C heritage it has. We'll probably be stuck with class prefixes for a long time. At least they makes classes Googleable.


    > One way is to use the @class declaration to say that the
    > class will exist at run-time and the compiler doesn't have
    > to worry about the lack of a header. 
Sure, you could just put "uses NSWindowController;" in your .m file and the compiler would know all about the NSWindowController class and its methods, but what about all the typedefs, defines, functions, and other bits C/C++ heritage that everyday Obj-C code uses?

Obj-C has been around for 25+ years, and while the libraries have changed a lot during that time the language can still be implemented essentially as a preprocessor on top of a plain old C/C++ compiler, and I don't think that will ever change.

Long live MacRuby, though. I look forward to the day that becomes an official first-class language for OS X development.


I never said it was a good idea[1]. Just that it was possible.

But, yes. Long live MacRuby. I can't wait until the day I can use it for iOS applications.

1. From my previous post: If you guessed that its a giant hack either way, you'd be right!


But it's forever a superset of C. Not a bad thing, but that shouldn't be the only option.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: