MacRuby 0.5 beta 1 - Mehr Perfomance mit Multi-Core-CPUs

von Gregor Panek | 12 Oktober 2009

Macruby Heute erschien MacRuby in der Version 0.5. Hierbei handelt es sich jedoch noch um eine Beta 1. Die Beta gibt es im Moment nur als Paket für MacOSX 10.6 und höher. Änderungen gab es vor allem in Sachen Kompabilität, Cocoa Entwicklung und einige kleinere Geschwindigkeits Optimierungen. Eines der Besonderheiten an MacRuby 0.5 ist die Unterstützung von Multi-Core CPUs, sowie Multithreading.

Für die Realisierung der Thread Klasse benutzt MacRuby die Native POSIX Thread Bibliothek. Dabei besitzt jeder Thread seine eigene VM Instanz. So können mehrere Threads gleichzeitig Code ausführen ohne sich gegenseitig zu stören. Der Garbage Collector von MacRuby kann jetzt Objekte in verschiedenen Threads beenden ohne eine Pause dabei hervorzurufen. Somit laufen die anderen Threads weiter wenn in einem Thread das Objekt beendet wird.

MacRuby wird nun mit einer API für Grand Central Dispatch (GCD) ausgeliefert. Dies ist eine Multi-Core funktionalität die in Snow Leopard angewendet wird. Der Vorteil von GDC besteht darin, das man sich nicht direkt mit den Threads auseinandersetzen braucht. Dank GCD braucht man nur Warteschlangen zu erstellen, diese werden dann von Ruby als Block versendet. GCD führt diese dann als System Threads aus und stellt sicher das alle CPUs verwendet werden.

Beispiel:

									waiting_chairs = Dispatch::Queue.new('com.apple.waiting_chairs')
									semaphore = Dispatch::Semaphore.new(3)
									index = -1
									while true
									  index += 1
									  if semaphore.wait(Dispatch::TIME_NOW) != 0
									    puts "Customer turned away #{index}"
									    next
									  end
									  waiting_chairs.dispatch do
									    semaphore.signal
									    puts "Shave and a haircut #{index}"
									  end
									end
									
                            

In der neuen Version gibt es noch weitere Optimierungen. Diese wurden vor allem an der Laufzeit Ebene durchgeführt. Lokale Variablen verbrauchen weniger Speicher, es gibt einen schnelleren Zugriff auf Instanz Variablen, unmittelbare Fließkommatypen und einiges mehr.

In der MacRuby Version 0.4 gab es die Unterstützung für C und Objective-C. Dieser wurde auch in die neue Version mit übernommen. Somit sollten auch alle Entwickelten Programme der Version 0.4 in MacRuby 0.5 funktionieren. Die Performance wurde hierbei durch eine neue Implementation verbessert. Nutzte MacRuby 0.4 noch die libffi Bibliothek zum Aufruf von C bzw. Objective-C funktionen, so wird das nun zur Laufzeit mittels LLVM generiert.

Weitere Informationen erhält man auf der Seite von Macrubyextern_link. Die Beta zum Downloadextern_link gibt es auch direkt auf dieser Seite.

[Quelle: http://www.macruby.org/blog/2009/10/07/macruby05b1.html]