Die Programmiersprache Ruby 3.0.0 wurde veröffentlicht, die seit 2015 vorbereitet wurde



Bildquelle



Gute Nachrichten für Entwickler - Rubin 3.0.0 ist da, eine neue Version eines dynamischen objektorientierten Programmiersprache. Laut seinen Fans enthält die neue Version das Beste aus Perl, Java, Python, Smalltalk, Eiffel, Ada und Lisp.



Die neue Version von Ruby ist die achte Hauptversion und hat viele Updates und Verbesserungen erhalten. Die Entwickler arbeiten übrigens seit etwa fünf Jahren an der dritten Version. Seine Funktionen sind hohe Leistung, Parallelität und Eingabe.



Übrigens schlug der Autor der Sprache Yukihiro Matsumoto vor fünf Jahren das Ruby 3x3-Konzept vor. Dies bedeutet, dass die Veröffentlichung von Ruby 3.0 möglich wird, nachdem die dreifache Leistungsverbesserung gegenüber Version 2.0 erreicht werden kann. In der neuesten Version wurde dies durch eine verbesserte Unterstützung der JIT-Kompilierung erreicht.



Was gibt's Neues?



  • 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 # sperren, Mutex # entsperren, Mutex # sleep

- ConditionVariable # wait

- Queue # pop, SizedQueue # push

- Thread # join

- Kernel # sleep

- Process.wait

- IO # wait, IO # read, IO # write und verwandte mit ihnen Methoden



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
      
      





  • Der einzeilige Mustervergleich "Operator hinzufügen - Wertvariable", der für die rechte Zuweisung von Werten verwendet wird, wurde neu gestaltet.


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





Außerdem hat sich das Verhalten von "in" geändert, jetzt wird true oder false zurückgegeben.

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





Experimentelle Vorlage zum Finden von Werten hinzugefügt:


   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
      
      





  • Hash # außer Methode hinzugefügt.


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





  • Einzeilige Methodendefinitionen werden jetzt ohne Verwendung des Schlüsselworts "end" unterstützt.


   def square(x) = x * x
      
      





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





All Articles