This is excellent news. I purchased RubyMotion when it came out and largely didn't use it for awhile. Since last 3 months our company which is entirely made of Rails/JS guys have been building small apps using RubyMotion.
I didn't know they were working on OSX support. But this is huge for me, back on GNU/Linux GUI programming using dynamic languages is easy. py-gtk/ruby-gnome2 bindings really work well and It is incredibly awesome that you can build small utils for yourself in a afternoon using py-gtk/ruby-gnome2. Ability to do the same for OSX is exciting!
And here is how MacRuby developers were lied to and the RubyMotion project made the choice to not contribute back but instead to focus on keeping innovation proprietary.
I agree, it’s too bad that people can’t just work for free as much as they would like on the stuff they love.
Now it is true that Laurent himself has not touched the repo since that email you linked to, but you know just as well as me that Watson has been doing maintenance work on MacRuby while on the payroll of RubyMotion (HipByte). His latest commit was 15 days ago and here’s a generalised diff of all the work done since the email: https://github.com/MacRuby/MacRuby/compare/94c90b351c18ce1f5....
This is what people with limited time resources do, they delegate.
To conclude, when you’re out to paint someone black, you really should be more specific. As it stands, there are no lies in that email, which means that you are the one that is not telling the truth. I’m not sure why you want to spread FUD, but it’s quite obvious and really does not make you look professional.
PS: Whatever Apple chose or chooses to do has absolutely no relevancy to this at all. The moment they released it as Open-Source, they effectively said that people can do what they want as long as they follow the license.
Alloy my point was not about maintenance but the fact that MacRuby relies on the ObjC GC which is now deprecated.
In this email thread Laurent acknowledge the need to switch to static compilation and that he has a working branch he will soon merge.
This is exactly what RubyMotion just released and I'm saddened that it was not contributed back as promised.
Well, spoking of broken promises and people abandoning things, didn't you write a book on MacRuby and a couple of articles touting it, and then abandoned the project for greener pastures (Ruby, Go and such)?
What about the folks that bought into the book and MacRuby, thinking that it was a viable project, and then see you, one of the (few) main contributors abandon it -- and long before today's release of RubyMotion.
Oh yes, what a horrid selfish man, trying to feed his family and make a business for himself. Not like generous, giving, open source-loving Apple!
Give me a break. The guy's made something amazing. Good on him for charging for it, making a success of it, so much so that we now have a version 2.0. This would never have come from some lousy half-hearted Apple mailing list.
I am happy to pay for this product, and I do not blame him for keeping it proprietary. I just don't see what your point is. It seems like you just want something for nothing and are dressing that up in some unlikely open-source clothes.
I can vouch for this. Laurent and I heavily discussed RubyMotion in its early days. His idea was to create a mobile solution (ergo Motion in the name) and had no intention whatsoever to include Mac OS X development at the time. It turns out however that the market wanted a unified toolchain. Many customers asked for it. And Laurent, like any good business person would, listened to the needs of his customers.
Antonio, but nothing prevented him to contribute back to MacRuby (OS X) the required changes to get rid of the GC and therefore to not rely on deprecated technology.
Tough shit. He's trying to support himself and his employees. Likewise, backporting their work to a even slightly different code base would require time they frankly don't have. Unless you have a time travel device you can give him, don't demand time he doesn't have.
Laurent frankly is underpricing his wonderful tools, and has to support himself and all those folks he's hired.
Time is finite, and no human can do all the things they'd like to do.
Modifying RubyMotion to have the right hooks for the OS X apis etc is likely much simpler than fixing up MacRuby architecturally.
Point being, people have finite time, they can't do all the things they want to. Either be nice or give him a time turning / time travel device
I know, I know. I don't care who's right or wrong here, colinta.
It's only that I thought "hey, maybe venus doesn't know that mattetti is one of the guys that worked on MacRuby, I'll point that out".
I find that it's a happy day, not a sad day (even if I like open-source).
Why? Because now some of my customers are going to seriously think about using Ruby for Mac OS X apps, because they know someone is making profit while supporting this, so they feel they can rely on this.
I much prefer this to the fate of IronRuby (or to some extent, MacRuby).
Remember what you wrote one year ago [1] ?
Using RubyMotion for a professional product represents
a significant business risk, which is exactly the same
as using proprietary technology from any vendor.
As someone who wrote a number of MacRuby apps, I find the support for OSX wonderful.
MacRuby is slow and clunky. Fact. This is a big improvement performance wise.
Do I mind paying for that improvement? Hell no. MacRuby development has pretty much halted once it lost Apple Support. I don't mind paying for something that will be maintained and improved upon.
Apple invested in MacRuby? What a joke! This project was almost singlehandedly held by one person. I know for a fact that Apple doesn't give a fuck about MacRuby, don't fool yourself about that.
I wouldn't take this personally, it is just a smart business decision. It makes sense that once you buy a RubyMotion license to be able to use the same toolchain on OS X.
Also, I wouldn't mind paying for RubyMotion as long as I'm assured the project will go forward.
Unfortunately MacRuby lost momentum when Apple decided to not support the project anymore.
I'm not sure I understand this. Is RubyMotion just a set of wrappers around Objective-C classes to allow you to develop applications in Ruby? If so, why? Is the point to allow Rubyists that don't want to learn Objective-C to develop applications in Ruby?
RubyMotion is not a wrapper. It is an implementation of Ruby on the Obj-C runtime. This means that a RubyMotion object is an Obj-C object (for comparison, a Ruby object in MRI is just a C struct). So why would you want to use RubyMotion? Well...
* Obj-C, from the very start, was implemented as a strict superset of C. This means that every valid bit of C code must also be valid Obj-C. This places some rather sever limitations on the Obj-C syntax. Ruby does not have this limitation, and neither does RubyMotion. So one reason you might use RubyMotion is to get a cleaner syntax that does the same thing as Obj-C.
* The Obj-C runtime is very dynamic. You can create classes on the fly, add methods to them at runtime, move methods around between objects, and create methods dynamically. The Obj-C language makes it nearly impossible to take advantage of any of these features of the Obj-C runtime. So another reason you might use RubyMotion is to get the most out of the Obj-C runtime.
What jballanc is saying is that yes these things are possible in Objective-C, but the technique of doing these tricks in Ruby/Motion is an order of magnitude simpler and idiomatic:
There are a few very well-written wrappers that make utilizing the Obj-C runtime much easier. MAObjCRuntime [1] is a good example of such a wrapper. Look at MACollectionUtilities [2] as an example of how to use MAObjCRuntime.
Please elaborate; I have only minimal experience with ObjC and do not use Ruby in the context of native development, so any well-described counterpoints would be much appreciated.
Edit: I obv. didn't write your parent comment. What I meant was that I'm sure others in my position, having read your parent, would appreciate more elaboration from you as well. :)
I'm doing a serious project in RubyMotion at the moment. It doesn't save you having to know Objective-C, since all example code for doing anything in Cocoa are still in Objective-C, but it does save you from having to write in Objective-C itself. That means, no writing everything twice (header files, type declarations), and no brackets. I find Ruby a lot more readable, even when writing the incredibly long method names from Cocoa.
But the real payoff is threefold:
1) You can use and write very ruby-ish wrappers for things. A great example is teacup, which lets you essentially write stylesheets for your UIViews (and I guess now NSViews).
2) Working with collections like arrays and hashes is MUCH more convenient. You can spend a good part of your time doing just that.
3) Command-line toolchain. It's not for everyone, of course, but for those who work better like that, it's a revolution.
Right now it's pretty wild west. There's no obvious winner in terms of libraries for the data layer, for example. So taking on an RM project right now either means rolling up your sleeves and hacking on the infrastructure, or just living with raw Cocoa, without benefit of autocomplete. Give it another 6-12 months and I think you'll see a very strong contender.
> That means, no writing everything twice (header files,
> type declarations)
Your header files can be practically empty if you don't need to show something to outside. Just put your @property'ies into class extension. Even @synthesize no longer needed (most of the time, there are exceptions).
> Working with collections like arrays and hashes is MUCH
> more convenient. You can spend a good part of your time
> doing just that.
With latest versions of XCode it is possible to use foo[5] instead of [foo objectAtIndex:5] and foo[@"bar"] instead of [foo objectForKey:@"bar"];
There are also array and dictionary literals @[…], @{…} and you can also just type @1 to get NSNumber from primitive.
I'm aware of all that, but of course you DO want to show things to the outside, all the time. I also know about the newer syntax, which is awesome the few times I still dip into ObjC, but I'm more thinking of map/each/select/detect/etc. There are builtin methods for doing those, but their sheer verbosity tends to discourage the sort of free and easy chaining that Ruby encourages. (Some might argue that's a benefit. Not me.)
Cocoa is a fantastic system to build on top of. NSDate is MILES better than the Ruby time stuff, for example. NS/UI solid core plus Ruby's flexible syntax and culture of sensible defaults is a marriage made in heaven.
>> I'm aware of all that, but of course you DO want to show things to the outside, all the time.
Well, there's a solid argument to be made in favor of limiting how much internals are exposed to other objects. I personally like keeping my headers as minimal as possible.
I found BlockKit [1] to be very useful for any Ruby-like collection methods. BlockKit, as the name says, uses blocks extensively to provide all the most common collection methods one would find in Ruby. Some examples of these methods, taken from the NSArray(BlocksKit) [2] documentation are "each", "apply", "map" & "reduce". There are much more.
RubyCocoa was actually a wrapper, but was very slow. MacRuby's innovation was that it was a Ruby implementation in Obj-C, but it relied on GC and was Mac OS X only. RubyMotion ditched the need for the GC and supports iOS and now Mac OS X.
I was about to ask about this. RubyMotion seems amazing, but sometimes objective-c is about just opening that auto-complete and seeing what methods are at your disposal.
That's awesome. I recently tried to get into MacRuby development, but there's a serious dearth out there of resources (for the beginner), and I had to guess on how to do a lot of things.
Please pardon an off topic question: is the compiled code from RubyMotion similar to Objective-C compiled code? (Within a factor of 2 or 3 in speed?) Thanks.
I am very keen to know what Apple thinks about RubyMotion.
It seems like a fine tool; but it's not typical Apple to allow external commercial vendor to influence it's core development environment.
Anyone from Apple, or anyone that gained the sense in events like WWDC, care to share?
Apple made it clear a few years back that any language that compiles to "normal" binaries is fine, after (at first) being completely restrictive about the tools you could use.
Their major remaining rule is that you can't build environments that download code from the internet and run it. (Except for Javascript, and you have to use JavaScriptCore (Apple-supplied) for that.)
Anyone had experience incrementally adopting rubymotion in a larger objective-c project? The languages obviously match up pretty well, I'm thinking more about toolchains, etc.
Would love to play with this but am fairly invested in a big obj-c thing right now.
I haven't done a larger project, but I did port a small project by starting with just the AppDelegate. It was easier to first turn the xcode project/obj-c code into a library, and compile it as such. The classes "just worked", and with all the nibs in resources/ those loaded, too!
I translated the models into Ruby, and pulled those out of the xcode lib. Eventually the entire codebase was converted (except the nibs).
I doubt this has ever been tried, but I seriously doubt it... the compiler does a lot of work looking at the Cocoa frameworks to build the bridgesupport files. Are GNUStep frameworks built the same way?
I didn't know they were working on OSX support. But this is huge for me, back on GNU/Linux GUI programming using dynamic languages is easy. py-gtk/ruby-gnome2 bindings really work well and It is incredibly awesome that you can build small utils for yourself in a afternoon using py-gtk/ruby-gnome2. Ability to do the same for OSX is exciting!