Ruby孊ぶためのチヌトシヌト

これは、Ruby孊習者向けの蚘事ロヌドマップチヌトシヌトです。 別の方法を説明する代わりに、他の蚀語やプラットフォヌムから来たプログラマヌは明癜ではなく、反怜玢で単玔に費甚がかかるように芋えるかもしれないずいう事実に重点を眮いお、私の意芋では、簡朔か぀簡朔に述べるこずができるすべおのものを説明しようずしたす手がかりなく勉匷する時間に-残りはリンクを䞎えるだけです。 自然界には倚くのチュヌトリアル/カヌスト/本/䜕でもあるずいう事実にもかかわらず-これは私自身が垞に欠いおいる圢匏です。 そしお実際、これらは、「どうですか」、「どこから始めたすか」、「そのようなこずはどのように行われたすか」、「そしおどの宝石がより良いですか」 ちなみに、この蚘事の䜜業䞭に、Pythonに぀いおの同様のこずがHabréに登堎したした。明らかに、アむデアは空䞭にありたす。



ルビヌ呚蟺-噂、陰謀、調査
すぐに、このネタバレの䞋のテキストが蚘事の䞻芁な「目的」の郚分ず異なるこずを予玄しおください。 これが私の個人的な意芋ず印象です。



プログラミング蚀語は、構文だけでなく、ガベヌゞコレクタヌであるだけでなく、蚀語パラダむムであるだけでなく、その哲孊でもありたせん。第䞀に、それはこのコミュニティが䜜成したコミュニティずコヌドベヌスです。 特に今、オヌプン゜ヌスの時代に。 そしお、ここRubyではカルマで初めおの脂肪プラス。 機胜の1぀-行末でメ゜ッドずセミコロンを呌び出すずきにオプションの括匧で始たり、リッチで衚珟力豊かな構文で続き、プロゞェクトの䞀般的な雰囲気で終わる、実甚的な怠inessが党䜓にわたっお読み取られたす-それらの倚くは箱から出されお最小限の劎力で䜜成されたすそれらを構成したす。



倚くの人がRubyを遞んだのは、それが快適で楜しいからです。 プログラミングの楜しさず喜びはさたざたな蚀語で埗られたす-Rubyでは、良い車を運転しおいるように芋えたす。車の埌ろに座っお、道路に぀いおはあたり考えず、より重芁なこずに぀いお-少なくずも旅行のルヌトず最終目的に぀いお考えたす。

たた、レゎのゲヌムず比范するこずもできたすこれは䞻にGemsによるものです。 溶接金具が奜きな人もいたすが、段ボヌルず接着剀が必芁な人もいたす。



RubyずRailsに぀いおは、時々芋぀けられるこずがいく぀かありたす。それらを明確にしようず思いたす。



Rubyは遅いこずが知られおいたす。 Rubyはむンタヌプリタヌ蚀語なので、議論するのは困難です。 そしお、これは兞型的なものであり、ほずんどの堎合、PHPを排他的に曞く人から聞いおいたす。PHPも解釈可胜であり、合成テストの速床に関しおはほが同じレベルです。 ほずんどの堎合、これらは叀いバヌゞョンの悪名の゚コヌです。 実際、私はRailsずSymfonyの䞡方で䜜業する必芁がありたした。実際のRailsアプリケヌションでは、同じレベルの最適化でより高速ですそしお䞡方のキャッシングが成功の鍵です。 メモリの速床ずコンパクトさが必芁な堎合は、Node.jsを䜿甚しおアセンブラで蚘述したす。 しかし、逆説は、ルヌビストがしばしばそれを曞いおいるずいうこずです-それが本圓に正圓化されるずき。 問題はこれです。䜜業の速床だけでなく、アプリケヌションの䜜成速床も重芁です。 そしお、Ruby、およびあらゆる方法でgithubにあるすべおのものは、アプリケヌションの最適化の可胜性を含め、プログラマヌの非垞に高い生産性を達成するのに圹立ちたす。 たた、䞻な負荷ずボトルネックは倚くの堎合デヌタベヌスであり、Webアプリケヌションは単なるビゞネスロゞックのレむダヌであるこずを忘れないでください。 そしお、そのようなレむダヌはうたくスケヌリングしたす。



䞀方で、Ruby開発者の高い絊料に぀いおは独特の神話があり、䞀方では、Rubyにはほずんど仕事がないずいう神話がありたす。 通垞、PHPの垂堎の平均ずその䜜業量の絊䞎ず比范されたす。 PHPの平均絊䞎レベルは、叀兞的な「病院の平均絊䞎枩床」です。 Yii / Symfony / ZendずRailsのスペシャリストPythonでDjangoを远加するこずもできたすを比范するず、状況はたったく異なりたす。぀たり、絊䞎ず垂堎芏暡はほが同じです。 確かに、優秀なプログラマヌには十分な報酬がありたす。 さらに、プロゞェクトをれロから始める堎合、倚くの堎合、プラットフォヌムの遞択は、顧客/䞊叞ではなく、あなたずあなたのチヌム次第です。



したがっお、Webアプリケヌションを䜜成するための倚くの優れた蚀語ずフレヌムワヌクがあり、Ruby with Railsは、狌男りサギのすべおのりサギを䞀床に殺す銀の匟䞞ではありたせん。 単玔に、私の意芋では、重芁な基準のセットを採甚し、それらの1぀たたは2぀を遞択しようずしない堎合、RoRは本圓に倚くのポむントを獲埗したす。 成熟床を含む-これはもはや朜圚的なものだけではなく、老人でもないヒップスタヌプラットフォヌムではありたせんしかし、䞡方の䟋がたくさんありたす。 老人は長くはならないず思う RubyずRailsの䞡方にただ成長ず開発の可胜性がありたすが、これは別の蚘事のトピックです。



そしおもちろん、Railsに関する蚘事の焊点ず、この特定のプラットフォヌムの人気にもかかわらず、RubyはRailsずはほど遠いものです。



いずれにせよ、私はプログラマヌが圌が今日支払われおいるものの圌の小さな䞖界に座るべきではないず確信しおいたす。 この意味で、Rubyは履歎曞に+1蚀語を提䟛するだけでなく、そのoopフォヌカスず広範なメタプログラミング機胜により、異なる蚀語ずプラットフォヌムで圹立぀゚クスペリ゚ンスを提䟛したす。



Ruby蚀語開発の歎史ず開発の芋通し





ルビヌ





開始する
{os_name}にRubyをむンストヌルする方法は


リンク自䜓

  • 勝ちたす。 同じリンクをたどっお、DevKitを芋぀けおください。DevKitは、デヌタベヌスの操䜜やNative Extensionsのむンストヌルに圹立ちたす
  • Railsむンストヌラヌは 、Ruby + DevKit、Git、Rails、Bundler、SQLiteをWindowsたたはMacOSにすぐにむンストヌルしたす。 ただし、Rubyは1.9.3であり、2.0のむンストヌラヌはただアルファ版です。  Jabherの助蚀どおり 
  • * nix-リポゞトリたたはレガシヌで怜玢


さらに、 RVMのようなものがありたす。 1぀のOSに耇数のバヌゞョンのRubyをむンストヌルしお、それらを切り替えるこずができたす。 最初は必芁ありたせんが、ロヌカルマシンたたはサヌバヌに既にいく぀かのプロゞェクトがある堎合に䟿利です。䞀床に新しいバヌゞョンに曎新するのはあたりクヌルではありたせん。 今のずころ-それだけであるこずを芚えおおいおください。

オタク誌のRVMに関する詳现



すぐに蚀及する䟡倀があるのは、開発環境です。 私はJetBrains補品のファンであるため、 RubyMineをお勧めしたすが、垂販の補品は奜みに合うため、無料のAptana Studioです。 軜いテキスト゚ディタを䜿甚する方が快適であれば、倚くの人がRuby構文をサポヌトしおいたす。



Rubyむンタラクティブモヌドのブラりザヌで盎接、 tryruby.orgを詊すこずができたす。



すべおがオブゞェクトです
数字、文字列、さらにはnilを含め、すべおObjectクラスから継承したす。 nil、class、methods、およびrespond_toなどのメ゜ッドを呌び出すこずができたす。

'Hello world'.class # String nil.class # NilClass String.class # Class String.ancestors # [String, Comparable, Object, Kernel, BasicObject];    nil.nil? # true Object.new.methods #     Object;        -    nil.respond_to?('nil?') # true
      
      



埌者に関しおこれはアヒルのタむピングにずっお重芁です。



構文ずパりダヌ
Rubyは「構文糖」で非垞に熟知されおいるため、倚くの堎合、さたざたなブラケットやセミコロンなどでポリッゞを䜜る必芁はありたせん。 そしおその䞋にはシンプルで論理的で、「すべおがオブゞェクト」ずいうパラダむムを保持しおいたす。

 a == b #  ,   a.==(b) #   .==() -  
      
      





メ゜ッド呌び出しで、あいたいさがなければ括匧を省略できる堎合

 nil.respond_to?('nil?') # true nil.respond_to? 'nil?' # true #  : if nil.respond_to? 'nil?' puts 'ok' end #  if 10.between? 1, 5 puts 'ok' end #        ,    if 10.between?(1, 50) && 20.between?(1, 50) puts 'ok' end
      
      





たた、 蚘号もありたす。 本質的に、文字は䞍倉の文字列です。 たずえば、ハッシュのキヌずしお頻繁に䜿甚されたす。

 a = :nil? #  b = 'nil?' #  nil.respond_to? a # true nil.respond_to? b # true #  a == b # false a.to_s == b && a == b.to_sym # true;       
      
      





もう少しパりダヌが接続されおいたす

 a = {:key1 => 'value1', :key2 => 'value2'} #   ( ) a = {key1: 'value1', key2: 'value2'} #   - ,    (Ruby >= 1.9.3)
      
      



トピックが登堎しおから

 a = ['value1', 'value2'] #   s = 'String' s = "Double-quoted #{s}" # "Double-quoted String" - , , 
      
      





そしお、少しいですが䟿利な曞き方で、ダスティングのテヌマを終了したす。

 %w[value1 value2] # ["value1", "value2"] -   ,    %i[value1 value2] # [:value1, :value2] -  , (Ruby >= 2.0) s = %q(String) s = %Q(Double-quoted #{s}) %x('ls') #   `ls` #    %r(.*) == /.*/ # true;     
      
      





ちなみに、Rubyには非垞に銎染みのあるセミコロンがありたす。1行に耇数の匏を蚘述するず䟿利です。

 a = 10; puts a #    10 if nil.respond_to? 'nil?'; puts 'ok'; end #    -   
      
      



しかし、単䞀行のifsはこのように曞く方が良いです

 puts 'ok' if nil.respond_to? 'nil?'
      
      







入門蚘事ずドック
他の蚀語の Rubyや20分でRubyを読む䟡倀がありたす。メむンの友人でアシスタントのruby-doc.orgです。

基本クラスのメ゜ッドすべお-それぞれeach_およびto_をすぐに確認するこずをお勧めしたす。

文字列 ここ-最初に䞀臎するもの、サブ

配列 マップ、結合、組み蟌み

ハッシュ has_key、has_value、マヌゞ

Rubyを䞀緒に埁服するに十分な単玔な䟋が解析されたす 最初の ドロップ2番目の ドロップ3 番目の ドロップ

宎䌚を続けたい堎合 Rubyで魔法を遞択できる興味深い人々 。



クラス、モゞュヌル、メタプログラミング
Rubyのクラスは非垞に明癜ですが、Rubyの力ず魅力は、それらを操䜜する可胜性にありたす。

 class Foo def bar 10 #     -     end def baz(a) bar + 20 end end puts Foo.new.baz(10) # 30
      
      





モゞュヌル-䞍玔物ずしおも名前空間ずしおも扱うこずができたす。 突然 実際、これはクラス、メ゜ッド、および定数のセットであり、独自の刀断で䜿甚できたす。

 module B #    class Foo #  def initialize(k) @k = k end #      def bar; @k + 20 end end end puts B.Foo.new(3).bar # 23 puts B::Foo.new(3).bar # 23;   ,    module C #   def bar; @k + 25 end end class Foo include C; def initialize(k) @k = k end end puts Foo.new(3).bar # 28
      
      







Rubyでは、クラスは可倉であり、䜜成埌にパッチを適甚できたす。 そしお、ここで泚意しおくださいここでは、「足で自分自身を撃぀」こずができる非垞に可胜性が始たりたす-したがっお、このようなこずをするずきは、垞に泚意する必芁がありたすなぜ、䜕が起こるのか、誰が䜕をすべきかあなた自身。

 class Foo def bar; 20 end end class Foo #  def baz; bar + 2 end end puts Foo.new.baz # 22 #   - :      Foo.class_eval do def bazz; bar + 3 end end puts Foo.new.bazz # 23 #        -     class Boo < Foo def boo; bar + 2 end end puts Boo.new.boo # 22 #   -    ,     a = Foo.new a.instance_eval do #   def booo; bar + 3 end end puts a.booo # 23 puts Foo.new.booo rescue puts 'error' # error; ,    puts a.respond_to? :booo # true puts Foo.new.respond_to? :booo # false #  -       def a.booboo bar + 4 end puts a.booboo # 24
      
      



しかし、クラスに察しおinstance_evalを実行するずどうなりたすか もちろん、静的メ゜ッドが远加されたす。

 class Foo def self.bar; 10 end #    end puts Foo.bar # 10 Foo.instance_eval do def baz; bar + 1 end end puts Foo.baz # 11
      
      



あなたはこれで遊んで、䞻なものを芚えおください-あなたの足の䞖話をしおください。
 class Foo def self.add_bar #   ,    self.class_eval do def bar; 'bar' end end end end puts Foo.new.respond_to? :bar # false class Boo < Foo #  add_bar #  end puts Boo.new.bar # bar #      ,      Foo.instance_eval do def add_baz self.class_eval do def baz; 'baz' end end end end class Baz < Foo add_baz end puts Baz.new.baz # baz
      
      





たさにそのようなアプロヌチが実際に䜿甚されおいたす-実際、それはパラメヌタを転送できる䞍玔物のようなものになりたす。 方法がわからない堎合は魔法のようです。 基本クラス、特にArrayずStringにもパッチを適甚できたすが、それらを苊しめ始める前に垞に3回考える必芁がありたす。それは.blankのようなものですか Railsはそれを远加したすdef blank; nil|| emptyend、もう1぀はメ゜ッドコヌドがプロゞェクトに固有の堎合で、プロゞェクト内のいく぀かのクラスに属しおいるず仮定するのが論理的です。



これは、たずえばアクセサヌの仕組みです。 Rubyクラスにパブリックパラメヌタヌを远加するにはどうしたすか

 class Foo def bar #  @bar #   end def bar=(val) #  @bar = val #    end end
      
      





12個たたは2個のパラメヌタヌを蚘述するこずを想像できたすか Rubyには倚くのコヌドがありたす-倧眪 DRY 。 そのため、短くするこずができたす。

 class Foo attr_accessor :bar, :baz #     attr_reader :boo #   attr_writer :booo #   end
      
      







次の準備はいいですか 次に

Rubyメタクラスの玹介

メタプログラミングパタヌン-モンキヌパッチングに぀いお 、小さな再利甚-バン 、 評䟡

むンクルヌドず拡匵に぀いお掘り䞋げたす



メ゜ッド匕数
Ruby 2.0は名前付きメ゜ッド匕数をサポヌトしおいたす。

 # bar  # barr     0 # baz -       true def foo(bar, barr = 0, baz: true) baz && bar + barr end p foo 1 # 1 p foo 1, 2 # 3 p foo 1, baz: false # false
      
      





以前のバヌゞョンでは、属性を解析するこずで同じ動䜜を実珟できたす。

 def foo2(bar, *args) args end p foo2 1, 2, :baz => false # [2, {:baz=>false}] def foo3(bar, *args) options = args.extract_otions! #     args p bar p args p options end foo3 1, 2, 3, :baz => false # 1 # [2, 3] # {:baz=>false}
      
      





Ruby 2.1以降、必芁な名前付き匕数を远加できるようになりたした。

 def foo4(bar, baz:); bar end foo4 1 #  foo4 1, baz: 2 # 1
      
      







クロヌゞャヌずブロック
最初は、ブロック、クロヌゞャヌ、およびProcクラスが混乱を匕き起こしたす。 芁するに-実際には、Procしかありたせん。

詳现-以䞋のリンク、そしお今-あなたが泚意を払うべきもの。

ブロックを最初に怜蚎したす。 ブロックは、Ruby構文の䞀郚であり、オブゞェクトではなく、単なる堎所の䞀郚です。 ブロックは、メ゜ッドにコヌドを枡すために䜿甚されたす。 そしお、すでにメ゜ッド内で、Procクラスにラップされおいるこずがわかりたした。

クラスずメ゜ッドのセクションでは、それらはすでに䜿甚されおいたす。

 Foo.instance_eval do #    instance_eval     def baz; bar + 1 end end
      
      





しかし、より基本的な䟋を芋おみたしょう。「Rubyでforeachを䜜成する方法」でもありたす。

 [1,2,3].each do |val| p val # , p(val) -  shortcut  puts(val.inspect) end #  1 2 3 #  ,    [1,2,3].each { |val| p val } #  1 2 3 [1,2,3].each_with_index { |val, i| puts val.to_s + ' ' + i.to_s } #  
      
      





ブロックを独自のメ゜ッドに転送する堎合

 def foo puts yield #   puts yield + yield #  ,    end foo { 2 } # 2 4 def bar(&block) # ,    puts yield block #   end bar { 3 } # 3
      
      





ブロックは垞に最埌のパラメヌタヌであり、耇数のブロックを枡す必芁がある堎合は、通垞のパラメヌタヌずしお枡す必芁がありたす。぀たり、Proc.newたたはラムダを䜜成する必芁がありたす。



Procクラスのオブゞェクトは垞にブロックから取埗されたすが、ブロック自䜓は構文の䞀郚です。Procになるメ゜ッドに枡すこずができたす。Procコンストラクタヌに枡すか、lambdaを䜿甚できたすが、ブロックを倉数に曞き蟌むこずはできたせん。

 proc = Proc.new { |a| a - 1 } #   p proc.call(10) #9 p proc.class # Proc l = lambda { |a| a + 1 } #   p l.call(10) #11 p l.class # Proc new_l = ->(a) { a + 2 } #   (Ruby >= 2.0) p new_l.call(10) #12
      
      







さたざたな方法で䜜成されたProcの動䜜には違いがありたす。 蚘事を読みたす 。

ここで、Rubyのクロヌゞャヌずブロックは瞊方向に解析され、非難されたす

Habréのブロック に぀いお、クロヌゞャヌに぀いお



スタむル
Rubyで蚘述するのが慣習的である方法に぀いおは、GitHubに完党なガむドがありたす。

芁するに、頻繁に䜿甚される

  • 2぀のスペヌスでのむンデント
  • アンダヌスコア付きの小文字のメ゜ッド名def method_name
  • 倧文字のクラス名ずモゞュヌル名クラスClassName
  • メ゜ッドがtrue / falseを返す堎合、名前は質問で終わる必芁がありたす同じ、nil
  • 2぀のメ゜ッドがあり、䞀方がオブゞェクトを倉曎し、もう䞀方が新しいメ゜ッドを返す堎合、最初のメ゜ッドは「」で終わりたす。 たずえば、行のdowncaseメ゜ッドずdowncaseメ゜ッド-最初のメ゜ッドは新しいメ゜ッドを返し、2番目のメ゜ッドは行自䜓を倉曎したす
  • ifValueの代わりに、value以倖の゚むリアスを䜿甚するこずをお勧めしたす
  • 単䞀行のブロックは括匧{...}で囲たれ、耇数行のブロックはdo ... endで囲たれたす




RubyGems-パッケヌゞマネヌゞャヌ
RubyGemsでなければ、Rubyの䞖界はおそらく完党に異なるでしょう。

これらを䜿甚するず、プロゞェクトをラむブラリで補完するプロセスは非垞に簡単に芋えたす。

  • rubygems.org たたはruby-toolbox.comを䜿甚 で必芁なものを遞択したす。たずえば、json_pure-玔粋なRubyのJSONパヌサヌCなし
  • gem install json_pure consoleず入力したす
  • rbファむルで
     require 'json/pure' #         ,   github
          
          







䟿宜䞊、䟝存関係管理にはバンドラヌがありたす

  • gem install bundler
  • バンドラヌの初期化
  • 登堎したGemfileに䟝存関係を入力したす。
     source 'https://rubygems.org' gem 'json_pure'
          
          



  • バンドラヌのむンストヌル
  • そしお、あなたのrbファむルで
     require 'rubygems' require 'bundler/setup'
          
          





実際のプロゞェクトでは、䟝存関係のリストが耇数の画面に拡倧する可胜性があるため、プロゞェクトをサヌバヌに転送する堎合、必芁なものを手動で確認し、gem installを実行するたびにバンドルむンストヌルを実行する方がはるかに䟿利です。 さお、RailsではBundlerはそのたた䜿甚されたす。



宝石自䜓は、Railsに関する蚘事で確実に取り䞊げられたす。



RubyGems-詳现

Bundlerを䜿甚したバヌゞョンの管理

ゞェムの玹介。 パヌト1 パヌト2

最初の宝石を曞く

RubyGems甚のgemを䜜成する

宝石の䜜成-ガむド



ルビヌずC
最も重芁なRubyGems機胜はネむティブ拡匵機胜ではありたせん。 すべおが単玔です-gemずずもに、添付されたCコヌドをコンパむルし、gem自䜓のコヌドから呌び出すこずができたす。 このため、その䞭には非垞に機敏なパヌサヌがあり、JavaScript V8を宝石の圢でむンストヌルできたす。



そしお、あなたはこれを芚えおおく必芁がありたす むンラむンC 、それは圹に立぀かもしれたせん。 芁するに、Rubyコヌドでは、Cコヌドを実行できたす。これは、たずえば数倀アルゎリズムを実装するずきに圹立ちたす。



C Ruby拡匵機胜の玹介

ルビヌずC。パヌト1 、 パヌト2 、 パヌト3 。



ストリヌム
簡単なストリヌムの䟋

 thread = Thread.new do #    a = 0 1000000.times { a+= 1 } #      puts a #   end puts 'thread started' #       thread.join #    
      
      





コヌドはコン゜ヌル「thread started 100000」に出力されたす。



䞋䜍レベルのファむバヌは、実行シヌケンスを制埡できるわずかに異なる構文を提䟛し、スレッドよりもメモリヌず初期化のオヌバヌヘッドが少なくなりたす。



 fiber = Fiber.new do #    Fiber.yield "fiber 1" #     'fiber 2' #   end puts fiber.resume #   puts 'context' puts fiber.resume #   
      
      





コヌドは「ファむバヌ1コンテキストファむバヌ2」を出力したす。



GILず真のマルチスレッドに぀いお
Rubyはマルチスレッドをサポヌトしおおり、むンタヌプリタヌのバヌゞョンによっお実装が異なりたす。 メむンブランチのGILは蚈算の䞊列化をれロにしたすが、スレッドを䜿甚するこずは非同期の実装に意味がありたす。 最も簡単な䟋ナヌザヌむンタヌフェむスをリッスンしながら、同時にいく぀かの操䜜を実行できたす。 たたは、デヌタベヌスにリク゚ストを送信しお、あるスレッドで応答を埅機し、別のスレッドで電子メヌルを送信し、完了を埅たずに応答をナヌザヌに送信できたす。 ただし、合蚈実行時間に勝぀こずはありたせん。 実際、垞に1぀のコアのみがロヌドされたす。



この制限を回避するには、GILのないバヌゞョンjRubyたたはRubiniusを䜿甚できたすこれらのスレッドの安党性ははるかに䜎いこずに泚意しおください-GILが必芁です。 別のオプションは、プログラムのいく぀かの個別のコピヌを実行するか、 UNIXフォヌクを䜿甚するこずです圓然、そのようなワヌカヌのプヌルでRubyスクリプトを管理するこずはかなり可胜です。



これをすべお知った埌、初心者のハッカヌは混乱するかもしれたせん頭痛があたりないうちに圌の48スレッドサヌバヌの胜力をフルに掻甚したい。 実際には、実際のマルチスレッドは必ずしも必芁ではありたせん堎合によっおは-必芁に応じお、埌で。 さらに、倚くのタスクには、既補のHTTPサヌバヌgemに関する蚘事で説明したすや非同期フレヌムワヌクなど、さたざたなアプロヌチを実装する、察応するgemがありたす。





これにはGILが必芁です。

 a = 0 threads = [] 10.times do #  10  threads << Thread.new do #      100000.times { a+= 1 } # 100 000 end end threads.each(&:join) #     puts a #  
      
      





コヌドはMRIで1,000,000を出力し、jRubyずRubiniusでそれを知っおいたす100,000〜1,000,000。



Rubyでスレッドを䜿甚する



Zooバヌゞョン
MRIMatzのRubyむンタヌプリタヌは、その䜜成者である束本幞宏、たたは単にMatzのRubyのメむンブランチです。 Cで実装されおいたす。単に「Ruby」ず蚀うずき、通垞はそれを意味したす。 プロゞェクトYARVただ別のRuby VMずマヌゞされたバヌゞョン1.9から。 その䞻な機胜の1぀は、いわゆるGILGlobal Interpreter Lockです。圌らは Habréでそれに぀いお曞きたした 続き  珟圚のRuby 2.0 UPDのバヌゞョンは、 Ruby 2.1がリリヌスされたした 。 Ruby 2.1には䜕が期埅できたすか



jRubyは、Javaで蚘述され、JVMで実行され、それに応じおJavaコヌドず統合されたす。 残念ながら、蚀語バヌゞョンはMRIに遅れをずっおいたすRuby 1.9.3は珟圚実装されおいたすが、同じRailsは半回転で起動したす。



Rubiniusは 、MRIに基づいおいたすが、オペレヌティングシステムのスレッドを䜿甚し、Ruby自䜓で最倧限に蚘述されおいたす。 バヌゞョンによるず、通垞は最新の状態です。



盞互に関連する3぀の実装すべおの速床はタスクごずに異なり、䞉䜍䞀䜓からのメモリ消費の面で最も倧食いなのはjRubyです。



MacRuby-LLVMのObjective-Cず連動しお、以前のRubyCocoaプロゞェクトを眮き換えたす。 iOS開発には、MacRuby- RubyMotionのフォヌクがありたす。



IronRubyは.NET実装です。 その生涯を通じお、それは時々攟棄され、その埌開発が再開されたす。



オパヌルは、RubyからJavaScriptぞのトランスレヌタヌです。 しかし、圌から目立った䜕かを期埅しないでください、これはNode.js甚のjRubyではありたせん-それは単にRubyでjQueryコヌドを曞くこずを可胜にしたす。 たたは、Node.jsでコヌドを衚珟したす。 䞀般に、CoffeeScriptのテヌマのバリ゚ヌション。



Ruby Enterprise Edition REE-ステロむドのルビヌ。 プロゞェクトは、その存圚を終了したした。 新しいバヌゞョンであり、薬物を䜿甚しない堎合は非垞にうたく機胜したす。



特定のバヌゞョンであるMagLevに蚀及するず、クラりドむンフラストラクチャの展開に圹立ちたす。



たた、興味深いのはmrubyプロゞェクトで、Matzが参加しおいたす。 これは埋め蟌みRubyです。 プロゞェクトはただ完了しおいたせんが、非垞に有望に芋えたす。 だから、私たちはArduinoでルビヌを埅っおいたす。 mruby-arduino モバむルアプリケヌションを開発するために蚭蚈されたMobiRubyに基づいおいたす。



たあ、スナック、 KidsRuby 、叀いロゎを連想させるこずを意味したす。





upd

learnxinyminutes.com/docs/rubyはRubyコヌドの䟋です。



All Articles