После года разработки опубликован (https://www.ruby-lang.org/en/news/2018/12/25/ruby-2-6-0-rele... релиз Ruby 2.6.0 (http://www.ruby-lang.org), динамического объектно-ориентированного языка программирования, отличающегося высокой эффективностью разработки программ и вобравшего в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Код проекта распространяется под лицензиями BSD ("2-clause BSDL") и "Ruby", которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3. Ruby 2.6 является шестым значительным выпуском, подготовленным в рамках планового процесса разработки, подразумевающего отведение года на подготовку функциональных улучшений и формирование каждые 2-3 месяца корректирующих выпусков.Основные (https://anamaria.martinezgomez.name/2018/12/21/ruby2_6.html) улучшения (https://github.com/ruby/ruby/blob/v2_6_0/NEWS):
- Добавлена экспериментальная реализация JIT-компилятора, который позволяет ощутимо поднять производительность приложений на языке Ruby. В отличие от традиционных JIT, генерирующих на лету машинные инструкции, преложенный в Ruby JIT-компилятор вначале записывает (https://bugs.ruby-lang.org/projects/ruby/wiki/MJIT#MJIT-orga... на диск код на языке Си, после чего вызывает внешний Си-компилятор для генерации машинных инструкций (поддерживается вызов GCC, Clang и Microsoft VC++). Для активации JIT необходимо указать при запуске ruby опцию "--jit" или установить данную опцию в переменной окружения RUBYOPT. По сравнению с Ruby 2.5 включение JIT в среднем в 1.7 раза увеличивает производительность приложений, интенсивно использующих CPU. При этом разработка пока экспериментальная и плохо адаптирована длянагрузок, связанных с интенсивной работой с памятью;- Добавлен экспериментальный модуль RubyVM::AbstractSyntaxTree, предоставляющий метод парсинга, обрабатывающий передаваемые строки как код на языке Ruby и возвращающий абстрактное синтаксическое дерево (AST (https://ru.wikipedia.org/wiki/%D0%90%D0%... Abstract Syntax Tree) для этого кода;
- Для обращения к методу "Kernel#yield_self" теперь можно использовать псевдоним "#then". Для методов "Array#|" и "Array#-" предложены более читаемые псевдонимы "Array#union" и "Array#difference";
- Имена констант теперь могут начинаться с заглавных букв не из набора ASCII (например, сейчас можно писать "class Σ♥²; end
");
- Добавлена поддержка незаканчивающихся диапазонов, например,
"ary[1..]" или "(1..).each {...}";
- Добавлен класс Enumerator::Chain и методы
"Enumerable#chain" и "Enumerator#+" для создания цепочек перечисляемых значений;- В модули Proc и Method добавлена поддержка операторов ">", например, конструкция "(f << g).call(3)" идентична "f(g(3))";
- Добавлен метод "Binding#source_location", который возвращает местоположение файла с кодом и номер строки привязанного объекта;
- В метод "Kernel#system" добавлена опция "exception:" для генерации исключения при сбое вместо возвращения "false";
- В модуль Coverage добавлен режим "oneshot", который проверяет, запущенна ли каждая строка как минимум один раз;
- В методе "Hash#merge" обеспечена возможность слияния более двух хэшей;- Добавлен метод "FileUtils#cp_lr", который работает по аналогии с "FileUtils#cp_r", но вместо копирования создаёт ссылку;
- Ускорена работа метода "Proc#call", благодаря исключению временного сохранения содержимого $SAFE. При выполнении теста lc_fizzbuzz наблюдается увеличение производительности в 1.4 раза;
- Ускорена работа block.call в случае передачи "block" как параметра блока. Судя по проведённым тестам данное изменение позволило в 2.6 раз увеличить скорость расчёта блоков;
- Представлена поддержка временной кучи (Transient Heap, theap), предназначенной для объектов с коротким временем жизни, использующих специфичные классы (Array, Hash, Object, Struct). Например, благодаря theap создание мелких и недолго существующих хэшей теперь выполняется в два раза быстрее. Тест rdoc показал увеличение производительности на 6-7%;- Для увеличения производительности переключений контекста предложены нативные реализации сопрограмм для архитектур arm32, arm64, ppc64le, win32, win64, x86 и amd64. "Fiber.yield" и "Fiber#resume" на 64-разрядных системах Linux теперь выполняются почти в 5 раз быстрее. В целом интенсивно использующие Fiber программы показывают прирост производительности на уровне 5%;
- Обновлена версия RubyGems 3.0.1, в которой прекращена поддержка опций "--ri" и "--rdoc", вместо которых следует использовать "--document" и "--no-document".
- Bundler (https://github.com/bundler/bundler) теперь устанавливается по умолчанию для управления зависимостями gem.
URL: https://www.ruby-lang.org/en/news/2018/12/25/ruby-2-6-0-rele.../
Новость: https://www.opennet.me/opennews/art.shtml?num=49854
> Имена констант теперь могут начинаться с заглавных букв не из набора ASCII (например, сейчас можно писать "class Σ♥²; end ");А что, нескучно.
Так их же теперь и по-русски обзывить можно! Красота...
Фича поэтому и появилась...Feature #13770 Can't create valid Cyrillic-named class/module
class Мир
def приветствовать
"Привет, Мир!"
endend
Наркоманы какие-то
1Cники, не к ночи будь помянута..
1С перепишут на Руби?
> Фича поэтому и появилась...Но она же и станет проблемой. Разбирать исходники с именами на китайском, арабском - удовольствие ниже среднего.
А если там неразрывный пробел окажется в имени функции, или точка какая-то хитрая...
Теперь зато можно Emoji использовать в названиях 😊😂🤣👌
Имелось в виду, что применение даже в разумных рамках приведет к проблемам. Про всякую дичь я вообще молчу.
Хватит ломать кнопки shift и alt!
Интересно, у этого есть юзкейсы, или сделано просто для "смотри, пап, как я могу"?
У плюсистов спроси
конечно есть - можно использовать похожие символы юникода и пробелы-которые-не-пробелы для размещения в коде невидимых закладок.история с dns ничему людей не учит.
Вы еще автоформатирование правильными табами потребуйте.Используйте правильные шрифты - и будет вам счастье. А то, небось, "#define O 3 / if (x == O)" вас с ума сведет навсегда. Хотя стоп, можно ведь запретить нули, наверное?
С каждым годом аноним все тупее и тупее становится...
Автоформатирование в руби-мире есть. `rubocop -a filename` называется
> Используйте правильные шрифтыВы вообще в курсе, что такое юникод? Это бинарный формат для хранения текстовой информации. Наподобие OpenXML, OpenDocument и подобных. НЕ кодировка, как вы могли бы подумать. Стоит понять эту простую мысль, и становится ясно, почему туда добавляют цветные смайлики и прочий бред.
Даже с ПРАВИЛЬНЫМ шрифтом никуда не уйдут проблемы типа https://stackoverflow.com/questions/3115204/unicode-mirror-c... . Грамотный способ работы с юникодом - запретить его там, где нужно чёткое, ясное и гарантированное взаимодействие с автоматикой, а не выражение в форме эмоджий мыслей средней прямоходящей обезьяны.
Плюсую много.
>Вы вообще в курсе, что такое юникод? Это бинарный формат для хранения текстовой информации.Вы вообще в курсе, что такое ASCII? Это бинарный формат для хранения текстовой информации.
> Наподобие OpenXML, OpenDocument и подобных.Нет. Указанные системы кодирования представляют собой стек правил.
UTF-* ближе к ASN.1
>почему туда добавляют цветные смайлики и прочий бред.Ваш бред. Там нет смайликов. Там есть наборы байтов 10101010, которым по договоренности сопоставлено визуальное/тактильное/звуковое представление в виде итогового растра/карточки/биб-бип/брайля/гопака.
Так же как и в ASCII.
>Грамотный способ работы с юникодом - запретить его там, где нужно чёткое
Парсинг wide char source code не особо отличается от парсинга исходников на ascii.
Я предпочитаю конечно писать на английском, это де факто разделяемый международный индустриальный язык для IT, но...
Из какого криохранилища вы вылезли?
Всего один вопрос: вы по приведённой в том сообщении ссылке переходили?
Ну для меня, как инженера, это очень неплохо.
> Ну для меня, как инженера, это очень неплохо.Вопрос стоит не "хорошо/плохо", а "зачем конкретно". И вы хреновый инженер, если на конкретный вопрос ответить не можете.
> Интересно, у этого есть юзкейсы, или сделано просто для "смотри, пап, как я могу"?Конечно. Это особенно полезно будет когда пишешь код с кучей математики, там вечно не хватает коротких идентификаторов, начинаются все эти alpha, beta, squaressum, и так далее. Вероятно это будет полезно и для каких-то других ситуаций, но это будет ясно тогда, когда те, кто "смотри, пап, как я могу" побесятся и исследуют пространство возможных применений, радостно ходя по граблям, и применяя utf8 там где надо и где не надо.
и наверняка не совместимо с опцией --jit, но проверять мы этого, конечно же, не будем
$ ruby --version
ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-linux]$ cat 1.rb
Σ♥² = 100
r = 2*Σ♥² +1
puts r$ ruby 1.rb
1.rb:2: syntax error, unexpected tINTEGER, expecting do or '{' or '('
r = 2*Σ♥² +1$ cat 2.rb
Σ♥² = 100
r = 2*Σ♥² + 1
puts r$ ruby 2.rb
201
Им далеко до Common Lisp, где имя символа может состоять только из пробелов.
smth = if smth then smth.then(&:smthsmth) end
Уря! Давай ruby дольше then в коде больше ясности.
P.S. Than в ruby это неимеет отношение к promise. Смотри не перепутай
>Выпуск мёртвого языка программирования Ненужнo 2.6.0, вобравшего в себя худшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp.Ясно.
Нормальные люди пишут на PHP, а не этом угне.
Эмодзи переменные! Джвадцать лет ждал.
class Fish;
def 🔪
puts "🍣"
end
end🐟 = Fish.new
🐟.🔪 => 🍣
«Высокая эффективность разработки программ» это эвфемизм для «ляп-ляп и продакшн».Да, и самая высокая эффективность разработки программ, как уже кто-то догадался, у жлобоскрипта в хромом браузере.
Так это ж грустно, что юзера от такого страдают со 100500 запущенными процессами хромого на различных сайтах и "программах".
> мои квазиинтеллектаульные трагичные опусы это эвфемизм для «мир г.»."If you look at GitLab, it has an enormous amount of functionality. Software development is very complex and to help with that, we need a lot of functionality and Ruby on Rails is a way to do it. Because there's all these best practices that are on your happy path, it’s also a way to keep the code consistent when you ship something like GitLab. You're kind of guided into doing the right thing."
Да, Ruby приносит пользу.
> Да, Ruby приносит пользу.Лично мне пригодилось только из-за Homebrew на Маке. Если бы не это, я бы даже не узнал, наверное, что существует какое-то Ruby. Это к вопросу о популярности и пользе в реальном мире, где живые люди, а не на гитхлябе.
но внутри линуха много относительно на руби скриптов. на питоне больше конечно, а на шелл еще больше, но еще оч долго никто не перегонит простой си.)) да и что делать с первичной загрузкой системы - еще на этапе ядра интерпретатор запускать?))
> но внутри линуха много относительно на руби скриптов. на питоне больше
> конечно, а на шелл еще больше, но еще оч долго никто
> не перегонит простой си.)) да и что делать с первичной загрузкой
> системы - еще на этапе ядра интерпретатор запускать?))Блин, я даже не могу такого припомнить. В каком линухе? У меня нету. Devuan, Slackware, Шапка 6 и старше.
> В каком линухе?SuSE, OpenSUSE
поверь мне не только в них. я в убунте находил, в росе( ну относительно мало), еще дистр был на основе бубунты не помню уж. короче есть спецы в родных селеньях)) нет ну правда намешали в языке и от ява и от питона и от си++. в итоге какойто кошмар. я так глянул на синтаксис..... лучше промолчу. я не ярый поклонник питон, но я уж явно лучше его выбрал. да хотел глянуть на D, что там, но пока руки не дошли))
В указанных дистрибутивах Ruby является основным скриптовым языком. Вопрос не в том, где есть хоть один скрипт на Руби, а в том, что там всё администрирование делается на bash и Ruby. Впрочем, питонятина тоже туда просочилась, но с ней эффективно борются.
>Добавлен метод "FileUtils#cp_lr", который работает по аналогии с "FileUtils#cp_r", но вместо копирования создаёт ссылку;"Найди 10 отличий", я только с пятого раза понял, в чём разница в написании.
>конструкция "(f << g).call(3)" идентична "f(g(3))";
>Для методов "Array#|" и "Array#-Какой же кривой синтаксис.
> Какой же кривой синтаксис.Просто японцы не выговаривают l. ;-)
> В отличие от традиционных JIT, генерирующих на лету машинные инструкции, преложенный в Ruby JIT-компилятор вначале записывает на диск код на языке Си, после чего вызывает внешний Си-компилятор
> По сравнению с Ruby 2.5 включение JIT в среднем в 1.7 раза увеличивает производительностьЧем бы хипстеры не баловались, а у слона всё равно больше. То есть на выходе всё равно C получается, и он же производительнее.
s/ не / ни /
> Чем бы хипстеры не баловались, а у слона всё равно больше. То
> есть на выходе всё равно C получается, и он же производительнее.Вот, да. Из всех попыток написать правильный язык, всё равно получается либо Си, либо Лисп, либо Кобол, либо Фортран. Деды не даром на перфокартах тренировались (да и работали).
Чуток расширенное десятое правильно Гринспена же. (с) 1993 год
> Чем бы хипстеры не баловались, а у слона всё равно больше. То есть на выходе всё равно C получается, и он же производительнее.Как раз попытка сваять свой собственный, нескучный (и быстрый) генератор машинных инструкций силами 3.5 человек и игнорирование десятков лет (и мегатон человекочасов) разработки gcc была бы баловством …
Бородатые хипстеры, порхавшие тонкими длинными пальчиками над клавиатурой заляпанного наклейками макбука, доказывая что за сабжем будущее, сейчас наверно грустят. Полный печали подарок к новому году.
Ножка от табуретки. В обсыпке блестками.
> вначале записывает на диск код на языке Си, после чего вызывает внешний Си-компиляторНельзя что ли было зашить компилятор в руби?..
ЛАВРОВ.jpg
Сколько злопыхателей здесь собралось.
Ну не используешься языком, пройди мимо,
нет нужно обгадить, очернить, по-ть желчью.
А вы не задавались мыслю сколько замечательного
софта написано на Ruby, а вы не думали
что конечный результат зависит не от
инструмента, а от того кто пользуются
инструментарием. Где интеллигентность,
культура, толерантность программистов???
добро пожаловать на opennet
> Где интеллигентность,
> культура, толерантность программистов???Ищи ее на Stackoverflow, а не здесь.
>> Где интеллигентность,
>> культура, толерантность программистов???
> Ищи ее на Stackoverflow, а не здесь.Там точно есть?
Знаю некоторые приятные заграничные ресурсы, но не скажу, дабы опеннетовские иксперды там не развели отхожее место.
Ошибки делаете и не используете абзацы. Где таких неучей берут?
толерантность - у паразитов в организме. а у нас здесь здравый смысл.
Вот так вот. Ruby еще пытается трепыхаться. В СНГ работы с ним не сыщешь, а забугром он в принципе используется. Непонятно зачем он в целом нужен сейчас, когда есть Python. По сути он свою нишу профукал когда начал стагнировать.
Странно. Мне раз в два месяца стучатся с предложениями на руби.
К сожалению, у меня уже нет такого опыта в Ruby, т.к. пишу в основном на C и Go.
Может потому и стучатся, что когда-то написавший проект на рубях хипстер давно сбежал на новую хайповую хрень, а оставшиеся теперь бегают и ищут, кто за это деpьмо теперь возьмётся?
Вопрос был "В СНГ работы с ним не сыщешь". Оказалось, что сыщешь. Опровергнуто.
> Странно. Мне раз в два месяца стучатся с предложениями на руби.
> К сожалению, у меня уже нет такого опыта в Ruby, т.к. пишу
> в основном на C и Go.Да, рубисты востребованы, проекты вы свое время начинали писать разные люди, по том как и я на C и Go ушли :) А поддерживать надо. Раньше было модно его использовать.
"Ушли на C и GO" -- это бред :)
Ruby в своей нише практически незаменим. А ниша его -- БЫСТРО пилить апишечки всякие с крудиками.
В этой сфере он лучше питона и go. А теперь ещё и работать будет быстрее.
> профукал когда начал стагнироватьНичего он не начал.
Руби - это давно уже зрелый состоявшийся язык. Ему не нужно никуда "развиваться" - он by design на голову выше всех остальных динамических ООП-интерпретаторов.Хипстерский хайп с рельсами ничего не дал Ruby, кроме ненужных свистоперделок (типа бундлера, к-й на какой-то хрен теперь впихнули по умолчанию). Рельсы смылись - туда им и дорога. Без них для Ruby будет даже лучше, меньше будут поганить язык.
Относительно низкая популярность связана не с тем, что Ruby, в отличие от Python, Java и C#, не педалировали никакие корпорации - ни Google, ни Sun-Oracle, ни Microsoft, соответственно.
> Относительно низкая популярность связана не с тем, что Ruby, в отличие от Python, Java и C#, не педалировали никакие корпорации - ни Google, ни Sun-Oracle, ни Microsoft, соответственно.А почему не педалировали, не думали? Видимо, прогнозируемый профит от него в лучшем случае 0, если не <0, вот и не педалируют.
Поддерживать легаси на Руби судьба твоя.
А чем рельсы-то не угодили? Просто фреймворк же.
А бандлер? Половина интернета онанирует на nodejs, а так как бы свой "бандлер" есть.
> Руби - это давно уже зрелый состоявшийся языкА че ж он такой кривой ?
У меня синдром утенка на Паскаль, я его еще в 90х учил, в 90х писал ВСЕ включая некоторые драйверы, но суть не в этом.Совсем недавно решил попробовать изучать другие языки. У меня повторюсь, нет приверженности ни к одному. Все они для меня новые. Пробовал я и руби. Ни разу не понятный и не логичный. Пых понятнее. Питон понятнее. Руби - какой-то трешак.
> Руби - какой-то трешак.Руби - просто другой язык. И да, надо немного мозги перестроить после Паскаля под функциональный стиль программирования. Зато, после того, как освоил, по объёму лаконичности хорошо понятного кода с Руби вряд ли кто может состязаться.
> Непонятно зачем он в целом нужен сейчас, когда есть Python.В то время, когда все компании, использовавшие питон когда-либо, переносят веб-приложения с питона на Go и не стесняются писать об этом, непонятно, зачем нужен питон...
В то время, когда все компании, перманентно переносящие свои творения на всё новые и новые возникающие языки, переносят код с питона на Go и не стесняются писать об этом, непонятно, зачем вообще упоминать их в контексте приложений, основная задача которых не "быть написанными на самом современном языке", а "корректно и эффективно работать".
> основная задача которых не "быть написанными на самом современном языке", а "корректно и эффективно работать".Тогда зачем вообще нужно что-то кроме Ruby?
>> Непонятно зачем он в целом нужен сейчас, когда есть Python.
> В то время, когда все компании, использовавшие питон когда-либо, переносят веб-приложения
> с питона на Go и не стесняются писать об этом, непонятно,
> зачем нужен питон...Ну вот смотри, я сейчас как раз отошел немного от Python в сторону Go и могу сказать как выглядит с моей колокольни:
Писать на Python, когда ты не упарываешься сильно в скорость - очень круто, одно удовольствие. Т.е. на Python очень быстро можно что-то запрототипировать и посветить больше времени БЛ (что в принципе чаще бизнесу и надо). На Go стоит начинать если ты уверен что скорость просто наиважнейшая часть проекта. И то я начинаю в 90% свои проекты на Python, потом части выношу в Go-микросервисы которые женятся с основным приложением по GRPC. Итого симбиоз скорости написания и производительности заключается не в выборе чего-то одного, а в комбинации различных продуктов и технологий.
Вот что интересно, питонисты, которые перешли на Руби и более чем довольны этим, встречаются периодически. А вот довольных питоном бывших рубистов, встречать не доводилось.... К чему бы это?....
> Вот что интересно, питонисты, которые перешли на Руби и более чем довольны
> этим, встречаются периодически. А вот довольных питоном бывших рубистов, встречать не
> доводилось.... К чему бы это?....Я не встречал таки рубистов, всех что видел очень стагнирующие ребята сами по себе. Мне лично вообще пофигу на чем писать, но по факту нужность Ruby непонятна когда есть Python, хотя бы из-за набора библиотек + сейчас его сильно забустил ML.
Через год-два использование питона в ML закончится, потому что и в этой части ему есть куда лучшие альтерантивы. Например Julia. А вот в вебе питон так и не прижился.
в науке оч хорошо поживает))) работа с матрицами оч удобна именно в питон. а там таких расчетов много.)) очень много проектов связанных с геолокацией и позиционированием именно на питон. насчет веб не скажу так как если посмотреть под капот часто оказывается , что многие проекты обвязаны скриптами питон. и если честно сказать по синтаксису довольно простой язык. яву глянул такие определения функций и классов... помолчу. руби как видим тоже синтаксис ... странноват. я бы для себя выделил c/c++ и python. про D ничего не скажу. руки не дотянулись.
Как только "научным работникам" надоест тратить существенно больше времени на связке c/c++ и python по сравнению с их более проворными коллегами, уже использующими Julia, они тоже бросят питонясить. Именно потому у питона перспектив нет. А вообще, в науке что только "хорошо" не поживает. R и Matlab в первую очередь.
> Писать на Python, когда ты не упарываешься сильно в скорость - очень круто, одно удовольствие.Если только ты извращенец. Синтаксис у него отвратительный. Пишешь - вроде норм. А попробуешь прочитать написанное - тьфу ты, какое-то косноязычие просто.
> Если только ты извращенец. Синтаксис у него отвратительный. Пишешь - вроде норм.
> А попробуешь прочитать написанное - тьфу ты, какое-то косноязычие просто.Верно подмечено: читать пихтонокод — сущее мучение.
Кому ещё нужен этот руби все кого знал с него уже давно переползли.
Читаю этих вайнеров и недоумеваю, неужели никто про chef не слышал?
> Читаю этих вайнеров и недоумеваю, неужели никто про chef не слышал?Из всех проектов с которыми я работал (а их уже порядком накопилось) только 2 раза видел шефа и оба раза у рубистов. Многие юзают ansible, некоторые salt stack.
Зависит от величины компании. Чем больше компания, тем меньше ansible и больше рубических chief и puppet. Пихать в крон костыль для pull редко кто соглашается, а push для 500+ узлов - дичь.
Ну и нельзя не сказать, что огромное влияние на распространение ansible оказывает документация для devops, где почти всегда k8s+ansible.
А как же CFEngine? Вроде ж самый навороченный инструмент такого типа?
Благодарю! Наконец-то что-то сишное!
КонецЕсли
КонЕсли
ИнаЕсли ИначеЕсли
:DНу нафиг так жить... (
так есть же Crystal???
crystal-lang.org
его бы развивали и бросили это