LINUX.ORG.RU

Ruby 3.0.0

 ,

Ruby 3.0.0

1

3

Вышел новый релиз динамического рефлективного интерпретируемого высокоуровневого объектно-ориентированного языка программирования
Ruby версии 3.0.0. По заявлению авторов, зафиксировано утроение производительности (по тесту Optcarrot), таким образом достигнута поставленная в 2016 году цель, описанная в концепции Ruby 3x3.

Для достижения этой цели в ходе разработки уделили внимание таким направлениям:

  • Performance — производительность
    • MJIT — сокращение времени и уменьшение размера генерируемого кода
  • Concurrency — обеспечение параллелизма
    • Ractor — начальная поддержка новой модели акторов
    • Fiber Scheduler — планировщик fiber-потоков
  • Typing — статический анализ кода
    • RBS — инструмент для аннотации типов
    • TypeProf — новый анализатор типов

>>> Подробности

★★★★★

Проверено: cetjs2 ()
Последнее исправление: atsym (всего исправлений: 19)

Ответ на: комментарий от pihter

Нет, это ты приходишь в балетную школу в валенках и говоришь, «девочки, а зачем вам пуанты и такие коротенькие юбки»? Дед, отец и я сам ходим в валенках и ватных штанах, нам нормально. Ты даже не удосужился понять основную парадигму языка, а берешься критиковать.

lizik
()
Ответ на: комментарий от lizik

а зачем вам пуанты

Прочитал как «путаны». Голова не варит уже.

БекдорЛавер, что же ты со мной сделал. (Гусары, …)

anonymous
()
Ответ на: комментарий от anonymous

На dart - запросто. 0 проблем представить. Но речь, конечно шла не об этом, а о том, что в немалой степени яву на плаву держит мобильная разработка. А в качестве бека есть целая уйма вариантов от дарта до пхп, и почему нужно выбирать именно яву, думаю, никто внятно не ответит.

special-k ★★★
()
Последнее исправление: special-k (всего исправлений: 2)
Ответ на: комментарий от beck

Покамест в консервативном жырном ынтерпрайзе до питона не дошло.

10 лет прошло, а тут все те же байки. Давно дошло, уже даже пробовали переходить на один лишь js с переменным успехом.

Руби сейчас выгодно отличает многопоточность. На этих ваших питонах такого нет и вряд ли появится. А если появится, то проблемы с совместимостью будут такие, что пользоваться все равно можно будет только лет через 10 после того как завезут.

special-k ★★★
()
Последнее исправление: special-k (всего исправлений: 1)
Ответ на: комментарий от lizik

Посмеялся… А коммуницируют ядра через libastral?

anonymous
()
Ответ на: комментарий от special-k

А оно там нужно? Это или влегкую что-то заскриптовать, где производительность никак не нужна, либо связать на высоком уровне нативные примитивы (ml, big data и прочие популярные сейчас штуки).

Для серверов есть решения получше и рубей, и питона.

anonymous
()
Ответ на: комментарий от anonymous

Производительности любого популярного языка достаточно. На беке всегда все упирается в БД. По сути бек - это тонкая прослойка между БД и клинтом. Чуть толще/чуть тоньше - всем по большому счету плевать.

special-k ★★★
()
Ответ на: комментарий от anonymous

Это или влегкую что-то заскриптовать

Что и требуется в вебе. Тем более если брать рельсы, таиэм уже и так всё что можно заскриптовано, остается лишь добавить немного бизнес-логики. Сервер приложений и СУБД конечно на рубях не пишут.

anonymous
()
Ответ на: комментарий от anonymous

А что такое «сервер приложений?» Всегда думал, что это и есть backend…

anonymous
()
Ответ на: комментарий от special-k

Не знаю, во что у гитлаба уперлось 😞 гитхаб даже бесплатный летает, а это поделие даже отнпрем на некислом железе еле скрипит…

Но вообще мне кажется, зависит от нагрузки: вроде фейсбук чтобы на железе сэкономить вроде написал транслятор из php в C.

anonymous
()
Ответ на: комментарий от pihter

Проведи исследование: покажи 10 программистам и пусть они тебе опишут как они это поняли. Потом ста.

Ну и проведи. Во всём мире ненавидят Raw loops. Все пытаются от них уйти, это считается code smell. И эти for рефакторят при первой же возможности на идиоматические конструкции.

@special-k

Во-первых так стараются не писать даже в тех языках, где эта конструкция работает.

+100

fsb4000 ★★★★★
()

Опять срач типа «что лучше, кирка или лопата?» Господи, да на упоротых имиджбордах уровень дискусси выше и желчи меньше чем здесь.

Владимир

anonymous
()
Ответ на: комментарий от lizik

Ты даже не удосужился понять основную парадигму языка, а берешься критиковать.

Ничего подобного, я не критику, я недоумеваю,я ж так и написал)

Я действительно ничего о руби не знаю, мож и посмотрю на досуге. Вокруг столько всего интересного, всего не насмотришься

pihter ★★★★★
()
Ответ на: комментарий от fsb4000

Ну и проведи Вот сейчас все лентяи коллеги попросыпаются – я ведь спрошу!

Во всём мире ненавидят Raw loops Почему? В первый раз слышу. Может они там во всем мире еще и ветвления ненавидят? Странно это все…

И эти for рефакторят при первой же возможности на идиоматические конструкции.

Я, вроде, понимаю о чем вы, но головой, а душой – не понимаю. Зачем плодить сотню «идиоматических конструкций» только ради того чтоб избавиться от всем очевидного for со счетчиком, видите-ли код «smell». Не знаю, детский сад какой-то :)

Для деревенщины, вроде меня, научите какие еще могут быть тут конструкции? Ну вот 10 times я уяснил, на ум приходят еще foreach и всякие там итераторы. Ну как-то это все вместе взятое не тянет на for со счетчиком как по мне.

pihter ★★★★★
()
Ответ на: комментарий от pihter

Ты зачем используешь столько много слов и их конструкций при разговоре? Большинство из них взаимозаменяемы, зачем наплодил сущностей?

anonymous
()
Ответ на: комментарий от pihter

Для деревенщины, вроде меня, научите какие еще могут быть тут конструкции?

Вот тут есть достаточно примеров на Python и С++, на что заменять циклы for: https://youtu.be/CjHgL5EQdcY

Если коротко, то в каждом языке есть стандартная библиотека и там есть алгоритмы. Вот на них и заменять циклы for.

Вот один из примеров из видео, вместо 7 строчек циклов стала 1 строчка из алгоритмов: https://imgur.com/a/ObQk3Ob

fsb4000 ★★★★★
()
Ответ на: комментарий от pihter

Всё программисты в мире понимают for i=0 i<10 i++ { Print «hello» }

Всё. До одного. Это предельно понятно, читабельно и есть во всех языках.

Из 205 языков программирования на RosettaCode подобная конструкция есть только в 30 (включая такие эксклюзивы как HolyC и Apex).

Для остальных гораздо понятнее конструкции вида for i = 0 to 9 …, если требуется счётчик, и repeat 10 …, если не требуется.

В самых старых языках было так:

   do 20 i = 1, 10
   write(*,*) 'hello'
20 continue
(loop repeat 10 do (print "hello"))
monk ★★★★★
()
Ответ на: комментарий от anonymous

Ты зачем используешь столько много слов и их конструкций при разговоре? Большинство из них взаимозаменяемы, зачем наплодил сущностей?

Что на это ответить? Программирование и устная речь – не одно и то же. Но мысль ясна. Мол можно и наплодить немного лишних сущностей для красоты, верно?

pihter ★★★★★
()
Ответ на: комментарий от fsb4000

Если коротко, то в каждом языке есть стандартная библиотека и там есть алгоритмы

Мне кажется (кажется!) что использование этих вот алгоритмов из стандартной библиотеки везде и повсеместно, когда можно и самому написать, – контрпродуктивно. Ну, то есть, понятно, что алгоритм реализован наилучшим образом, быстр, отлажен и продуктивен, понятно, почему юзать его, вроде бы, – бест практис, НО: сколько всяческих алгоритмов бывает? Сколько языков, сколько стандартынх библиотек у них? Когда все это изучать? Таким макаром будешь всю жизнь только и изучать, и все равно не охватишь, не догонишь. Одно дело использовать всем известный sort. И совсем другое, какую-нибудь мелочь, которую можно в 10 строк и так написать. Это ведь надо чтоб я когда-то это изучил, чтоб читающий мой код человек тоже это изучил и тд и тд

Уже только один C++ раздули так, что на лоре в открытую ржут над словами «я изучил Си++», комментируя «а я выпил море и пересчитал звезды» в то время как Си изучается по паре книг за пару месяцев по вечерам.

Эти гонки за бест практисами приводят к тому что невозможно научиться программировать, можно только бежать изо всех сил всю жизнь, чтоб отстать меньше, чем остальные: только начали все переползать на gtk3 – они выкатывают gtk4, а с веб-фремверками (будь они неладны) вообще, пока в туалет отойдешь – две мажорные версии сменятся, ощущение, что все кукухой поехали на этой гонке.

Я к чему, к тому что постоянное переписывание программы под все более и более современные практики подменило собой цель – написать программу.

pihter ★★★★★
()
Ответ на: комментарий от monk

гораздо понятнее конструкции вида for i = 0 to 9 …

я не имел в виду конкретно сишный (у меня не сишный, у меня – стелефонанабранный) я имел в виду в принципе цикл for с явным счетчиком (немаловажно, что именно i :) ) в противовес 10.times { … } – в том смысле, что нафиг было изобретать 10.times когда есть for который ВСЕМ ПОНЯТЕН и ЕСТЬ ВЕЗДЕ (наверное, почти везде, но я ничего без for, в том или ином виде, никогда не видел)

pihter ★★★★★
()
Ответ на: комментарий от fsb4000

Ну и проведи

Опросил коллег, 15 дармоедов, плисовики, питонисты, джаваскриптисы, тестеры: ожидаемо, все до одного поняли все однозначно (они, конечно, поприкалывались, мол не ясно что за тип у i и все такое, но это именно приколы – все все поняли)

Я думаю, что ты не найдешь ни одного программиста, который бы не понял. Душой кривить, конечно, будут, но всем все понятно, без дураков.

pihter ★★★★★
()
Ответ на: комментарий от pihter

Что на это ответить? Программирование и устная речь – не одно и то же.

Одно и то же. Языки программирования все равно, что устная речь. Цель у них та же, передавать информацию между программистами, а не от программиста машине.

Машине можно и машинными кодами передавать, если что. И лупы не нужны, джампов достаточно.

anonymous
()
Ответ на: комментарий от pihter

нафиг было изобретать 10.times когда есть for

Затем, чтобы не плодить неиспользуемые переменные. for подразумевает, что каждая итерация цикла чем-то отличается. А если надо явно указать, что они идентичны, то лучше использовать цикл без счётчика. Иначе приходится писать что-то вроде

for(int dummy=0; dummy < 10; dummy++) ...
monk ★★★★★
()
Ответ на: комментарий от anonymous

Одно и то же. Языки программирования все равно, что устная речь.

Машине можно и машинными кодами передавать, если что. И лупы не нужны, джампов достаточно.

Юношеский максимализм?

pihter ★★★★★
()

Беда всех скриптовых языков в том, что их «создают», а потом десятилетия улучшают производительность, вместо того … /ну вы поняли/.

anonymous
()
Ответ на: комментарий от monk

Затем, чтобы не плодить неиспользуемые переменные

Что в этом плохого? Можно подумать N.times { … } не плодит переменную-счетчик, просто ты ее не видишь. Не лучше ли «лишняя» переменная, чем лишняя конструкция?

Я понимаю, что дело вкуса, и, собственно, спор о вкусах по определению бессмысленнен, но я и не с претензией на спор – просто мнение

pihter ★★★★★
()
Ответ на: комментарий от anonymous

Одно и то же. Языки программирования все равно, что устная речь. Цель у них та же, передавать информацию между программистами, а не от программиста машине.

То бишь компьютер «не при деле»?

anonymous
()
Ответ на: комментарий от pihter

Я думаю, что ты не найдешь ни одного программиста, который бы не понял. Душой кривить, конечно, будут, но всем все понятно, без дураков.

Спросил у соседа (писал на Паскале, bat, ассемблере, 1C).

Он сказал, что похоже на условную конструкцию. А окончание на добавление к переменной i блока с командой.

monk ★★★★★
()
Ответ на: комментарий от pihter

А, ты не очень умный. Понятно.

anonymous
()
Ответ на: комментарий от fsb4000

Ну и проведи. Во всём мире ненавидят Raw loops. Все пытаются от них уйти, это считается code smell.

Маня, переставай играть в школьные обобщения. Переведу его высер на русский: «Я прочитал несколько комментариев на reddit и посмотрел две презентации с CppCon на youtube (ты же у нас любитель попрограммировать на youtube, верно?) с критикой «raw loops», и не мудрствуя лукаво пришел к выводу, что «весь мир ненавидит» циклы!!!» Я тебе могу привести примеры обратного (особенно в gamedev’е), когда любителей «Modern C++» смешивают с говном за то, что они пишут нечитабельную кашу.

https://mobile.twitter.com/nice_byte/status/1259708408728436736

Будет это означать, что во всем мире ненавидят Современный C++? Нет, единственно правильный вывод таков – «Некоторые предпочитают обычные циклы, другие же – обмазываться альтернативными вариантами».

anonymous
()
Ответ на: комментарий от pihter

Я, вроде, понимаю о чем вы, но головой, а душой – не понимаю. Зачем плодить сотню «идиоматических конструкций» только ради того чтоб избавиться от всем очевидного for со счетчиком, видите-ли код «smell». Не знаю, детский сад какой-то :)

Дядя, да пойми ты уже, что общаешься с догматиком, он себе в голову вбил всякими «best practices», «code conventions» и т.д, что обычные циклы это плохо, и давай поучать всех вокруг с умным видом. В некоторых сферах (хотя, наверное, все от компании зависит) больше склоняются к C-like C++, и в этом нет ничего плохого, это тоже валидный C++, например, в gamedev’е. Вот, например, Православный C++

anonymous
()
Ответ на: комментарий от pihter

Можно подумать N.times { … } не плодит переменную-счетчик, просто ты ее не видишь.

Но ведь и в си полно невидимых переменных. Например, в выражении «(a || b) && (c || d)» есть две невидимые переменные для результатов операций в скобках. Тоже можно сказать, что это излишество, ибо это не даёт даже прироста в лаконичности. Просто явных переменных меньше.

С другой стороны, мне больше нравится подход языков типа go, в которых for используется для всех циклов, так как «for N» запомнить легче, чем N.times.

Kogrom
()
Ответ на: комментарий от monk

Спросил у соседа … Он сказал, что похоже на условную конструкцию.

for i=0 i<10 i++ { Print «hello» }

for.. на условную констуркцию.. ну ок. Подозреваю, что ты как-то с ехидцой спросил )

писал на Паскале, bat, ассемблере, 1C

не скажу за 1С но на паскале и интерпретаторе_бат_файлов for – это цикл со счетчиком

Спросил у соседа …

… по подъезду? :) // извините, петросянство, не удержался: я кофе попил :)

pihter ★★★★★
()
Ответ на: комментарий от anonymous

да пойми ты уже, что общаешься с догматиком

ну… он на сайте не так давно, а успел уже пару раз по делу помочь практическим советом, когда я заходил в тупик самостоятельно. Так что, чтоб б там ни было, в возможности иметь собственное мнение я ему не откажу: не имею морального права. Метапрогу разрешают резвиться и то, а тут – вполне адекватное мнение, просто не совпадающее с моим. Я на лор прихожу людей послушать, это расширяет кругозор, если б я был во всем прав – какой тогда смысл слушать других? Вот я и спрашиваю подробности у окружающих.

Не знаю, чем он тебе не угодил (да мало ли, в последнее время на ЛОРе принято общяться некультурно) но конкретно fsb – не пустозвон. Уж не пустозвонне меня точно :)

Кстати, где ты его на ютубе видел, я б полубопытствовал )

pihter ★★★★★
()
Ответ на: комментарий от Kogrom

Но ведь и в си полно невидимых переменных. Например, в выражении «(a || b) && (c || d)» есть две невидимые переменные для результатов операций в скобках. Тоже можно сказать, что это излишество, ибо это не даёт даже прироста в лаконичности. Просто явных переменных меньше.

Ну я бы не сказал, что «полно», но есть, да. И что? :) разговор-то был не о том

запомнить легче, чем N.times

чтоб я там не бухтел, N.times {} самоочевидно. Я, например, вчера впервые увидел и сразу понял о чем речь. Но, например, twice {} тоже было бы самоочевидно, но я не сказал бы что вижу в таком смысл. Такого самоочевидного можно сначала напридумывать тыщу, а потом замучаешься изучать и умрешь.

pihter ★★★★★
()
Ответ на: комментарий от lizik

Есть языки с иммутабельными переменными. И как там сделать счетчик?

Я сейчас рискую показаться невеждой, но как ПЕРЕМЕННАЯ может быть иммутабельной(==неизменяемой)? Переменная по определению может менять значения, она по этому так и называется.

Какие такие языки? Может кругозор расширю.

И как там сделать счетчик?

Это Тьюринг-полные языки или ХТМЛ какой?

pihter ★★★★★
()
Ответ на: комментарий от pihter

разговор-то был не о том

Почему не о том? И там и там не создаём явных переменных, без которых можно обойтись.

N.times {} самоочевидно

Это когда читаешь. Когда пишешь - придётся всё время смотреть в справочник. Особенно, если используешь несколько языков. Я, например, всё время забываю как лямбду написать в определённом языке, хотя с чтением никаких проблем нет.

Kogrom
()
Ответ на: комментарий от pihter

Кстати, где ты его на ютубе видел, я б полубопытствовал )

Нигде, он просто любит таскать сюда видео с конференций по C++, как слепой котенок повторяя за их авторами. Такое чувство, что если ему завтра Страуструп скажет с крыши прыгнуть, то он и сиганет не думая. Вялое, податливое существо, от таких никогда не услышишь «В своем коде, на практике, я писал и пришел к такому выводу…», а только «Вот тот дядя сказал, а если он сказал, значит, правда.» Критическое мышление отсутствует насквозь.

anonymous
()
Ответ на: комментарий от pihter

Подозреваю, что ты как-то с ехидцой спросил

Дал строчку, предложил угадать, что делает.

не скажу за 1С но на паскале и интерпретаторе_бат_файлов for – это цикл со счетчиком

Там нормальный for, а не с двумя условиями в параметрах. А пытаться угадать чужие конструкции по ключевым словам не всегда логично. Вот тебе пример пары конструкций:

for [1, 2, 3] (:[])
map ([1]++) [[1], [2], [3]]

угадай, что делают.

monk ★★★★★
()
Ответ на: комментарий от Kogrom

Когда пишешь - придётся всё время смотреть в справочник. Особенно, если используешь несколько языков.

Так это вне зависимости от конструкции. Даже с тем же for с тремя аргументами — бывают разные скобки, разные запятые, разные записи оператора «<»…

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от Kogrom

Почему не о том? И там и там не создаём явных переменных, без которых можно обойтись.

разговор был не о явных/неявных переменных, это было так – лирическое отступление. При прочих равных, я считаю, что явное лучше неявного (но это я так считаю, другие, очевидно, могут считать по-другому и быть при этом не менее правыми, чем я). В том же N.times {} хоть и неявная переменная, но смысл очевиден и (возможно) явно она и не нужна. Как и в примере из Си, который ты совершенно справедливо привел. Я лишь ответил moonk-у, что обвинять for в создании ненужной переменной – сомнительно, учитывая что в N.times переменная тоже, очевидно, создается. То есть ресурсы все равно тратятся, только что листинг «не засоряется» (со взятым в кавычки я не согласен, i как счетчик цикла – стандерт де-факто и ничего она не засоряет, даже, в какой-то мере, делает читабельнее)

Это когда читаешь. Когда пишешь - придётся всё время смотреть в справочник.

я о том и толкую

pihter ★★★★★
()
Ответ на: комментарий от pihter

но я ничего без for, в том или ином виде, никогда не видел

Если брать классический ООП (Smalltalk), то он пишется так:

1 to: 10 do: [:x | x printNl ]

Во многих языках for бывает только как «для каждого» для коллекций.

который ВСЕМ ПОНЯТЕН и ЕСТЬ ВЕЗДЕ

Зачем по-русски пишешь, если есть латынь, которая ВСЕМ ПОНЯТНА и ЕСТЬ ВЕЗДЕ?

monk ★★★★★
()
Ответ на: комментарий от lizik

Хаскель.

это все же не то, о чем мы говорим. Я не знаю, как там в хаскель, но, насколько я понимаю, там переменные в математическом смысле слова, а не в программистком. То есть одно слово обозначает два разных понятия, и ты, если я все правильно понимаю, занимаешься подменой понятий играя на том, что они (разные понятия) обозначаются одним словом переменная. Это негодный полемический прием.

Подчеркну, это если я правильно понял.

pihter ★★★★★
()
Ответ на: комментарий от Im_not_a_robot

Ты все правильно прочитал. Балет всегда был борделем для аристократии.

Не знал, не знал, видимо, я – «быдло».

anonymous
()
Ответ на: комментарий от monk

Да, можно сказать, что вкусовщина. Но запись с for - это явный statement, а N.times похоже на expression. И мне была бы тут более очевидна такая форма: N.times(какая-нибудь лямбда), а не классический цикл.

Kogrom
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.