- PVSM.RU - https://www.pvsm.ru -
Источник [1] изображения
Хорошие новости для разработчиков — вышел Ruby 3.0.0 [2], новый релиз динамического объектно-ориентированного языка программирования. По словам его поклонников, в новую версию вошло лучшее от Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp.
Новая версия Ruby — восьмой значительный выпуск, который получил множество обновлений и улучшений. К слову, над третьей версией разработчики трудились около пяти лет. Ее особенности — высокая производительность, параллелизм и типизация.
Кстати, те же пять лет назад автор языка Юкихиро Мацумото (Yukihiro Matsumoto) предложил концепцию Ruby 3x3. Она подразумевает, что выпуск Ruby 3.0 станет возможным после того, как удастся добиться трехкратного прироста производительности по сравнению с версией 2.0. В последнем релизе этого удалось добиться благодаря усовершенствованию поддержки JIT-компиляции.
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
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
— Mutex#lock, Mutex#unlock, Mutex#sleep
— ConditionVariable#wait
— Queue#pop, SizedQueue#push
— Thread#join
— Kernel#sleep
— Process.wait
— IO#wait, IO#read, IO#write и связанные с ними методы
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
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}
def square(x) = x * x
Автор: Seleditor
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ruby/360069
Ссылки в тексте:
[1] Источник: https://sloboda-studio.com/blog/big-news-ruby-version-3-0/
[2] вышел Ruby 3.0.0: https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/
[3] добавили: https://www.opennet.ru/opennews/art.shtml?num=54315
[4] Источник: https://habr.com/ru/post/534958/?utm_source=habrahabr&utm_medium=rss&utm_campaign=534958
Нажмите здесь для печати.