Bahasa pemrograman Ruby 3.0.0 telah dirilis, yang telah disiapkan sejak 2015



Sumber gambar



Kabar baik bagi para pengembang - Ruby 3.0.0 telah hadir, rilis baru dari bahasa pemrograman berorientasi objek yang dinamis. Menurut penggemarnya, versi baru ini menyertakan yang terbaik dari Perl, Java, Python, Smalltalk, Eiffel, Ada dan Lisp.



Rilis Ruby baru adalah rilis utama kedelapan dan telah menerima banyak pembaruan dan peningkatan. Omong-omong, para pengembang telah mengerjakan versi ketiga selama sekitar lima tahun. Fitur-fiturnya adalah kinerja tinggi, konkurensi, dan pengetikan.



Ngomong-ngomong, lima tahun lalu yang sama, penulis bahasa Yukihiro Matsumoto mengusulkan konsep Ruby 3x3. Ini menyiratkan bahwa rilis Ruby 3.0 akan dimungkinkan setelah dapat mencapai peningkatan kinerja tiga kali lipat dari versi 2.0. Dalam rilis terbaru, ini telah dicapai melalui dukungan kompilasi JIT yang ditingkatkan.



Apa yang baru?



  • 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 # lock, Mutex # unlock, Mutex # sleep

- ConditionVariable # wait

- Queue # pop, SizedQueue # push

- Thread # join

- Kernel # sleep

- Process.wait

- IO # wait, IO # read, IO # write and related dengan mereka metode



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
      
      





  • Pencocokan pola satu baris "Tambahkan operator - nilai-variabel", yang digunakan untuk penetapan nilai di sebelah kanan, telah didesain ulang.


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





Selain itu, perilaku "dalam" telah diubah, sekarang mengembalikan benar atau salah.

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





Menambahkan template eksperimental untuk menemukan nilai:


   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
      
      





  • Menambahkan Hash # kecuali metode.


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





  • Sekarang ada dukungan untuk definisi metode satu baris tanpa menggunakan kata kunci "akhir".


   def square(x) = x * x
      
      





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





All Articles