Unser Gast ist heute: Frank Celler (@fceller, http://triagens.com)
Synopsis: Heute geht es um mruby, C-Hacking und Bytecode-Compiler
Errata
Neue RubyWiki Seite zum Open RPG Maker: http://devel.pegasus-alpha.eu/projects/openrubyrmk/boards
(danke @qquintilianus, https://twitter.com/qquintilianus/status/298385311761842176)
Unser Gast
Als Errata zu GST001, mruby ;-)
Frank ist kein Rubyist, sondern C-Hacker
(M)Ruby
Steht für Matz Minimal Embedded Ruby
Um irgendwo embedded zu werden
Hardware (zB.: Roboter)
iOS (http://mobiruby.org/)
Andere Programme (zB: Datenbanken)
Redis (http://redis.io/) embedded zum Beispiel Lua (http://www.lua.org/)
Da Lua irgendwie nicht so richtig für Programmierer ist, könnte
mruby hier eine Lücke schließen
Ruby 1.8 ist nicht dafür entworfen irgendwo eingebettet zu werden
mruby in a Nutshell
Bytecode-Compiler (ähnlich wie YARV in Ruby 1.9)
Soll eine sehr, sehr kleine, überall lauffähige VM bieten
(Rite-VM)
Ein sehr kleiner Satz von Libraries
Es gibt kein require
Es gibt mgem (https://github.com/bovi/mgem)
Einschub: http://mruby.sh/ -> Englische Übersetzung der japanischen News
von Daniel Bovensiepen (http://www.bovensiepen.net/)
mgems sind quasi C-Libs
Stdlib ist quasi nicht existent
Core ist auch stark eingeschränkt (kein Bignum, keine Regexp,
keine Threads)
Es gibt als mgem eine cURL-Lib (was für eine Datenbank die HTTP
spricht ganz sinnvoll ist)
mruby ohne Threads macht vor allem für Datenbanken Sinn
Ruby ist ein Standard: http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=59579
Inzwischen gehen auch attr_accessor und andere Introspection
Features
mruby wird magischer ;-)
Wo hat der Frank mruby überhaupt eingebettet?
ArangoDB - http://www.arangodb.org/
Eine Open-Source Dokumentendatenbank
Wofür bettet man eine Scriptsprache in eine Datenbank ein?
Filtern von Ausgaben
Implementierung von Triggern (statt PL/SQL - http://en.wikipedia.org/wiki/PL/SQL)
Anreichern von Ausgaben
Welche Scriptsprache nimmt man da:
PHP trauen wir uns nicht
JavaScript funktioniert mit V8 (https://code.google.com/p/v8/), wurde dann auch integriert
Dokumentation ist grausam
Sehr schnell, in C++
wenn man einen Fehler sucht, kann man nur aufgeben ;-)
Arango ist in C/C++ geschrieben
Haben sehr früh Zugang zum mruby Repo bekommen
mruby lässt sich sehr leicht einbetten
Dokumentation ist genauso schlecht wie die von V8
Man kommt aber noch zu Fuß durch den Code
Probleme bei V8 war JavaScript-Prototypen in C++ Objekte abzubilden
mruby wurde mit dem Gedanke entwickelt eingebettet zu werden, daher
sind entsprechende Hooks vorgesehen C-Strukturen in Ruby abzubilden
V8 verwendet UTF-16, Arango verwendet UTF-8
mruby verwendet auch UTF-8 -> Overhead fällt weg
Frank hat mit LLVM rum gespielt und hat aus mruby den Faktor 2-3 raus geholt
Was noch viel für die Performance tun kann ist Method-Caching
Momentan ist mruby noch Alpha-Status
In der homebrew Version ist mruby drin
Für Linux muss es per Hand gebaut werden
Bei ArangoDB ist eine Shell für mruby dabei (siehe auch: http://qiezi.me/projects/mruby-web-irb/mruby.html)
emscripten.org
Die mruby Shell in ArangoDB ist analog zu der JavaScript Shell in
ArangoDB
mruby hatte bis vor kurzem keine richtiges Makefile
Daniel Bovensiepen hat dann ein CMake-File erstellt (http://cmake.org)
Seit Dezember 2012 gibt es auch ein Rakefile
War unter Windows vor der totale Krampf
ArangoDB gibt es seit kurzem auch für Windows
Probleme mit libev und ICU
UTF-8 hat zwei Darstellung für Umlaute: den Umlaut und zwei Punkte + Buchstabe
Basti hatte einmal sehr viel Freude mit case-insensitive und case-sensitive Systemen
Macht auch Probleme bei Collation
ICU macht das einfach für einen (http://site.icu-project.org/)
Die Windows-Version von ArangoDB hat keinen mruby Support
mruby targeted aber Windows
Anekdote: Die C-Standards entwickeln sich im Jahrzehnt-Rhytmus
VisualStudio ist bei ANSI-C Version '89 stehengeblieben
Frank macht C schon seit 30 Jahren
Hat für den TRS-80 ein Arcade-Spiel nachprogrammiert (http://en.wikipedia.org/wiki/TRS-80)
Frank hat das Spiel auf einem TRS-80 Emulator für Linux widergefunden :-)
"Magic Worm for Model I" (http://fosdem.graph-database.org/news/8,
http://www.retrocomputing.net/parts/r/radio/TRS80_4/docs/on2002.htm)
Frank erinnert einen C Interpreter
Wenn C dann lieber Objective-C, meint Frank
Ist für Rubyisten noch eingängiger, vom mentalen Modell
Basti hat auf dem letzten DevHouseFriday 'Ruby is Magic - Reflections' gezeigt (https://speakerdeck.com/railsbros_dirk/colognerb-reflections)
Cocoa ist von oben bis unten voll mit Magic
ArangoDB im MacApp-Store: https://itunes.apple.com/de/app/arangodb/id564723448?l=en&mt=12
War letztes Jahr unter den Top-10 für Dev-Tools
Ohne mruby
Ähnlich wie damals CouchDBX: http://janl.github.com/couchdbx/
Die JavaScript-Shell von ArangoDB läuft im Browser
Die ArangoDB-Shell ist ein eigener Client und spricht mit dem Server über HTTP
JavaScript-Console für den Browser: http://replit.github.com/jq-console/
http://stedolan.github.com/jq/
The JSON Query Language: http://www.jsoniq.org/
Ähnlich wie das was ArangoDB verwendet (unabhängig)