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)

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

я же сказал, что если есть имутабельность нужно пользоваться

Нужно. Но непонятно, почему ты сказал об этом в разговоре о Питоне и Руби.

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

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

Не уходи от темы. Мы сейчас обсуждаем жизнеспособность капистрано. Как интегрировать капистрано и cf-engine?

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

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

source "http://gems.github.com"

Так это делается.
Ну ты трололо в упор не видишь отличий между отстойным requerments.txt и Gemfile, таких вот например

gem "weakling",   :platforms => :jruby
gem "ruby-debug", :platforms => :mri_18
gem "nokogiri",   :platforms => [:mri_18, :jruby]
таких
git "git://github.com/rails/rails.git" do
  gem "activesupport"
  gem "actionpack"
end
Gemfile - это красивая мощная проработанная штука. Твои пип жалкая пародия на это (как будто а попыхах клепали). Аналогов bundler так же нет, это все с большой натяжкой аналоги, причем я не думаю, что ситуация в корне поменяется даже через 3-5 лет. Это является преградой для развития языка. Так что все это печально.

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

Да ты у нас блондинко.

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

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

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

gem «weakling», :platforms => :jruby
gem «ruby-debug», :platforms => :mri_18
gem «nokogiri», :platforms => [:mri_18, :jruby]

И с какой радости я должен понимать всё это? Напомню - я не пользуюсь руби.

Да ты у нас блондинко.

Слив защитан.

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

но они же есть, если ты говоришь, что время много тратишь на переписывание таких-то ляпов.

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

Напомню - я не пользуюсь руби.

а мнение имеешь.

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

И с какой радости я должен понимать всё это? Напомню - я не пользуюсь руби.

Если вы не знаете Ruby, на чем основана ваша критика?

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

Если вы не знаете Ruby, на чем основана ваша критика?

Почему «не знаете Руби», если речь о gem? Собственно Руби я немного знаю. И «критика» чего? Речь зашла о том, что в Руби полно фишек, аналогов которых нигде нет, но почему-то разговор сосредоточился на gem и bundler. Потом special-k предложил сравнить пкетные менеджеры, потом отказался, и я начал сравнивать их сам. Сравниваю, как умею - извини, если что не так.

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

ты говоришь, что время много тратишь на переписывание таких-то ляпов.

Вроде в этом треде я ничего не говорил о затратах времени? А «ляпы» - они не из-за иммутабельности, а из-за динамической типизации.

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

Если вы не знаете Ruby, на чем основана ваша критика?

anonymous
а мнение имеешь.

Не.. это я критикую их пип, а это его уловка - косить под блондинку, я хз зачем он вообще начал спорить..

special-k ★★★
()

Не холивара ради: пишу на питоне обертку к сишной либе, которая создает внутри себя кучу тредов и периодически дергает колбеки из них. В питоне я из расширения тупо лочу GIL, отрабатывает мой код, управление возвращается основному потоку, все работает как часы. Вопрос: можно ли на руби замутить такую цепочку (код на руби -> код на си -> ... -> callback на си -> callback на руби)? Мне право очень бы хотелось.

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

Ляпы у тебя из-за отсутствиея тестирования и рук.

http://habrahabr.ru/post/141640/

Мои юнит-тесты позволяли держать мои код строгим и не отклоняющимся от правил. Мне просто не была нужна статическая типизация, от которой я зависел так много лет.
Я также осознал, что гибкость динамически типизированных языков делает написание кода значительно легче. Модули легче писать и легче изменить. Не существует вопросов, связанных со сборкой. Жизнь в мире динамической типизации фундаментально проще.

Лично у меня не возникает ошибок даже без юнит тестирования, по мне так достаточно BDD.. хотя я иногда с помощью raise проверяю аргументы.. и не только..

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

Я всем говорю, что лично у меня не возникает ошибок даже без юнит тестирования

fixed

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

Хочется взять и изменить!

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

НЕНАВИСТЬ! Почему до сих пор не напишут автоупаковку gem'ов в deb'ы? Нахрена мне в одной ОС разводить бардак двумя системами установки пакетов?

Camel ★★★★★
()

The future is today!

Надеюсь этих несколько патчей поддадут скорости загрузке рельсов. И да, ZOMG TEH RUBY!

shybovycha
()

Б-же мой, да здесь ребята с одноглазым змеем уже прожгли под собой всю мебель! :)

eveel ★★
()
Ответ на: Хочется взять и изменить! от Camel

deb
Нахрена мне в одной ОС разводить бардак двумя системами установки пакетов?

/0 Debian-based лучше всего предназначены как раз для разведения бардака.

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

Сравниваю, как умею - извини, если что не так.

Все в порядке. Любая критика — это лучше, чем ее отсутствие. Возможно, благодаря вам, я больше узнаю о Python'е и Ruby.

То ли у меня были галлюцинации, то ли с первой страницы самым загадочным образом пропали ваши сообщения про «ненужно».

Почему «не знаете Руби», если речь о gem? Собственно Руби я немного знаю

Тогда неясно, что именно вызвало затруднения в понимании примера special-k. Мне кажется, зная как выглядят стандартные типы данных в Ruby, его можно было бы понять.

Речь зашла о том, что в Руби полно фишек, аналогов которых нигде нет, но почему-то разговор сосредоточился на gem и bundler.

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

Все ли типы данных в Python являются объектами? Можно ли в Python делать monkey patching так, чтобы не пачкать глобальный контекст?

Например, в Ruby 2.0 можно:

module RefinedString
  refine String do
    def some_method
      puts "I'm a refined string!"
    end
  end
end

class User
  using RefinedString

  def to_s
    ''.some_method #=> "I'm a refined string!"
  end
end

''.some_method #=> NoMethodError: undefined method `some_method' for "":String

Если что-то неясно в ruby-коде, буду рад объяснить, но, пожалуйста, в этом случае уточните, какие именно моменты неясны.

Anatolik ★★
()

Йогурт-тред. Пойду почитаю :}

Deleted
()
Ответ на: Хочется взять и изменить! от Camel

Потому что система пакетов ruby более совершенна. В дистрибутиве мэнтейнеры следят за версиями пакетов, и для дистрибутива верна только одна версия пакета. В руби же ты можешь использовать разные версии пакетов, bundler подберет тебе неконфликтное сочетание. В каждом отдельном приложении может быть свой перечень библиотек. Нафига завязываться на deb? bundle install как-то проще в 1000000 раз.

Кстати тут трепались. Если бы мне нужна была математика, я бы, наверно, попробовал http://rubygems.org/gems/rinruby

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

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

переменные

иммутабельны

/0

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

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

Ставлю только из пакетов, гемами не пользуюсь. Если бы мне хотелось компилять у меня была бы гента :}

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

загадочным образом пропали ваши сообщения про «ненужно».

Модеры бдят.

что именно вызвало затруднения в понимании примера special-k

«weakling», «ruby_debug», :jruby - всё это входит в стандарт языка?

Все ли типы данных в Python являются объектами?

Да.

Можно ли в Python делать monkey patching так, чтобы не пачкать глобальный контекст?

Смотря что называть «пачканием глобального контекста». Например:

from m import C as C_pristine

# monkeypatch создает производный класс и возвращает его
C = monkeypatch(C_pristine)

c = C()

здесь запачкан глобальный или локальный контекст?

Если что-то неясно в ruby-коде, буду рад объяснить

using RefinedString

''.some_method

refine дает что-нибудь, кроме изменения обработки литералов? Например, что выведет:

using RefinedString

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

Да хоть десять, я хочу просто «Ап! и в дамках». Пакетный менеджер мне это даёт. Впрочем, на рельсах я не пишу (где это в первую очередь и надо, т.к. апдейты, апдейты, ни дня без апдейтов), так что у меня в гемах необходимости нет :}

Deleted
()

К сожалению, до сих пор нерешенные вопрос с многопоточностью. Несмотря на то, что начиная с 1.9 используются физические потоки, многие встроенные и сторонние библиотеки об этом не знают. Да и GIL поднимается намного реже, нежели в Python. Вот недавний пример, сам делал:

http://www.youtube.com/watch?v=GpRUpwzuyOw

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

Скриптоту всякую. Обычно для автоматизации того, что делать руками по 100500 раз не хочется.

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

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

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

>Не нужно
>скоро выйдет Tcl 8.6

Оно считалось живым в эпоху динозавров и уже тогда попахивало :}

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

>bundler подберет тебе неконфликтное сочетание

На самом деле™ в гемах это такая необходимость, потому что на обратную совместимость всем пофиг и ломают всё даже в минорных релизах. Когда это красноглазие с разработчиков спадает, то deb вполне работает :}

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

Красноглазие - некрасноглазие, проблема решена, код можно писать.

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

Собственно это и обосновано. Для дистрибутива нужно подобрать оч. много библиотек. А для одного руби приложения не так уж и много.. 10-40, что вполне приемлемо, так зачем же волочиться за ОС, когда можно писать код)

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

refine дает что-нибудь, кроме изменения обработки литералов? Например, что выведет:

String(") и " — одно и то же. Просто синтаксический сахар для String.send(:new), поэтому результат будет одинаков. Внутри refine мы получаем другую версию String.

здесь запачкан глобальный или локальный контекст?

Что-то я не вполне понял код. Мне нужно это сделать, прежде чем я смогу ответить на вопрос.

Можете дополнить пример изменением нескольких свойств производного объекта? Также, будем здорово, если вы будете патчить Python'овскую строку, чтобы мне было легче проводить аналогии.

Еще вопрос: в Ruby методы, которым мы не указываем принадлежность какому-нибудь объекту, становятся приватными инстанс методами класса Object. Если мы определим в Python'e метод на самом верху, то где он окажется? Мне кажется, я пока еще далек от понимая системы namespace'ов Python'a.

«weakling», «ruby_debug», :jruby - всё это входит в стандарт языка?

Неужели вы не догадываетесь, что означают здесь «ruby_debug», :jruby? В любом случае, думаю, если бы вы сразу явно указали, что неясно, то special-k любезно попытался бы объяснить.

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

Конечно не видишь ты просто не образован.
не образован

Ну-ну.

Адекватных рубистов поздравляю. А что, именованных аргументов не было что ли? В методах. А в Proc'ах были получается?

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

Вот я и пишу, не компилируя :) Просто в вебе постоянно нужно всё новое и ещё вчера. Посмотришь и думаешь, как же оно позавчера то работало… (^ ^)

Deleted
()

Когда хотел учить другой язык помимо perl, выбирал между python и ruby, почему-то тогда выбрал python, не помню чем не устроил ruby, наверное стоит его попробовать, а то боюсь, что придётся переписывать ряд программок на новый py3

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

Для большинства руби-проектов - самое оно.

По сеньке и шапка.

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

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

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

@#$% кто Вас/их туда пустит?? К боевой-то базе?!

Как дети, ё-моё.

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

Что-то я не вполне понял код
будем здорово, если вы будете патчить Python'овскую строку

>>> import sys
>>> newt = type("foo", (str,), {})
>>> newt.to_s = lambda self: sys.stdout.write("I'm " + self + '\n')
>>> v = newt("x")
>>> v.to_s()
I'm x
>>> 

Использовать newt вместо str локально возможно как минимум в любом методе/функции, но это потребует трюков в духе Alv.

Если мы определим в Python'e метод на самом верху, то где он окажется?

На каком верху? Подозреваю, что ты говоришь о функциях, но они могут быть вложенными.

Неужели вы не догадываетесь, что означают здесь «ruby_debug», :jruby?

Только догадываюсь, а точного значения не знаю. А что такое «weakling» - даже и не догадываюсь.

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

По сеньке и шапка.

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

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