Topaz

http://docs.topazruby.com/en/latest/blog/announcing-topaz/

Me gusta.

Zapowiada się bardzo apetycznie. Nie ma nic lepszego niż zburzenie zakurzonego status quo. Tzw. “media społecznościowe” już buzują od dyskusji na temat tego projektu.

Osobom, które porównują wydajność Topaz z innymi implementacjami, polecam serdecznie lekturę http://blog.headius.com/2012/10/so-you-want-to-optimize-ruby.html

Łatwo mieć czterokrotnie wyższą wydajność mając zaledwie 95% ficzerów, bez tych kluczowych dla spadku wydajności i zwyczajnie trudnych pięciu procent.

Ale oczywiście trzymam kciuki.

Rubinius miał n-krotnie niższą wydajność też nie posiadajać większości ficzerów (a to było jeszcze w czasach porównywania z 1.8.X, shotgun zdajesie).

Topaz wykorzystuje VM napisany w RPythonie, a z tego co mówi Fijal RPython niszczy C w tym zastosowaniu, wątpie aby te dodatkowe ficzery miało diametralnie pogorszyć wydajność. Spekuluje że Topaz po przejściu 99% ruby spec będzie mógł śmiało stanąć pomiędzy jRuby a RBX będąc miejscami szybszym od obu implemnetacji. (Edit: w zasadzie jest już odrazu szybsze od jRuby)

Quick’n’dirty neural net bench z repo Topaz’a odpalony lokalnie:

Topaz: 20s
jRuby: 50s
Rubinius: 1m:25s
MRI 1.9.3: 2m:27s
MRI 1.8.7: 5m:23s

Benchmark porównuje jabłka z gruszkami bo Topaz to nie jest jeszcze Ruby. Nie udało mi się jeszcze odpalić mspec’a na rubyspec ale wątpię, że Topaz przechodzi nawet 10% wszystkich spec’ów, zaimplementowane są podstawowe klasy (Object, Fixnum, trochę Array/Enumerable) więc do 95% jeszcze bardzo długa przed nim. Rubinius obsługuje większość dobrze napisanych c-extensions, Topaz w ogóle nie planuje tego (tylko FFI). Taka kompatybilność spowalnia VM. Nie ma wątków, Encodings i mnóstwa innych rzeczy, które są w Ruby. Pomimo, tego, myślę, że Alex i spółka zrobili imponującą rzecz w tak krótkim okresie czasu (kilka(naście) miesięcy?) (głównie dzięki temu, że całe zaplecze (metainterpreter, JIT, GC) zostało przygotowane podczas pracy nad PyPy). Zapowiada się b. ciekawie i warto go obserwować (czy nawet uczestniczych jak ktoś lubi Pythona + Ruby).

Z ciekawości zajrzałem do Travisa:

Topaz:

65 files, 317 examples, 598 expectations, 0 failures, 0 errors

Rubinius:

3919 files, 22943 examples, 158032 expectations, 0 failures, 0 errors

Na chwilę obecną Topaz to Ruby w 1% :slight_smile: