Вышел Ruby 2.1

    Спецификации Ruby обновились до версии 2.1.0. В новой версии языка программирования сделано несколько эволюционных изменений. В неофициальных бенчмарках на Rails версия 2.1 показывает результат примерно на 20% выше, чем 2.0, которая, в свою очередь, на 60-70% быстрее 1.9.3.

    Вкратце, самые важные из них:

    • VM (кэширование методов)
    • новый сборщик мусора RGenGC (см. презентацию ko1 на RubyKaigi и на RubyConf 2013)
    • изменения в синтаксисе
      • новая запись дробей с использованием двух слэшей ("//") между числителем и знаменателем, см. #8430
        • 1 // 2 == Rational(1, 2)
        • 1 // 1 == Rational(1, 1)
        • 0 // 1 == Rational(0, 1)
      • новые суффиксы i, r и ri для записи комплексных и рациональных чисел
        • "42r" и "3.14r" расцениваются как рациональное число Rational(42, 1) и 3.14.rationalize, соответственно. Но экспоненциальная форму с суффиксом 'r', такая как "6.022e+23r", не принимается.
        • "42i" и "3.14i" расцениваются как Complex(0, 42) и Complex(0, 3.14), соответственно.
        • "42ri" и "3.14ri" расцениваются как Complex(0, 42r) и Complex(0, 3.14r), соответственно.
    • определение функции def теперь возвращает символ её названия вместо nil, см. #3753
    • уточнения #8481 #8571
    • Bignum
      • использует GMP (GNU Multiple Precision Arithmetic Library) для ускорения операций над большими числами, см. #8796
    • добавлен метод Array#to_h — создание хэша из массива
    • String#scrub #8414
    • Socket.getifaddrs #8368
    • RDoc 4.1.0 и RubyGems 2.2.0
    • “literal”.freeze теперь оптимизирован #9042
    • добавлен Exception#cause #8257
    • обновлены библиотеки JSON, NKF, rake, RubyGems, и RDoc.
    • удалена библиотека curses. #8584

    Ruby — высокоуровневый язык для быстрого и удобного объектно-ориентированного программирования. Его создатель Юкихиро Мацумото постарался совместить лучшие черты своих любимых языков Perl, Python, Smalltalk, Eiffel, Ada и Lisp в поисках грамотного баланса между функциональным и императивным программированием. Целью было создание языка, более мощного, чем Perl, и более объектно-ориентированного, чем Python, пишет Википедия. Основное назначение Ruby — создание простых и в то же время понятных программ, где важна не скорость работы программы, а малое время разработки, понятность и простота синтаксиса.

    Мацумото занимается разработкой Ruby до сих пор, и версия 2.1.0 — его рождественский подарок всем программистам.

    Более подробный список изменений в 2.1.0 см. здесь, а также в презентации “All about Ruby 2.1”.
    Поделиться публикацией

    Похожие публикации

    Комментарии 26
      0
      Ну хоть бы ссылочку на википедию приложили, откуда был с минимальными изменениями взят третий снизу абзац в вашей статье.
      0
      String#scrub #8414


      По ссылке все на японском.
      0
      Bignum на GMP = Fixed Point real?
        0
        VM? Имеются ввиду виртуальные методы?

        А у вас там что, наследование не делегированием разве сделано?
        (я питонер)
          0
          VM — Virtual Machine. Насколько я понял, изменен механизм кеширования методов, который учитывает фактические вызовы.
          –5
          «быстрого и удобного» — ну-ну
            +6
            не холивора ради, но какие у вас практические претензии к этому языку касательно именно этих двух слов? Было бы интересно услышать вашу аргументированную позицию.
              –5
              да вот уже неделю сношаюсь с этим удобным языком. А задача на пару дней на, например, яве. Из самого плохого вылетающий глючный дебаггер и размазанный по куче файлов код одного и того же класса. Это конечно не 100% вина языка, но он способствует всякому манкипатчингу и eval'ам даже идеологически.
              Сейчас мне скажут, что я неправильно его использую и тп. Ну, что есть, с тем и работаю. И это много удовольствия не приносит. Большая свобода языка должна быть подкреплена офигенной строгостью процесса, у нас этого нет. Да и, глядя на другие проекты на руби, я вижу, что она мало где есть. А это уже предъява к языку, хорошие языки прощают ошибки, а этот не особо.
              Алсо мне приходилось ковырять исходники jruby на предмет исправления косяков.
              Еще плохого могу сказать, что либы очень редко совместимы между версиями и вариантами руби…
                –3
                Вот еще вдогонку:
                1) рефакторинг в руби 2х видов: поиск по тексту с просматриванием глазами, или выбросить всё и переписать заново, потому что всегда найдётся имя сущности в строке или в символе где-то;
                2) мутное наследование с миксинами, айгенклассами и прочим; часто сложно найти, откуда взялся функционал.
                  +2
                  Как вы это делаете? За 8 лет разработки разной плотности дебаггер мне доставлял неприятности пару раз, и я уже не вспомню чем.
                    –2
                    Это проявляется только когда очень надо, очень срочно и на самом сложном куске кода :)
                      0
                      Давайте по-простому, есть у нас «глючный вылетающий дебаггер», как бы мне повторить это поведение?
                        –3
                        А вам это действительно надо? Когда у меня глючит дебаггер, а перезапускаю софтину, если он продолжает, я дебажу тупо puts'ами. Если б я знал, как воспроизвести, я б написал гневный таск разрабам руби. Мне надо дебажить свой код, а не код дебаггера; даже если бы у меня был сохранен трэйс ошибок дебаггера, я б ради спора в каментах не полез его искать.
                          0
                          А мне это действительно надо, так как основной язык моей разработки — ruby, основная гигантская надстройка rails над глючным дебаггером.
                          Т.е. вы утверждаете, что ваш дебагер (кстати какой) глючит, т.е. ведет себя неожиданно. Если вы утверждаете, что он глючит, значит это событие носит систематический характер, и память на вашем компе вовсе не битая, и операционка вовсе не винда.
                          Вашим голословным утверждениям никто не поверит, если вы ради поддержки своего утверждения (а вовсе не ради спора в коментах) не лезете искать систематическую ошибку, которую, видимо, кроме вас никто не видел.
                            0
                            Зря вы думаете, что назвав мои утверждения голословными, сподвигните меня кинуться что-то доказывать. У меня своё мнение, я его привел, чтоб его могли прочитать те, кто своего мнения еще не составил, просто чтобы увидели, что есть те, кому руби перестал нравиться. А у вас, я смотрю, мнение давно сформировано и вы его даже под пытками менять не собираетесь :)
                              0
                              Если нас читают дети, то важно детям дать понять, что ваше мнение голословно, а то вдруг поверят.
                              Есть люди которые верят в бога и высказывают свои мнения, чтобы это мнение могли прочитать те, кто своего мнения еще не составил, но читать уже умеют, чтобы увидели, что есть те, кому агностицизм перестал нравится :) Однако даже эти утруждают себя доказательствами, какими бы спорными они ни были.
                              О каких пытках вы говорите, я вполне комфортно для себя способен менять мнение.
                                0
                                В следующий раз, когда у меня глюканет дебаггер, обязательно сохраню трэйсы. А пока можете мне верить или нет.
                                Я зашел в статью про руби, потому что с ним работаю, а не просто так. Это я даже могу доказать :)
                                И мне не понравилось неадекватные (тоже ничем не подкрепленные) восхищения им, коих в статьях про руби очень много, а про недостатки пишут очень мало. Поэтому мне это напоминает слепую веру

                                Для owls: я не имел в виду, что только неделю начал заниматься руби, и ничего не знаю, я имел в виду, что отошел от него и пришлось вернуться назад на одну задачу, с неохотой возвращался.
                                  0
                                  Я например не настолько крут, чтобы завтра все бросить и пойти в .Net. Тот уроевнь на котором вы кодите, судя по ощущениям, по крайне мере для меня, не очень-то достижим. Все мои надежды и мечты связаны исключительно с сообществом, а кто как не оно, является потребителем и двигателем таких закрытых социумов? Я обычный потребитель, хоть и разработчик.
                                  Тем более ваше мнение важно для сообщества. Я искренне прошу забыть нашу взаимную неприязнь, если такая могла появиться, и, в году тому, что вы можете оказать нам неоценимую услугу, показав на каких процессах руби плох, чтобы мы смогли внести необходимые изменения в код или в мозг. Пару стартапов может сможет выжить, выбрав правильный продукт.
                                    +2
                                    Не могу с вами не согласиться, что уж слишком много восхищения, аж приторно. Но я думаю это явление уже идет на спад. Если не секрет с чего пришлось вернуться до того как понадобилось решить эту задачу, то есть с чем вы работаете каждый день помимо Ruby и собственно в чем заключается эта задача?
                                      0
                                      Это потому, что, видимо, вы снаружи. Внутри сообщества негодований очень много.
                                      +3
                                      просто тут на лицо фундаментальная ошибка — вы не отделете язык от инструментария, занося всё в минусы языку. Кстати, каким инструментарием вы пользуетесь?
                        +2
                        да вот уже неделю сношаюсь с этим удобным языком

                        Зачем же так грубо? Просто уделите ему побольше внимания и взгляните на этот язык непредвзято. Не надо сношаться, попробуйте полюбить :)

                        С первого взгляда Ruby очень простой и кажется что «вот как щас сяду и напишу за пару дней», но при более длительном изучении обнаруживаются детали, которые сложно понять и принять в один момент. Пожалуйста, будьте терпеливы и вы обретете прекрасного помощника в лице Ruby.
                      0
                      Именно так!
                      0
                      Нет такого синтаксиса, как 1//2: eval.in/83397

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

                      Самое читаемое