2. Летом 2006 года, где-то в США А не написать ли мне свой Ruby с блекджеком и шлюхами?
3. Что такое Rubinius? Ruby LLVM JIT Engine Yard Evan Phoenix VM Melbourne Bytecode
4. Программа, которая транслирует код программы на Ruby, например: puts 123 в эффективный машинный код с последующим его исполнением: push %rbp; mov %rsp, %rbp; push %rbx; subq $0x98, %rsp; cmp $0x0, 0x10(%rcx); call 0xffffffffff472010; jmp 0x9c; Rubinius это:
6. Нормально ли, что Rubinius написан на Ruby? Да! Ведь, например: изрядная часть языка Java написана на нём самом; Где не получается использовать Ruby, используется C++;
7. Нормально ли, что Rubinius написан на Ruby? static VALUE rb_ary_collect (ary) VALUE ary; { long i; VALUE collect; if (!rb_block_given_p()) { return rb_ary_new4(RARRAY(ary)->len, RARRAY(ary)->ptr); } collect = rb_ary_new2(RARRAY(ary)->len); for (i = 0; i < RARRAY(ary)->len; i++) { rb_ary_push(collect, rb_yield(RARRAY(ary)->ptr[i])); } return collect; }
8. Нормально ли, что Rubinius написан на Ruby? module Enumerable def collect if block_given? ary = [] each { |o| ary << yield (o) } ary else to_a end end alias_method :map, :collect end
13. Одна из целей проекта Rubinius - сделать Ruby быстрым
14. История Rubinius Старт проекта Engine Yard нанимает Эвана Команда расширяется Запуск Rails VM на C++ stackfull бренч мержится в master JIT Повторный запуск Rails
15. Преимущества Rubinius Компактное быстрое ядро VM; сборщик мусора, основанный на поколениях ; поддержка расширений языка C; большая часть кода реализована на Ruby; JIT; RubySpec;
23. Примитивы class Fixnum : public Integer { public: // Ruby.primitive! :fixnum_or Integer* bit_or(STATE, Fixnum* other); }; class Fixnum < Integer def | (o) Ruby .primitive :fixnum_or end end
24. Backtrace puts "123" + 1 bin/rbx z.rb Coercion error: 1.to_str => String failed (TypeError) Backtrace: Type.coerce_to at kernel/common/type.rb:22 Kernel(String)#StringValue at kernel/common/kernel.rb:112 String#+ at kernel/common/string.rb:78 main.__script__ at z.rb:1 Rubinius::CodeLoader#load_script at kernel/delta/codeloader.rb:65 Rubinius::CodeLoader.load_script at kernel/delta/codeloader.rb:88 Rubinius::Loader#script at kernel/loader.rb:435 Rubinius::Loader#main at kernel/loader.rb:526 Rubinius::Loader.main at kernel/loader.rb:552 Object#__script__ at kernel/loader.rb:564 ruby z.rb z.rb:1:in `+': can't convert Fixnum into String (TypeError) from z.rb:1
26. Тестирование языка программирования Mspec RubySpec describe "Array#shift" do it "removes and returns the first element" do a = [5, 1, 1, 5, 4] a.shift.should == 5 end it "returns nil when the array is empty" do [].shift.should == nil end end
27. Проблемы с Rubinius: Отсутствие поддержки Windows; Небольшое сообщество; Непригоден для продакшена; Несовместимость с некоторыми гемами (C, Ruby); Отсутствие актуальной документации;