RubyMotion pros and cons
merbist.com
merbist.com
As an Objective-C developer who knows very little Ruby, this probably isn't for me. But I can't see how opening up iOS to a wider range of developers is a bad thing: personally, I'm an Objective-C fan, but I can see why people don't like it, and if you're at a start-up or a small team looking to get some app deployed and you don't want the hassle of learning Objective-C then this seems like a great alternative.
So like any language or environment there are pros (the REPL looks amazing) and cons (closed source, at least in my view). And whilst I'm sure this wasn't the intention of RubyMotion at all it's actually making me revisit Ruby as an Objective-C developer and see if I can improve my knowledge and experience of it. No bad thing!
I'm not convinced about this. Here's a quote from the rubymotion runtime guide:
RubyMotion’s memory management system is designed to simplify the development process. Unlike traditional Objective-C programming, object references are automatically created and destroyed by the system. It is very similar to Objective-C’s ARC, in design, but it is differently implemented.
Object cycles, when two or more objects refer to each other, are currently not handled by the runtime, but will be in future releases.
There are a lot of things that look really cool about RubyMotion, but it doesn't seem to me that memory management is massively different to the situation in Objective-C with ARC on, or indeed C++ with smart pointers.
They haven't said how weak references are going to be handled, but it seems like the programmer will have to specify that a reference should be weak. In that case, the difficult part of memory management in a non-gc langage --- making sure you avoid either reference cycles, or inadvertently deallocating objects --- is still there in rubymotion.
(disclaimer: I haven't used rubymotion -- I'm just going on what's been published about it)
RubyMotion doesn’t currently have a debugger, but it does have something Objective-C developers don’t have, a REPL working with the simulator. ... You can click on a visual element in the simulator and start modifying the objects in real time in a terminal window and see the modifications in the simulator. It reminds me of the first time I used firebug to edit the html/css of a web page and saw the changes in real time.
This might be the real strength of RubyMotion. Maybe someone should take Squeak/Pharo Smalltalk and create a utility that can be used as a REPL working with the iOS simulator. Smalltalk is basically Objective-C minus the C parts, types, and the glue to attach the C parts, so it would be the perfect REPL for the simulator. All you're left with is keywords and variables. Developers can insert this into projects for prototyping and debugging, but take it out when they deliver apps.
I'd guess "the image thing" is probably the reason Smalltalk hasn't taken off more than it has.
I used to work for a vendor, and I've written a significant fraction of such an environment.
> so that for example you can't store your code in files and easily connect them with bits of code in another language
Which is why I know this to be patently false. You can actually add compiler objects and have select methods written in SQL or whatever language you like.
> Essentially, your programs would have to become image-based
Again, patently false for the REPL use case. Also there are a number of declarative Smalltalks already, which don't need to be started from an image file. Also, Smalltalk MT used to compile down to a DLL indistinguishable from any C++ DLL.
But incidentally, do you happen to know offhand of any resources about adding new compilers like you were talking about? That sounds pretty neat. I unfortunately missed the golden age of Smalltalk, so most of what I know comes from playing around with Squeak and GNU Smalltalk and reading about older implementations.
The examples for the T-Gen compiler compiler in VisualWorks Smalltalk talked a little about this, and had a toy SQL example. IIRC, there was a <pragma: > you could put in a method to use your own Compiler object. Also, Smalltalk/X actually let you implement methods in C right in the Smalltalk class browser.
Unfortunately, a lot of documentation and other info are lost in the mists of time.
I'm gonna keep pimping it here on HN: Use Nu[1] as a REPL for iOS[2] and OS X[3]. I do all the time.
[2] http://groups.google.com/group/programming-nu/browse_thread/...
[3] https://github.com/timburks/nu/blob/master/nu/console.nu
Kind of wondering how that would work in practice though...
[2] http://www.igvita.com/2010/12/14/beyond-ruby-mirah-reia-rite...
plan to spend time in weekend in getting some small project ported, will update
"Yesterday, RubyMotion was released and let’s be honest, it is the best alternative to Objective-C out there.
Really? Not so sure. How about Mono Touch? Not only it also compiles to native code, but it has a more mature IDE (MonoDevelop, with autocompletion), can use Interface Builder files, and has lots of apps done with it already in the Mac App Store. It's also able to target Android and Windows Phone, if you want. Oh, and it's been in use for far longer so a lot of bugs have been ironed out.