Представлен (https://www.ruby-lang.org/en/news/2015/12/25/ruby-2-3-0-rele.../) релиз Ruby 2.3 (http://www.ruby-lang.org), динамического объектно-ориентированного языка программирования, отличающегося высокой эффективностью разработки программ и вобравшего в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Код проекта распространяется под лицензиями BSD ("2-clause BSDL") и "Ruby", которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3. Ruby 2.3 является третьим значительным выпуском, подготовленным в рамках нового планового процесса разработки, подразумевающего отведение года на подготовку функциональных улучшений и формирование каждые 2-3 месяца корректирующих выпусков. В скором времени ожидается (https://github.com/rails/rails/releases) выпуск фреймворка Rails 5.0, первая бета-версия которого вышла неделю назад.
Основные улучшения (https://github.com/ruby/ruby/blob/v2_3_0/NEWS):- Реализована (https://bugs.ruby-lang.org/issues/11473) новая экспериментальная прагма frozen-string-literal, а также связанная с ней опций "--enable/--disable=frozen-string-literal", позволяющие заморозить состояние строковых литералов в исходных текстах. Также добавлен новый отладочный режим "--debug=frozen-string-literal" при котором будет показано где именно изменение объекта приводит к выводу ошибки "can't modify frozen String";
- Добавлен (https://bugs.ruby-lang.org/issues/11537) новый оператор "&." для упрощение обработки значений nil при обращении к объектам, реализованный по мотивам операторов безопасной навигации C#, Groovy и Swift. При использовании синтаксиса вызова методов obj&.foo, метод #foo будет вызван только если object не является nil. Оператор ведёт себя как выражение "try! (http://api.rubyonrails.org/v4.2.5/classes/Object.html#method...)" (obj.try! {}) из ActiveSupport, но обрабатывает только значения nil. Для массивов, хэшей и структур добавлены операторы Array#dig, Hash#dig и Struct#dig;
- Для упрощения отладки в базовый состав добавлен gem "did_you_mean (https://github.com/yuki24/did_you_mean)", предлагающий правки для типичных опечаток при выводе ошибок NameError и NoMethodError;
<font color="#461b7e">
"Yuki".starts_with?("Y")
# => NoMethodError: undefined method `starts_with?' for "Yuki":String
# Did you mean? start_with?
</font>
- Добавлены (https://bugs.ruby-lang.org/issues/11788) экспериментальные возможности для обработки предкомпилированного байткода в формате ISeq. Для сериализации кода реализован объект
RubyVM::InstructionSequence#to_binary_format, а для десериализации и загрузки байткода - RubyVM::InstructionSequence.load_from_binary(binary);
- В String.new добавлена поддержка указания параметра "encoding" для определения кодировки;- Проведена серия оптимизаций производительности. В том числе реализован новый метод хранения табличных структур, оптимизирована работа Proc#call, на уровне машинного кода проведён тюнинг размещения объектов и вызова методов, добавлена возможность использования ключевых слов "exception:" для организации неблокирующего ввода/вывода;
- Прекращена поддержка платформ OS/2, BeOS и Borland-C. Уровень поддержки платформы Haiku доведён до стабильного.
URL: https://www.ruby-lang.org/en/news/2015/12/25/ruby-2-3-0-rele.../
Новость: http://www.opennet.dev/opennews/art.shtml?num=43588
> Прекращена поддержка платформ OS/2, BeOS и Borland-C.Сами себе роют яму.
>> Прекращена поддержка платформ OS/2, BeOS и Borland-C.
> Сами себе роют яму.Браво! Вы нашли что-то общее меду этими Эплатформами".
Ползователю OS/2 приносятся извинения, а 2-ух с половиной пользователей БеОси просят обратить внимание на:
> Drop support for BeOS now that Haiku is stable.
"двух", позорище
Но там не просто пользователи. Там ух какие пользователи!
> Но там не просто пользователи. Там ух какие пользователи!Не, второй пользователь - это просто мама первого в сапера все время играет на его компе.
По массе тянет на полтора пользователя.
Один гайкоюзер точно имеется на просторах Рунета http://www.banki.ru/profile/?UID=709780
инновационный интерфейс, по меркам 1995 года.
# Did you mean? all your base
А что написано на Ruby, кроме Redmine?
Навскидку: Github, Gitlab (хоть это и Rails, но всё равно).
Из другого: Vagrant, Homebrew, Discourse, Puppet/Chef (части на golang).И не говорите, что это "не нужно".
>Chef (части на golang)Это какие части на golang? Помню что там Erlang был.
>> Puppet/Chef (части на golang).
>Chef (части на golang)ну и избирательно вы цитируете
по делу ответа я полагаю не ждать?
ответ по делу: в современном puppet части на clojure (таки не golang)а в chef erlang, да
а что до golang -- тот же gitlab стремительно переписывается с его использованием
> А что написано на Ruby, кроме Redmine?Куча всего вплоть до ~/bin, а что?
PS: <beep>, и до меня лишние запятые добрались :-/ (убрал)
$ irb
irb(main):001:0> 1/2
=> 0Вы все еще топаете по граблям питона?
> $ irb
> irb(main):001:0> 1/2
> => 0
> Вы все еще топаете по граблям питона?И что здесь "не так"?
$ irb
irb(main):001:0> 1.0/2
=> 0.5
>> $ irb
>> irb(main):001:0> 1/2
>> => 0
>> Вы все еще топаете по граблям питона?
> И что здесь "не так"?Да ничего, расслабьтесь ) Лишь вангую, что однажды обнаружите как
$ python3
Python 3.4.2 (default, Oct 8 2014, 10:45:20)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1/20.5
Надеюсь, тут объяснять "что не так" - не надо?
>Надеюсь, тут объяснять "что не так" - не надо?
>>> 1//20
оно?
>>> $ irb
>>> irb(main):001:0> 1/2
>>> => 0
> $ python3
>>>> 1/2
> 0.5
> Надеюсь, тут объяснять "что не так" - не надо?А можно, можно и я "тоже"?! :)
scheme@(guile-user)> (/ 1 2)
$1 = 1/2
scheme@(guile-user)> (/ 1 7)
$2 = 1/7
scheme@(guile-user)> (+ (/ 5 6) (/ 1 15))
$3 = 9/10
scheme@(guile-user)> (sqrt 3)
$4 = 1.73205080756888
scheme@(guile-user)> (expt 2 333)
$5 = 17498005798264095394980017816940970922 8253554471456994914061648512796239935 95007385788105416184430592 ///я добавил 2 пробела, чтоб форум не окривел
scheme@(guile-user)> (expt 2. 333)
$6 = 1.74980057982641e100
scheme@(guile-user)> _
Да, дети, нада как вот этот дядинька делает!Собственно, у Ruby лечится require 'mathn'. Но по-умолчанию - / означает целочисленное
деление (как // в Python 3), короче все те же грабли что и у Python 2.
fn main() {struct Rust {
x: i32,
y: i32
}impl Rust {
fn divide(&self) -> i32 {
self.x / self.y
}
}println!("Result is: {}", Rust {x: 1, y: 2}.divide() )
}
и
println!("Result is: {}", 1.0/2.0 ) //Result is: 0.5
> x: i32,
> println!("Result is: {}", 1.0/2.0 ) //Result is: 0.5А теперь повторите хотя бы "фокус" с 2^333. И заодно посчитайте "9/7 - 20/21".
>> x: i32,
>> println!("Result is: {}", 1.0/2.0 ) //Result is: 0.5
> А теперь повторите хотя бы "фокус" с 2^333. И заодно посчитайте "9/7
> - 20/21".Зато он 2.0^333 и sqrt(3) повторит. Хорошо, если поймёт, почему -фокус- в кавычках. Речь-то не об том. И #28 совсем не про возможности арифметики в конкретном языке, конкретной реализации. Но да, могло показаться, что я писал об этом. Но я ж тлодил, беда. YallHBT, а те, кто не "all" понимают, что _предмета_ обсуждения нет. Примерно с того же #28...
> А можно, можно и я "тоже"?! :)*достает свою пип^W консоль*
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.2.3
...
?- X is 5 rdiv 6 + 1 rdiv 15.
X = 9 rdiv 10.?- X is 2 ** 333.
X = 174980057982640953949800178169409709[...]0592.?- X is 2.0 **333.
X = 1.7498005798264095e+100.
?- {9/10 = 5/6 + X}.
X = 1 rdiv 15.?- {1/3 = 9/7 - X}.
X = 20 rdiv 21.?- {1337 = exp(2,Y)}.
Y = 64835473751161472 rdiv 6243314768165359.
>> А можно, можно и я "тоже"?! :)
> *достает свою пип^W консоль*
>
> Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.2.3
> ...
>"Мерялся пипками с вендузятниками на отупнете. Много думал. День как день. "
>>>> Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.2.3 >> ...>>
> "Мерялся пипками с вендузятниками на отупнете. Много думал. День как день. "Что, уже везде форточки мерещатся? Надеюсь, это не заразно оО
>>> Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.2.3 >>
>> "Мерялся пипками с вендузятниками на отупнете. Много думал. День как день. "
> Что, уже везде форточки мерещатся? Надеюсь, это не заразно оОВидимо, только "их" пипирки. Беда, согласен. Пора принять. Таблетки.
С другой стороны о чём ещё могут сказать гордые флаги "Multi-threaded, 64 bits"? Что не DOS?...
о том, что это 64-bit бинарик с поддержкой тредов. на линуксе, макинтоше, другом юниксе или винде. ни о чём больше.
> - Проведена серия оптимизаций производительности. В том числе реализован новыйПодскажите, а как дела с потками? Как дела с интеграцией с C/C++ можно ли из потоков писать в переменные Ruby?
Сохранился ли GIL и рубит ли он производительность потоков свояд все до выполнения в один поток?
Как часто происходит переключение между опкодами, сылшал что в Python каждыые 100 операций, а тут как дела?
>Сохранился ли GIL и рубит ли он производительность потоков свояд все до выполнения в один поток?В MRI GIL присутствует, Почитайте статью на вики и хабре про GIL все вопросы отпадут.http://habrahabr.ru/post/189320/
> Как часто происходит переключение между опкодами, сылшал что в Python каждыые 100 операций, а тут как дела?Тут даже не скажу, некогда не задавался таким вопросом.
> Как дела с интеграцией с C/C++ можно ли из потоков писать в переменные Ruby?Не обязательно использовать MRI как встроенный язык, можно посмотреть на mruby как медленную альтернативу lua. В сам интерпретатор параллельно писать не получиться.
> В MRI GIL присутствуетGIL для идиотов, в C++11 присутствует атомарность для предотвращения гонки потоков.
Очень тонко, если вы понимаете о чем я ))
>> В MRI GIL присутствует
> GIL для идиотов, в C++11 присутствует атомарность для предотвращения гонки потоков.Ссылку на документацию Вас не затруднит скинуть или раскройте мысль полностью, а то непонятно как и что Вы сравнили один поток интер-тора VM и компилятор?
>>Сохранился ли GIL и рубит ли он производительность потоков свояд все до выполнения в один поток?
> В MRI GIL присутствует, Почитайте статью на вики и хабре про GIL
> все вопросы отпадут.http://habrahabr.ru/post/189320/
>> Как часто происходит переключение между опкодами, сылшал что в Python каждыые 100 операций, а тут как дела?
> Тут даже не скажу, некогда не задавался таким вопросом.
>> Как дела с интеграцией с C/C++ можно ли из потоков писать в переменные Ruby?
> Не обязательно использовать MRI как встроенный язык, можно посмотреть на mruby как
> медленную альтернативу lua. В сам интерпретатор параллельно писать не получиться.Да, эту статью я уже читал. Просто новая версия и соответственно в ожидании решения концептуальных проблем, а не решения всяких мелких пакостей с которыми и так все живут.
Кстати вы можете ruby собрать с jemalloc теперь.
это в Ruby 3 обещали GIL убрать.
>Сохранился ли GIL и рубит ли он производительность потоков свояд все до выполнения в один поток?VM работает в одном потоке всегда это и есть GIL. Ввод/вывод может быть параллельным.
>>Сохранился ли GIL и рубит ли он производительность потоков свояд все до выполнения в один поток?
> VM работает в одном потоке всегда это и есть GIL. Ввод/вывод может
> быть параллельным.
> Ввод/вывод может быть параллельным.Тонко пошутил?
В один момент времени поток может все залучить!!!
>> Прекращена поддержка платформ OS/2, BeOS и Borland-C.Borland-C разве платформа?
это же компилятор, ЕМНИП
на офф сайте написано, что это не релиз а пмвъю
...
Мы рады сообщить о выходе Ruby 2.3.0-preview1.
Опубликовал naruse 2015-11-11
...
может я не доглядел?
> может я не доглядел?Сейчас так:
Ruby 2.3.0 Released
We are pleased to announce the release of Ruby 2.3.0.
Continue Reading...
Posted by naruse on 25 Dec 2015http://www.ruby-lang.org/en/news/2015/12/25/ruby-2-3-0-released/
по ходу они новости на главную не спешат выводить
А что тут выводить? все рубисты в курсе про дату выхода. Уже какой год новые версии выходят 25 декабря.