The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск языка программирования Ruby 2.7.0

25.12.2019 22:45

После года разработки опубликован релиз Ruby 2.7.0, динамического объектно-ориентированного языка программирования, отличающегося высокой эффективностью разработки программ и вобравшего в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Код проекта распространяется под лицензиями BSD ("2-clause BSDL") и "Ruby", которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3. Ruby 2.7 является седьмым значительным выпуском, подготовленным в рамках планового процесса разработки, подразумевающего отведение года на подготовку функциональных улучшений и формирование каждые 2-3 месяца корректирующих выпусков.

Основные улучшения:

  • Экспериментальная поддержка сопоставлений с образцом (Pattern matching), позволяющих перебрать заданный объект и назначить значение, если имеется совпадение с образцом.
    
       case [0, [1, 2, 3]]
       in [a, [b, *c]]
         p a #=> 0
         p b #=> 1
         p c #=> [2, 3]
       end
    
       case {a: 0, b: 1}
       in {a: 0, x: 1}
         :unreachable
       in {a: 0, b: var}
         p var #=> 1
       end
    
  • В оболочке интерактивных вычислений irb (REPL, Read-Eval-Print-Loop) появилась возможность многострочного редактирования, реализованная при помощи readline-совместимой библиотеки reline, написанной на языке Ruby. Интегрирована поддержка rdoc, позволяющая просматривать в irb справочную информацию по заданным классам, модулям и методам. Обеспечена цветная подсветка строк с кодом, показываемых через Binding#irb и результатов инспектирования объектов базовых классов.
  • Добавлен уплотняющий сборщик мусора (Compaction GC), который может выполнять дефрагментацию области памяти, решая проблемы снижения производительности и повышения потребления памяти из-за фрагментации памяти, возникающей в процессе работы некоторых многопоточных Ruby-приложений. Для упаковки объектов в куче предложен метод GC.compact, позволяющий снизить число используемых страниц памяти и оптимизировать кучу для операций CoW (copy-on-write).
  • Проведена подготовка к разделению аргументов, определяемых на основе позиции в списке ("def foo(a,b,c)") и ключевых слов ("def foo(key: val)"). Автоматическое преобразование аргументов на основе ключевых слов и позиции объявлено устаревшим и не будет поддерживаться в ветке Ruby 3.0. В частности, объявлено устаревшим использование последнего аргумента как параметров ключевого слова, передача аргументов на основе ключевых слов как последнего параметра хеша и разделение последнего аргумента на позиционные и ключевые параметры.
    
      def foo(key: 42); end; foo({key: 42})   # warned
      def foo(**kw);    end; foo({key: 42})   # warned
      def foo(key: 42); end; foo(**{key: 42}) # OK
      def foo(**kw);    end; foo(**{key: 42}) # OK
    
      def foo(h, **kw); end; foo(key: 42)      # warned
      def foo(h, key: 42); end; foo(key: 42)   # warned
      def foo(h, **kw); end; foo({key: 42})    # OK
      def foo(h, key: 42); end; foo({key: 42}) # OK
    
      def foo(h={}, key: 42); end; foo("key" => 43, key: 42)   # warned
      def foo(h={}, key: 42); end; foo({"key" => 43, key: 42}) # warned
      def foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK
    
      def foo(opt={});  end; foo( key: 42 )   # OK
      
      def foo(h, **nil); end; foo(key: 1)       # ArgumentError
      def foo(h, **nil); end; foo(**{key: 1})   # ArgumentError
      def foo(h, **nil); end; foo("str" => 1)   # ArgumentError
      def foo(h, **nil); end; foo({key: 1})     # OK
      def foo(h, **nil); end; foo({"str" => 1}) # OK
      
      h = {}; def foo(*a) a end; foo(**h) # []
      h = {}; def foo(a) a end; foo(**h)  # {} and warning
      h = {}; def foo(*a) a end; foo(h)   # [{}]
      h = {}; def foo(a) a end; foo(h)    # {}
    
  • Возможность использования нумерованных имён переменных по умолчанию для параметров блока.
    
       [1, 2, 3].each { puts @1 } # как аналог [1, 2, 3].each { |i| puts i }
    
  • Экспериментальная поддержка диапазонов без начального значения.
    
       ary[..3]  # аналогично ary[0..3]
       rel.where(sales: ..100)
    
  • Добавлен метод Enumerable#tally, подсчитывающий сколько раз встречается каждый элемент.
    
       ["a", "b", "c", "b"].tally
       #=> {"a"=>1, "b"=>2, "c"=>1}
    
  • Разрешён вызов приватного метода с литералом "self"
    
       def foo
       end
       private :foo
       self.foo
    
  • Добавлен метод Enumerator::Lazy#eager для генерации обычного перечисления из "ленивого" (Enumerator::Lazy) перечисления.
    
       a = %w(foo bar baz)
       e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.eager
       p e.class               #=> Enumerator
       p e.map {|x| x + "?" }  #=> ["FOO!?", "BAR!?", "BAZ!?"]
    
  • Продолжено развитие экспериментального JIT-компилятора, который позволяет ощутимо поднять производительность приложений на языке Ruby. Предложенный в Ruby JIT-компилятор вначале записывает на диск код на языке Си, после чего вызывает внешний Си-компилятор для генерации машинных инструкций (поддерживается вызов GCC, Clang и Microsoft VC++). В новой версии реализован метод для inline-развёртывания при необходимости, обеспечено выборочное применение режимов оптимизации при компиляции, значение по умолчанию "--jit-min-calls" увеличено с 5 до 10000, а "--jit-max-cache" уменьшено с 1000 до 100.
  • Повышена производительность CGI.escapeHTML, Monitor и MonitorMixin.
  • В Module#name, true.to_s, false.to_s и nil.to_s обеспечен возврат строки, неизменной для указанного объекта.
  • Сокращён размер бинарных файлов, генерируемых методом RubyVM::InstructionSequence#to_binary;
  • Обновлены версии встроенных компонентов, включая Bundler 2.1.2, RubyGems 3.1.2, Racc 1.4.15, CSV 3.1.2, REXML 3.2.3, RSS 0.2.8, StringScanner 1.0.3;
  • Из базовой поставки во внешние gem-пакеты вынесены библиотеки CMath (cmath gem), Scanf (scanf gem), Shell (shell gem), Synchronizer (sync gem), ThreadsWait (thwait gem), E2MM (e2mmap gem).
  • На rubygems.org опубликованы поставляемые по умолчанию модули stdlib: benchmark, cgi, delegate, getoptlong, net-pop, net-smtp, open3, pstore, singleton. Не перенесены в rubygems.org модули monitor observer, timeout, tracer, uri, yaml, которые поставляются только в ruby-core.
  • Для сборки Ruby теперь требуется Си-компилятор, поддерживающий стандарт C99.


  1. Главная ссылка к новости (https://www.ruby-lang.org/en/n...)
  2. OpenNews: Обновление Ruby 2.6.5, 2.5.7 и 2.4.8 с устранением уязвимостей
  3. OpenNews: Зафиксирована подстановка вредоносного кода в Ruby-пакет Strong_password
  4. OpenNews: В rest-client и ещё 10 Ruby-пакетах выявлен вредоносный код
  5. OpenNews: Открыт код Sorbet, системы статической проверки типов для Ruby
  6. OpenNews: Выпуск языка программирования Ruby 2.6.0
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/52091-ruby
Ключевые слова: ruby
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (84) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.4, Аноним (4), 23:01, 25/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Сферические примеры паттерг-матчинга в вакууме настолько понятны, что не ясно зачем оно вообще нужно. Поясните для слоупоков, зачем это всё на самом деле?
     
     
  • 2.5, Поедатель борщей (?), 23:13, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В нормальных языках — работать с ADT, с типами-суммами и типами-произведениями. В смысле, удобно работать, а не как вот тут.
     
  • 2.7, Ordu (ok), 23:33, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Взяли [0, [1, 2, 3]] и сопоставили с образцом [a, [b, *c]]. Получили три локальные переменные a, b и c, в a лежит 0, в b -- 1, в c лежит список [2, 3]. Или это не список в ruby, а массив? Не помню уж, но не суть важно.
     
     
  • 3.82, ррр (?), 21:59, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > Взяли [0, [1, 2, 3]] и сопоставили с образцом [a, [b, *c]].
    > Получили три локальные переменные a, b и c, в a лежит
    > 0, в b -- 1, в c лежит список [2, 3].
    > Или это не список в ruby, а массив? Не помню уж,
    > но не суть важно.

    не спорю

     

  • 1.8, Аноним (8), 23:40, 25/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Как ни печально, но ruby - живой труп
     
     
  • 2.9, Аноним (9), 23:55, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    живой, но не труп
     
     
  • 3.12, Анонец (?), 00:03, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +9 +/
    как живой, но не живой!
     
     
  • 4.57, Анонидзе (?), 15:14, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Как труп, но живой!
     
  • 2.11, Влад (??), 00:02, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да нет, это кажется на самом деле. Просто прошел пик хайпа. Вакансий много, коммиты в популярные проекты все ещё есть регулярно. Ну и isrubydead.com конечно
     
     
  • 3.17, Урри (?), 00:48, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Подтверждаю. Куэйщики используют вовсю - язык достаточно прост, чтобы ним могли пользоваться не программисты, и фреймворки понятные.
     
     
  • 4.25, Аноним (25), 02:00, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    кто такие куэйщики, если не секрет? QA?
     
     
  • 5.46, Я (??), 11:38, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    да
     
  • 4.50, Аноним (50), 12:28, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Редмайн написан на Руби может поэтому он для куэй? Да и бреу на Руби. На руби действительно хороших юзабельных продуктов существенно больше чем на том же расте на котором только парсилка каскадных таблиц и всё.
     
     
  • 5.52, Аноним (52), 13:18, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А еще, все сидят на Discourse, разрабатывают вместе с gitlab. И пользуются инет-магазинами типа Spree....
     
  • 5.58, Брат Анон (?), 15:16, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На ржавом сложно сделать что-то вменяемое вообще.
     

  • 1.10, ogmy (ok), 00:00, 26/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Прошла любовь завяли помидоры.
    Вакансий почти нет.
     
     
  • 2.20, Аноним (20), 00:54, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Та нет. Ровно столько же сколько и вакансий на Pascal.
     
     
  • 3.21, Аноним (20), 00:54, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    УДивительно, но и столько же сколько вакансий на Golang.
    Подозрительно, что возможно это тоже проходной язычок.
     
     
  • 4.59, Брат Анон (?), 15:19, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Гугель.Тренды утверждают, что ты не китаец))
    https://trends.google.com/trends/explore?date=today%205-y&q=golang,Ruby
     
     
  • 5.76, Shtirlic (?), 18:52, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    https://trends.google.com/trends/explore?q=%2Fm%2F09gbxjr,%2Fm%2F06ff5
    вот правильное сравнение, а не то что у вас
     
     
  • 6.89, Аноним (89), 10:57, 27/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    И что на сервисе гугла победил язык от гугла вот это новости.
     
  • 6.96, Брат Анон (?), 11:15, 30/12/2019 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     
  • 2.68, balajahe (ok), 17:05, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Вакансий почти нет

    Ruby - 176
    Rust - 7

     

  • 1.13, аноним3 (?), 00:07, 26/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –11 +/
    чет синтаксис питона выглядит куда понятнее и человечнее. а тут попытка закосить под крутой язык? ну я когда смотрел разницу подходов питона и руби, так сразу засек , что руби как то менее человечен чем питон. а ведь оба интерпретируемые языки. и со стремлением к понятной и быстрой разработке. впрочем на руби я встречал как то мало скриптов. хотя даже в лине попадались, но как то не больше 5 штук.)) язык не пошел.
     
     
  • 2.34, Аноним (-), 08:00, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Для того, чтобы рассуждать о языке, надо понимать его модель. В Ruby акцент на человекочитаемость. Чтобы человек, понимающий естественную речь (английскую по-умолчанию), мог понять программу. Отсюда, у программистов-нелюдей с изменённым состоянием сознания, возникает диссонанс, глядя на Ruby, что в Ruby так можно, а в их любимом ЯП - нет.

    > впрочем на руби я встречал как то мало скриптов.

    пользуйтесь OpenSUSE или MacOS

     

  • 1.15, Аноним (15), 00:30, 26/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >  выполнять дефрагментацию области памяти, решая проблемы снижения производительности

    Кто в теме, объясните нубу, как дефрагментация памяти повысит производительность? Это же не диск, где головка туда-сюда дёргается, там просто адрес ячейки.

     
     
  • 2.18, Аноним (18), 00:51, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    на правах ИМХО...

    Если маленькие "свободные места" слить в один большой "кусок свободного места", это упростит создание новых объектов и руби будет реже говорить системе "дай еще памяти".

    Но это в теории... что и кому добавится на практике посмотрим на продакшенах :)

     
  • 2.19, Урри (?), 00:52, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Гуглить Крис Касперски "Техника оптимизации программ. Эффективное использование памяти".

    Если в двух словах - контроллер памяти пересылает данные целыми блоками. Больше фрагментация - больше пересылок. Если не в двух, то все очень сложно, ибо есть еще кэш и т.д. и т.п. - короче, читай книгу выше.

     
     
  • 3.33, Аноним (33), 07:39, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Лучше читать классику «Using Block Prefetch for Optimized Memory Performance», Advanced Micro Devices, Mike Wall  https://web.mit.edu/ehliu/Public/ProjectX/Meetings/AMD_block_prefetch_paper.pd

    Не ясно что больше от книжек Криски, вреда или пользы.

     
     
  • 4.47, Я (??), 11:40, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    У Криса оптимизация существенно лучше расписана.
     
     
  • 5.55, Аноним (33), 14:10, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Вопрос в том, насколько информация в его интерпретации верна.

    «На процессоре Р-III 733/133/100 оптимизированный вариант выполняется быстрее на целых 66%, а на АМD Athlоп 1050/100/100 — на 60%, т. е. предвыборка увеличивает производительность более чем в два раза!»

     
     
  • 6.63, Урри (?), 15:56, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Неоптимизированный код - 100 секунд. Оптимизированный код - на 60% (60 секунд) быстрее; то есть 40 секунд.
    40 секунд - более чем в два раза меньше, чем 100 секунд.

    Кроме того, в книге приводятся графики тестов по доступу к памяти, множество фактов и примеров. Я, например, такие же тесты использовал, когда оптимизировал им одну либу для гугла под хромбук.

     
     
  • 7.71, Аноним (33), 17:49, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Неоптимизированный код - 100 секунд. Оптимизированный код - на 60% (60 секунд)
    > быстрее; то есть 40 секунд.
    > 40 секунд - более чем в два раза меньше, чем 100 секунд.

    Вот именно -- секунд. Секунда это единица измерения времени. Быстрее -- характеристика скорости, есть обратной ко времени величины. Корректно было бы: «время выполнения на 66% меньше».

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

     
     
  • 8.78, Урри (?), 19:55, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Это в _вашей_ голове образуется каша А в головах других людей - не образуется ... текст свёрнут, показать
     
     
  • 9.85, Аноним (33), 06:20, 27/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ниже https www opennet ru openforum vsluhforumID3 119316 html 80 живой пример ... большой текст свёрнут, показать
     
  • 8.80, Аноним2 (?), 21:17, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Вопрос-то Вы задавали не о секундах И человек Вам доступно объяснил, почему 60 ... текст свёрнут, показать
     
     
  • 9.86, Аноним (33), 06:27, 27/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Откройте для себя учебник математики, тема пропорции Следом порешайте задачки п... большой текст свёрнут, показать
     
     
  • 10.95, Аноним2 (?), 01:29, 28/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Насчет скорость производительность больше на 66 - опечатка, согласен ... текст свёрнут, показать
     
  • 2.24, Аноним84701 (ok), 01:09, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это, скорее всего, вот отсюда https www ruby-forum com t heap-fragmentation-i... большой текст свёрнут, показать
     
     
  • 3.28, GentooBoy (ok), 06:22, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    нет не про это, комментатор выше все правильно сказал, дело в блоках и кэш линиях.
    Конкретно про руби эрон выступрал даже на конфе и есть статья, лиже линки если хотите разобраться как
    https://bugs.ruby-lang.org/issues/15626
    https://www.youtube.com/watch?v=H8iWLoarTZc

     
     
  • 4.32, Аноним (33), 07:33, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Имеет смысл располагать в линейке кеша объекты, доступ к которым происходит прим... большой текст свёрнут, показать
     
     
  • 5.35, Аноним (35), 08:57, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Да это вполне возможно.
    По поводу целесообразности встраивания в линейки незнаю. Надо тестировать смотреть. Может быть что целесообразно доработать код для этого, а может нет.
     
  • 3.43, Аноним (43), 10:58, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > т.е. проблема поиска свободных блоков памяти при сильной фрагментации - "приветик" от создания короткоживущих объектов "на каждый чих".

    Интересно бы почитать, как с этим делом в Эрланге, с ихним "share nothing" создание переменных на каждый чих - во все поля.

     
     
  • 4.53, Аноним (53), 13:45, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Гугли про generational gc. В эрланге так же как в хацкелле, жабе и прочих сишарпах. С поправкой на тот факт, что в энларге можно собирать мусор в каждом потоке отдельно, не останавливая весь мир.
     
  • 3.65, Урри (?), 16:12, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > т.е. проблема поиска свободных блоков памяти при сильной фрагментации - "приветик" от создания короткоживущих объектов "на каждый чих".

    Для языков со сборкой мусора это как раз не проблема. Именно в задачах, где надо создавать много короткоживущих объектов языки с GC уделывают традиционные.

     
     
  • 4.69, Аноним84701 (ok), 17:20, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >> т.е. проблема поиска свободных блоков памяти при сильной фрагментации - "приветик" от создания короткоживущих объектов "на каждый чих".
    > Для языков со сборкой мусора это как раз не проблема. Именно в задачах, где надо создавать много короткоживущих объектов языки с GC уделывают традиционные.

    Собственно, с этим никто не спорил.
    Просто в конкретных реализациях GC/аллокаторов - иногда таки можно наткнуться на какой-нибудь проблемный случай.
    По приведенной ссылке - как раз описана такая ситуация "highly dynamic object-space". Решалась там  (в конце-концов) прикручиванием другого аллокатора: " The problem can be mitigated by linking ruby against ptmalloc3."

     
  • 2.90, Совершенно другой аноним (?), 15:39, 27/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    http://rus-linux.net/lib.php?name=/MyLDP/hard/memory/memory.html
     
  • 2.91, Совершенно другой аноним (?), 15:39, 27/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    http://rus-linux.net/lib.php?name=/MyLDP/hard/memory/memory.html
     

  • 1.16, Аноним (16), 00:36, 26/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Неоднозначный синтаксис языка не позволяет делать полноценный синтаксический анализатор для IDE. Правда код на руби остается понятным и читаемым долго и клепается нечеловечески быстро это факт, даже без поддержки IDE. Но есть одна деталь которая напрочь этот руби делает непригодным - приложения жрут невероятно процессорное время часто в десятки раз больше чем на других языках. Такое г. непонятно где хостить (и нужно ли в итоге?).
     
     
  • 2.22, Аноним (20), 00:57, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Так в чем причина потребеления процессорного времени? Смотрели профайлером?
    Просто ради любопытства даже тем же Python надо стараться что бы утилизировать весь CPU.
    Может что-то не так делаете? Не используете асинхронность например?
     
  • 2.23, Аноним (18), 01:08, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну не десятки. (Если не сравнивать с "hello world" на си)

    А, например, если нужно распарсить HTTP запрос, дернуть контроллер, который сходит в БД, сгенерить HTML и оттдать клиенту... Если у вас руби для этого больше 50мс от ядра CPU отнял, вы что-то (пере)мудреное делаете, стоит присмотреться внимательно.

     
  • 2.29, GentooBoy (ok), 06:40, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Пишите о том в чем не разбираетесь.

    >Неоднозначный синтаксис языка не позволяет делать полноценный синтаксический анализатор для IDE

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

    >приложения жрут невероятно процессорное время часто в десятки раз больше чем на других языках

    Полнейший бред, выжирание памяти да есть, руби любит память кушать. CPU  кушает как и питон.
    https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/ruby.html
    Единственное есть проглемы с временем старта, связанные с тем что загружаються  gem  при старте. Но над этой проблемой ведется работа. Если отрубить  gem  то время старта практически точно такое же как у питона(до перл не дотягивает). Так что даже для подстрочников он вполне юзабельный.

    >Такое г. непонятно где хостить (и нужно ли в итоге?).

    Ваши наезды не релевантны, у руби куча недостатков, но это не те что вы озвучили.

     
  • 2.45, qwerty123 (??), 11:10, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Но есть одна деталь которая напрочь этот руби делает непригодным - приложения жрут невероятно процессорное время часто в _десятки_ раз больше чем на других языках.

    В сотни! В тысячи! В миллионы! =)

    Идите уже делать уроки, что-ли...

     
     
  • 3.54, fyjybvjec (?), 14:06, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Ну руби правда тормозной, чтож делать то lol
    У руби другие достоинства, но явно если не нужно решать задачи где нужна высокая производительность.
    Наляпать что то по быстрому, обработать не очень много хттп запросов на небольшом сайте, тут у руби нет конкурентов.

    Статистики, много ее - это случайная с гугла

    https://attractivechaos.github.io/plb/

    Implementation Lang sudoku:t matmul:t matmul:m patmch:1t patmch:2t dict:t dict:m
    C                 1.0 2.3 31.7 1.7 4.5 3.0 52.6
    C#@Mono-2.10.1 C# 3.8 8.9 40.6 15.7 45.1 5.2 113.9
    Ruby-1.9.2p180 Ruby 98.0 628.4 196.6 15.4 30.3 8.6 156.8

     
     
  • 4.62, fyjybvjec (?), 15:33, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Инженерный подход к решению задач рулит - когда вы используете то что вам нравится а не то что надо по задаче, где то умирает еще один котик)
     
  • 4.75, Додо (?), 18:25, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Эм. Эта ссылка датирована 2011 годом, с тех пор как бы много что поменялось.
    Ruby по сравнению с остальными языками небыстрый, это да, но скорость разработки на нем фантастическая. И не для всех задач скорость работы первостепенно важна - если страничка какого-то среднего интернет-магазина будет грузиться не за 30 мс, а за 70 мс, это не сильно критично.
     
  • 2.92, Аноним (92), 19:18, 27/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Неоднозначный синтаксис языка

    На этом поле давно всё занято плюсами.

     

  • 1.26, Аноним (25), 02:02, 26/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Мне в руби больше всего нравились символы а-ля Lisp
     
  • 1.27, Рубист (?), 06:13, 26/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Руби крутейший язык, аналогов которому нет. Питон это недорозумение.
     
     
  • 2.36, safdasfa (?), 09:04, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    два бокала чая этому господину
     
  • 2.56, fyjybvjec (?), 14:13, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Питон изучается за пару дней, код ясен и понятен. Пишут макеты, алгоритмы, обвязки для мат библиотек, аа еще блендер на питоне. У этих языков разные области применения.
    Аналогов более чем в избытке - причем это я не в минус руби - отличный язык для некоторых задач.
     
     
  • 3.64, Урри (?), 16:03, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Питон не изучается за пару дней. Пара дней - это порог вхождения в питон. И это две большущие разницы.

    Только вот есть одна маленькая проблема - потом существенно больше времени и ресурсов тратится на переделывание.
    Вы упомянули блендер - не хотите вспомнить, сколько блендер прозябал? 99,9% претензий к нему были "слишком тормозной, невозможно работать". И взлетать он стал только после того, как компьютеры стали достаточно мощные и(!) после того, как его наконец-то переделали профессионалы (в том числе большей частью переписали на C).

    Почем знать, если бы сразу писали нормально - может он бы уже давно стал стандартом де-факто в мире 3д.

     
     
  • 4.67, fyjybvjec (?), 16:28, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вы совершенно правы, за два дня его не изучить, но имеет низкий порог вхождения.
    На питоне хорошо делать макеты или отлаживать алгоритмы (с переносом куда то после). + отличная интеграция со сторонними библиотеками.

    Но мой ответ был комментатору про <<Руби крутейший язык, аналогов которому нет. Питон это недорозумение. >>

    Блендер, отличная штука, большая часть плагинов на питоне, есть на С, ядро было изначально на С.
    Моделирование если сравнивать с майей на 4+, текстурирование предпочитают после делать в 3д максе, нормальный рендеринг появился начиная с Cycles (2016 год), Скиннинг и анимации до сих пор очень слабо если без плагинов - с майей не сравнить.

    Так что можно сказать что он был не особо популярен не из за тормозного питона (а они все тормозные, эти 3д пакеты) просто по своей неразвитости, сейчас сильные подвижки будем надеяться что его допилят :).
    Вот лов-поли модельки на нем делать ОК + экспорт в SL из коробки.

     
  • 3.73, Аноним (73), 17:55, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В саблайме плагины тоже на питоне, только это не значит что саблайм написан на питоне.

    Вот например  vs code плагины на джаваскрипт, но сам браузер большей частью на Хроме написан т.е. тоже на C++.

     

  • 1.30, Аноним (30), 06:48, 26/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > def foo(key: 42); end; foo({key: 42})   # warned
    > def foo(key: 42); end; foo(**{key: 42}) # OK

    Вот уроды! Делают .NET из моего руби.

    > Из базовой поставки во внешние gem-пакеты вынесены библиотеки CMath (cmath gem), Scanf (scanf gem), Shell (shell gem)

    А это уже пистоно-болезнь!..
    Матц, вернись! Хипстеры гробят язык!

     
  • 1.31, Че (?), 07:17, 26/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Роберт Шекли. "Необходимая вещь"
    В этом рассказе вся боль "Руби"
     
  • 1.37, Аноним (37), 09:19, 26/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто знает как называется шрифт на первом скриншоте?
     
     
  • 2.38, ququmber (?), 10:10, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    присоединяюсь, что за шрифт.
     
  • 2.39, Аноним (39), 10:10, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    На terminus похож.
     
     
  • 3.48, Я (??), 11:47, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    нет, это не терминус.
     

  • 1.40, Аноним (40), 10:11, 26/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Любой язык где возможна конструкция вида a=a+b-(b=a) не нужен.

    А это как минимум Руби, Джаваскипт, С++.

     
     
  • 2.41, Аноним (39), 10:12, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще-то нужен.
     
     
  • 3.42, Аноним (40), 10:26, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще-то в нужных языках хватает такой конструкции: a, b = b, a

    А та что выше это дичь.

     
     
  • 4.44, привет (ok), 11:01, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Кроме как питоне такая именное есть где то?
    этож штука вроде (a, b) = (a,b) в перле?

    Просто эту конструкцию я видел пару раз и
    каждый их них было "представление крутости питона"
    крутости на этом, правда, заканчивались

     
     
  • 5.49, Аноним (50), 12:23, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    В перле ты просто пробел убрал? и что он делает?

    a, b = b, a; есть в Го в Руби тоже есть.

    Это две переменные меняются значениями без создания третьей или без необходимости записи трех строк кода чтобы поменять переменные без создания третьей. В некоторых алгоритмах так быстрее всего записать. Причем строка в начале этого топика делает тоже самое, но как-то странно.

    Для Руби можно даже без скобок записать. Такая конструкция уже гарантированно ломает мозг.
    a=a+b-b=a; с тем же результатом что и выше. Но имхо языки которые такое позволяют решительно не нужны.

     
     
  • 6.77, привет (ok), 19:31, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > В перле ты просто пробел убрал? и что он делает?
    > a, b = b, a; есть в Го в Руби тоже есть.

    (a, b) = (b, a);

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

    Пробел конечно же не значит ничего, поставлен в попыхах :)

    Я к тому написал, что мне представляли конструкию "магией" питона
    хотя ничего магического я в ней не видил - потому решил уточнить у знающих

    > Это две переменные меняются значениями без создания третьей или без необходимости записи
    > трех строк кода чтобы поменять переменные без создания третьей. В некоторых
    > алгоритмах так быстрее всего записать. Причем строка в начале этого топика
    > делает тоже самое, но как-то странно.
    > Для Руби можно даже без скобок записать. Такая конструкция уже гарантированно ломает
    > мозг.
    > a=a+b-b=a; с тем же результатом что и выше. Но имхо языки которые
    > такое позволяют решительно не нужны.

    смотрится неоднозначно, согласен с вами :)

     

  • 1.51, Аноним (51), 13:17, 26/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Хокку:

    Лучше python 2.7
    чем ruby 2.7

     
     
  • 2.61, Брат Анон (?), 15:24, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Лучше Оберон, чем Пхытон-8
     

  • 1.66, Аноним (66), 16:28, 26/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Пока мамкины эксперты пыхтят свои басни о недостатках, руби помогает зарабатывать миллиарды баксов, просто за счёт быстрой разработки, ибо стоит она дороже любых системных ресурсов (которые руби жрёт не так уж и активно).
     
     
  • 2.84, Gjrkdj (?), 23:43, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ruby - всего лишь миллиарды, когда Python позволяет заработать триллионы
     
     
  • 3.87, Аноним (-), 10:22, 27/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Есть небольшая для питонистов проблема. Может и триллионы, но в удельном выражении на одного "разработчика" это означает "работать за еду". Собственно, это единственная причина, почему есть вакансии на Питоне.
     
     
  • 4.88, Аноним (89), 10:56, 27/12/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это ты с пыхерами перепутал. А там и десятки триллионов могут быть. В руби ты тоже как-то умолчал что миллиарды получают далеко не программисты...
     
     
  • 5.93, Аноним (-), 19:38, 27/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В Ruby-мире как-то не встречаются низкооплачиваемые вакансии. Если только реально только вчера начал программировать. А вот питонисты - за еду готовы. Собственно, они и есть предполагаемая замена пэхеров, если получится. Но не факт.
     

  • 1.97, Аноним (-), 18:01, 26/02/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Оказывается Руби старый? Японец ведь его родил.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру