LINUX.ORG.RU

Ruby 2.0.0 preview1

 


2

6

Анонсирован Ruby 2.0.0 preview1. Были включены новые фишки, которые делают разработку на Ruby ещё приятнее.

Анонсированные фичи:

  • Уточнения (Refinements) [1]
  • Именованные аргументы в методах (сахар над хэшем) [2]
  • Enumerator#lazy [3]
  • Module#prepend [4]
  • #to_h
  • %i, для массивов символов
  • Движок регулярных выражений изменён на Onigmo [5]
  • Поддержка DTrace [6] (не включено)

Пока что ещё не все новые фишки включены в Ruby, это откладывается на следующие анонсы.

Не забываем устанавливать и находить баги, это только сделает Ruby лучше.

Все программы, которые написаны на ruby-1.9 будут работать на ruby 2.0, если в них не будет особой магии.

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

anonymous

Проверено: tazhate ()
Последнее исправление: tazhate (всего исправлений: 2)
Ответ на: комментарий от Vudod

Для любителей пуризма --- неплохой язык. Но преимуществ по сравнению с Питоном не вижу.

Плюсую. Тоже не вижу преимуществ одной интерпретируемой динамически-типизированной наколенной поделки перед такой же, но другой.

Особенно в свете неуклонного перехода на Py3k

$ which python3
which: no python3 in (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/vendor_perl:/usr/bin/core_perl)
$ which python
which: no python in (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/vendor_perl:/usr/bin/core_perl)
$ which python2
/usr/bin/python2
shahid ★★★★★
()
Ответ на: комментарий от shahid

Ераланщеги не видят разницы между питоном и руби, ну и что теперь, застрелиться чтоли))

special-k ★★★★
()

Как там с байткодом?

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

О каком менеджере ты говоришь, давай я снова найду тебе отличия.

pip

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

есть вероятность что сделали.

Но никому не показали. «У нас есть такие приборы! Номы вам о них не расскажем» (ц)

я что на каждый пакет должен давать аналог в руби?

В общем, после SciPy в этом нет необходимости.

ты лжёшь в питоне нету как раз-таки ГЦ

Ты продолжаешь лгать. Ну или ты обычный недоучка, который не знает, что reference counting - это одна из техник GC (cycle detection в Python тоже есть, да).

метапрограмминг

Декораторы, метаклассы.

непофикшены баги со скоупами

Какие баги, где непофикшены?

dsl

Рубироидные embedded DSL, которые просто вызов методов? Да уж, большая потеря. А внешние DSL - пиши, какие проблемы?

поведение от версии к версии меняется, при том достаточно глобально даже на простейших вещах

«От версии к версии» - это от python 2 к python 3, при официальном объявлении слома совместимости. Пешы исчо.

http://ruby-fann.rubyforge.org/

А живые проекты с активным сообществом есть?

http://projects.skewed.de/graph-tool аналог

Ты издеваешься? Это Python.

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

Чтобы копировать, обычно используется scp, или rsync, знаешь ли.. bundler позволяет установить либы, разрешив зависимости. Заморозить и копировать можно, но кто бы этим занимался, если я абсолютно без гемороя поставлю пакеты на продакшене.

вообще-то для этого есть разные инструменты, которые берут код из DVCS, прогоняют тесты, а затем пакуют это все в пакет понятный для ОС. Все зависимости пакет автоматически подтягивает.

Откатить такой пакет не составляет труда, а ваши rsync, scp - это решение скорее для рубистов, да.

Но это ладно, мне вот интересно, чем плохо иметь на продакшене инструменты разработчика? Прогнать тесты разок дурной тон что ли?

ну да, нужно теперь еще GCC запихнуть на сервер :)

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

Если сравнивать http://rubygems.org и http://pypi.python.org, то разница, думаю, очевидна: взять хотя бы кнопку документации, которая есть (это потому что у руби инструменты для документации есть). Может они конечно и для питона есть, но пипи об этом не знает.

что имеется в виду «инструменты для документации»? Аналог Sphinx?

Если говорить именно о библиотеках, то, например здесь http://pypi.python.org/pypi сказано, что у питона их 25228, а у руби 46,389 (http://rubygems.org/), что, практически, в два раза больше. Это странно, т.к. у питона длительное время не было аналогов, так что если это все-таки не все библиотеки, то я не знаю где они :)

Ruby с 46к пакетов нет изкоробки ни в Debian, ни в RHEL. Дальше можно не спорить :)

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

Ruby с 46к пакетов нет изкоробки ни в Debian, ни в RHEL. Дальше можно не спорить :)

А смысл, один хрен педон и руби отсасывают по кол-ву пакетов у джавашного мавена.

Total number of unique artifacts indexed (GA) 47,442

lester_dev ★★★★★
()

tailgunner
pip

Что ж сравнивай http://www.pip-installer.org/en/latest/requirements.html
http://gembundler.com/gemfile.html

xpahos
вообще-то для этого есть разные инструменты, которые берут код из DVCS, прогоняют тесты, а затем пакуют это все в пакет понятный для ОС. Все зависимости пакет автоматически подтягивает.

Иди читай про capistrano, лол. Касаемо веб-приложений подход с формированием пакетов для ОС - полный идиотизм. Кто советует так делать?

ну да, нужно теперь еще GCC запихнуть на сервер :)

Ставь же ядро и питон сверху, клоун.

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

давай я снова найду тебе отличия.

сравнивай http://www.pip-installer.org/en/latest/requirements.html http://gembundler.com/gemfile.html

Хм. Вообще да, ты собирался найти отличия, но не обещал их опубликовать. Очень разумно.

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

Иди читай про capistrano, лол. Касаемо веб-приложений подход с формированием пакетов для ОС - полный идиотизм. Кто советует так делать?

скажи, ты пробовал с помощью capistrano развернуть приложение на 1500 серверов? Или ты можешь привязать capistrano к cf-engine?

Ставь же ядро и питон сверху, клоун.

щито?

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

tailgunner и special-k! Давно меня мучает вопрос: не мешает ли программистам python и ruby то, что при присвоении значения инициализируется новая переменная? Ни тебе my, ни var... Так ведь можно self=1;...;sefl=func(self);

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

не мешает ли программистам python и ruby то, что при присвоении значения инициализируется новая переменная? Ни тебе my, ни var..

Конечно, хотелось бы иметь возможность объявлять переменные. Но Гвидо виднее :)

Так ведь можно self=1;...;sefl=func(self);

В «динамическом быдлоязычке» (ц) это не ухудшает общую ситуацию.

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

Я уже говорил о возможностях бандлера в этом треде, кто виноват, что ты плохо умеешь читать.
Но если коротко
- поддержка различных источников (в первую очередь еще и github).
- поддержка групп библиотек.
- возможность сделать ссылку на локальную (разрабатываемую в данный момент) либу.
- не считая установки из пакетов дистрибутивов (которая свовсем не популярна у рубистов), gem это единственный способ ставить библиотеки в ruby.

Далее
http://rubygems.rubyforge.org/rubygems-update/Gem/Specification.html
http://guide.python-distribute.org/creation.html
Я даже не нашел нормальной спецификации по setup.py..
В общем, резюме такое, что pip это пародия на gem, requirements.txt - пародия на gemfile, setup.py - пародия на gemspec, pipy.python.org - пародия на rubygems.org.
Вроде бы что-то есть, но, в целом, хуже и страшное.. хз почему так, но пока так. В принципе мне по.. я с этим не работаю))

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

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

Ты обещал сравнение, а вместо него дал два URL, так что не вали с больной головы на здоровую.

поддержка различных источников (в первую очередь еще и github).

В pip поддерживается Git, Mercurial, SVN. Чего не хватает?

возможность сделать ссылку на локальную (разрабатываемую в данный момент) либу

То есть ты уверен, что в pip не работает file:// или что?

не считая установки из пакетов дистрибутивов (которая свовсем не популярна у рубистов), gem это единственный способ ставить библиотеки в ruby.

pip это умеет.

резюме такое, что pip это пародия на gem, requirements.txt - пародия на gemfile, setup.py - пародия на gemspec, pipy.python.org - пародия на rubygems.org.

Ни одну тему ты не раскрыл, но никто от тебя этого и не ждал.

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

Что это за системы мониторинга, которые ставятся на 1500 серверов?

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

xpahos ★★★★★
()

До сих пор работаю с 1.8, ЧЯДНТ? Достали добавлять синтаксический сахар, когда уже будет нормальный язык, а не для хипстеров?

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

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

При чем здесь Capistrano? Вы что, кушаете борщ фломастером?

Для configuration management'a есть Puppet и Chef.

Anatolik ★★
()

tailgunner
В pip поддерживается Git, Mercurial, SVN. Чего не хватает?

Как это выгдядит?

То есть ты уверен, что в pip не работает file:// или что?

Как это выглядит?

pip это умеет.

Суть в том, что это не стандарт де-факто. Пип не умеет формировать документацию.

Приведем пример, я создаю либу, которая использует библиотеки a,b,c с версиями 1,2,3 соответственно. Мне нужен генератор каркаса библиотек..

gem i jeweler
Далее я создаю структуру..
jeweler my-lib
Далее указываю в Gemfile..
source "http://rubygems.org"
gem "a", "~>1"
gem "b", "~>2"
gem "c", "~>3"
Устанавливаю..
bundle install
Типа все, можно работать, инструменты для тестирования у меня уже есть. Опиши свои шаги для аналогичной операции.

helios

1.9.3-p194 :013 > help = 1;help = func(help)
"ok"
special-k ★★★★
()
Ответ на: комментарий от xpahos

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

Ты знаешь что такое веб-приложение?

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

В pip поддерживается Git, Mercurial, SVN. Чего не хватает?

Как это выгдядит?

http://www.pip-installer.org/en/latest/requirements.html#version-control

То есть ты уверен, что в pip не работает file:// или что?

Как это выглядит?

Как выглядит URL на локальный ресурс? O_o

Пип не умеет формировать документацию.

Да, наверное. А зачем это пакетному менеджеру?

Опиши свои шаги для аналогичной операции.

Для начала - я ничего не понял из твоего gem-фу. Но могу сказать, что библиотеки для Python я ставлю apt-get'ом.

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

о никому не показали. «У нас есть такие приборы! Номы вам о них не расскажем» (ц)

ну и что?

В общем, после SciPy в этом нет необходимости.

в общем твой сципу нужен только 1% остальным из-за этого на руби не писать?

Ты продолжаешь лгать. Ну или ты обычный недоучка, который не знает, что reference counting - это одна из техник GC

ох лол, я же говорил набор ссылочек до сих пор считают, а на дворе 2012 год. Мда, но что взять с гвидо.

Декораторы, метаклассы.

руки хочешь чтобы люди сломали. Особенно с декораторами, которые косталь.

Какие баги, где непофикшены?

Баги в связывании перменных из разных скоупов, непофикшены в питоне. это очевидно.

Рубироидные embedded DSL, которые просто вызов методов?

Питон даже в вызов методов не может.

«От версии к версии» - это от python 2 к python 3, при официальном объявлении слома совместимости.
при официальном объявлении слома совместимости.

зачем так жить?

живые проекты с активным сообществом есть?

а зачем, если и так работает?

Ты издеваешься? Это Python.

Нет, я серьёзно.

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

Да, наверное. А зачем это пакетному менеджеру?

а зачем работа с git svn....

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

Я, наверное, плохо спрашиваю... Суть такова: есть у тебя переменная help, хорошая такая, инициализированная чем-то. Далее хотим её модифицировать с помощью функции func. Но вместо того, чтобы вернуть результат функции в неё, мы кладём в hepl (опечатка help) — в итоге создаётся hepl, а help неизменна. И всё это тихо, без варнингов.

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

Но вместо того, чтобы вернуть результат функции в неё, мы кладём в hepl (опечатка help) — в итоге создаётся hepl, а help неизменна. И всё это тихо, без варнингов.

Ну так и что?

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

При чем здесь Capistrano? Вы что, кушаете борщ фломастером?

Для configuration management'a есть Puppet и Chef.

Это не моя идея была. Мопед ней мой.

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

Суть такова: есть у тебя переменная help, хорошая такая, инициализированная чем-то. Далее хотим её модифицировать с помощью функции func. Но вместо того, чтобы вернуть результат функции в неё, мы кладём в hepl (опечатка help) — в итоге создаётся hepl, а help неизменна. И всё это тихо, без варнингов.

«Это нормально»

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

Парой постов по ветке выше я сросил tailgunner'а и special-k, как им живётся без var и my. От tailgunner'а ответ получил (действительно, в питоне на эту тему невесело). От special-k пытаюсь добиться ответа — вдруг там всё ок.

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

«Это нормально»

Них.. это не нормально! На работе подобные ошибки ловил раза 2 в неделю. Каждый раз тонны усилий сводились к протяжному и неприличному.

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

ты типо «тонкий троль» чтоле? Как может житься? Алсо твои все var и my, да и вообще задача твоя, та ещё фигня, потому что если таилгунер изменяет переменные то это плохо, это плохой стиль. Понимаешь, перменные должны быть иммутабельны. поэтому твоя пример help = 10; hepl = func(help) Вообще фиговый, в языках где это возможно всё должно быть в immutable. В руби можно заморозить впринципе. Но подумай над своим примером, который вроде бы должен показывать «плохоту» инициализации на лету, а на самом деле показывает твой плохой стиль.

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

твой сципу нужен только 1% остальным из-за этого на руби не писать?

Нельзя писать, что в Руби есть аналог numpy и scipy. А писать на Руби... ну, чем бы дитя не тешилось.

я же говорил набор ссылочек до сих пор считают

Нет, родной. Ты врал, что в Питоне нет GC. А оказалось - техника GC немодная.

Баги в связывании перменных из разных скоупов, непофикшены в питоне

Пример или GTFO.

живые проекты с активным сообществом есть?

а зачем, если и так работает?

Затем, чтобы было у кого спросить, когда сломается (а оно сломается).

http://projects.skewed.de/graph-tool аналог

Ты издеваешься? Это Python.

Нет, я серьёзно.

То есть в качестве аналога одной Python-программе ты привел другую Python-программу? Збс.

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

если таилгунер изменяет переменные то это плохо, это плохой стиль

Перловый my вводит новую переменную, и я тоже ничего не меняю.

перменные должны быть иммутабельны

Это идеализм. В Питоне возможно только на уровне конвенции.

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

В Ruby так нельзя, потому что в Ruby нет функций. help является объектом и мы можем посылать ему методы. Ничего не существует, кроме объектов и их методов. Простота такого подхода сравнима лишь с Lisp'ом и происходит от него. Очень красиво.

Методы, которые модифицируют наш объект help, согласно конвенции, заканчиваются восклицательным знаком. Поэтому мы всегда заметим, если мы собираемся сделать глупость с нашей мутабельной переменной.

В основном методы не модифицирует объект, поэтому часто в Ruby мы вообще не изменяем переменную, а вместо этого создаем новую.

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

У меня такие ошибки бывают раз в полгода. Это такой же крайне редкий вариант ошибки, как перепутать == и = в си, например. У меня недопечатанный == привел к серьёзному багу только ОДИН раз за последние лет 8.

Т.е. в принципе, отсутствие объявления переменных — опасная штука. Но на практике эта опасность крайне мала.

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

Кстати, я думаю, это одно из главных преимуществ Ruby над Python'ом.

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

Ну.. бывает, не смертельно, а где-то даже полезно, например

def a
@a ||= 'a' #задали значение по-умолчанию.
end
В js, куда забавнее ситуация, там переменная в глобальный скоп попадает, если забыл var поставить.

tailgunner
http://www.pip-installer.org/en/latest/requirements.html#version-control

Это прямые ссылки, а в Gemfile github будет просто источником пакетов, без указания прямой ссылки для каждой либы.

Да, наверное. А зачем это пакетному менеджеру?

Затем чтобы на твоем пипи.питон была дока.

Для начала - я ничего не понял из твоего gem-фу.

Это печально.

Но могу сказать, что библиотеки для Python я ставлю apt-get'ом.

А нафига ты споришь тогда. Это главное доказательство отстойности сего - не используется. Иди найди рубиста, который не использует gem..

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

Но если бы в Руби было как в Io два варианта присваивания:

:= 	Creates slot, assigns value
= 	Assigns value to slot if it exists, otherwise raises exception 
было бы лучше, конечно.

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

поэтому твоя пример help = 10; hepl = func(help) Вообще фиговый, в языках где это возможно всё должно быть в immutable

Два чая господину! Могу понять, что help = func(help) нужно _только_ для итераторов, для этого в руби предусмотрены кастомные итераторы с yield.

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

Но подумай над своим примером, который вроде бы должен показывать «плохоту» инициализации на лету, а на самом деле показывает твой плохой стиль.

Спасибо, я подумаю.

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

Это прямые ссылки, а в Gemfile github будет просто источником пакетов, без указания прямой ссылки для каждой либы.

gem "nokogiri", :git => "git://github.com/tenderlove/nokogiri.git"

git://github.com/tenderlove/nokogiri.git - это не прямая ссылка?

Это главное доказательство отстойности сего - не используется.

ЩИТО? Тогда и gem тоже отстой, потому что и руби-библиотеки можно поставить apt-get'ом.

Иди найди рубиста, который не использует gem..

Это демонстрирует особую «культуру» разработчиков Руби, не более.

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

Нельзя писать, что в Руби есть аналог numpy и scipy. А писать на Руби... ну, чем бы дитя не тешилось.

он есть в альфа статусе. Алсо я бы их не юзал, как и питоновские, я бы брал фортран и делал.

Пример или GTFO.

приду домой скину.

Нет, родной. Ты врал, что в Питоне нет GC

Не врал, в питоне нет ГЦ.

Затем, чтобы было у кого спросить, когда сломается (а оно сломается).

пруф или вон.

То есть в качестве аналога одной Python-программе ты привел другую Python-программу? Збс.

а что не так?

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