2015年から準備されているRuby3.0.0プログラミング言語がリリースされました



画像ソース



開発者にとって朗報- 動的オブジェクト指向プログラミング言語の新しいリリースであるRuby3.0.0が到着しました。彼のファンによると、新しいバージョンには、Perl、Java、Python、Smalltalk、Eiffel、Ada、Lispの最高のものが含まれています。



Rubyの新しいバージョンは8番目のメジャーリリースであり、多くの更新と改善が行われています。ちなみに、開発者は約5年間3番目のバージョンに取り組んできました。その機能は、高性能、同時実行性、および型指定です。



ちなみに、同じ5年前、松本幸弘という言語の作者がRuby3x3のコンセプトを提案しました。これは、Ruby 3.0のリリースが、バージョン2.0の3倍のパフォーマンス向上を達成した後に可能になることを意味します。最新のリリースでは、これは改善されたJITコンパイルサポートによって実現されています。



新着情報?



  • MJIT. , , ( Optcarrot), AI ( Rubykon). , . , , . JIT-, , , , Rails. , i-cache.




  • RBS, Ruby. RBS . : , , , . , TypeProf, , RBS.


   module ChatApp
     VERSION: String
     class Channel
      attr_reader name: String
       attr_reader messages: Array[Message]
       attr_reader users: Array[User | Bot]  # `|` means union types, `User` or `Bot`.
       def initialize: (String) -> void
       def post: (String, from: User | Bot) -> Message  # Method overloading is supported.
            | (File, from: User | Bot) -> Message
     end
   end
      
      





  • Ractor. , . , , . .


   require 'prime'
   # n.prime? with sent integers in r1, r2 run in parallel
   r1, r2 = *(1..2).map do
    Ractor.new do
      n = Ractor.recv
       n.prime?
     end
   end
   # send parameters
   r1.send 2**61 - 1
   r2.send 2**61 + 15
   # wait for the results of expr1, expr2
   p r1.take #=> true
   p r2.take #=> true
      
      





  • fiber- Fiber#scheduler, , . , :


--Mutex#ロック、Mutex#ロック解除、Mutex#スリープ -ConditionVariable

#待機

-キュー#ポップ、SizedQueue#プッシュ

-スレッド#参加

-カーネル#スリープ

-Process.wait

-IO#待機、IO#読み取り、IO#書き込みおよび関連それらの方法で



require 'async'
   require 'net/http'
   require 'uri'
   Async do
     ["ruby", "python", "c"].each do |topic|
       Async do
         Net::HTTP.get(URI "https://www.google.com/search?q=#{topic}")
       end
     end 
   end
      
      





  • 値の右側の割り当てに使用されるパターンマッチング「Addoperator--variable-value」のワンライナーが作り直されました。


   0 => a
   p a #=> 0
   {b: 0, c: 1} => {b:}
   p b #=> 0
      
      





さらに、「in」の動作が変更され、trueまたはfalseを返すようになりました。

   # version 3.0
   0 in 1 #=> false
   # version 2.7
   0 in 1 #=> raise NoMatchingPatternError
      
      





値を見つけるための実験テンプレートを追加しました。


   case ["a", 1, "b", "c", 2, "d", "e", "f", 3]
   in [*pre, String => x, String => y, *post]
     p pre  #=> ["a", 1]
     p x    #=> "b"
     p y    #=> "c"
     p post #=> [2, "d", "e", "f", 3]
   end
      
      





  • メソッド以外のハッシュ#を追加しました。


   h = { a: 1, b: 2, c: 3 }
   p h.except(:a) #=> {:b=>2, :c=>3}
      
      





  • 「end」キーワードを使用せずに、1行のメソッド定義がサポートされるようになりました。


   def square(x) = x * x
      
      





  • C-API - .
  • IRB. , 53 (!) , Ruby 2.7.
  • gem-, stdlib.





All Articles