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)

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

И всё это тихо, без варнингов.

Они (рубиновые питонисты) рекомендуют на это обвешивать всё юниттестами. Типа, если оно лает как собака, так это собака и есть. И ничего, что у собаки - глаза на стебельках, кого это волнует.

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

как оценивал? бенчмарки можно? в руби несколько раз ГЦ поменяли, а в питоне какие-то спиские.

Имхо, если GC несколько раз меняют, то это говорит о том, что текущий чем-то не устраивает, а не о том, что теперь-то там наверняка торт. Кстати, первый раз слышу про бенчмарки сборщиков мусора. Такими письками тут еще не мерялись.

ну круто, чо ещё сказать. В руби тоже есть такие, можно сделать свои обёртки вокруг сишных, что ты этим хотел сказать?

Кругом одни джедаи. «Можно сделать обертки». Наверное, все с радостью их пишут. Ведь для этого и выбирают высокоуровневые ЯП - чтобы при первой возможности радостно зарюхаться в возню с нативным си-кодом.

Метапрограмминг, dsl, скоупы которые работают, понятное поведение, а не как в питоне, которое меняется с каждым патчем, миксины

Метапрограмминг есть. dsl - синтаксис не такой гибкий, с этим хуже. скоупы - что за вундервафля? «понятное поведение, а не как в питоне, которое меняется с каждым патчем» - смело, дерзко и, конечно, с пруфами сделанное заявление. миксины - множественное наследование. Что? Нахрен оно нужно? А миксины, наверное, в каждом языке есть/нужны, да?

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

Чувак, руби 1.9 это пре-2.0, емнип, подготовительная версия. А вот работают ли все программы, написанные на 1.8, на 1.9 без переписывания? Тоже всего лишь одна циферка минорного обновления ведь :), в отличие от питоновского скачка 2->3.

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

Хех, сделать-то можно :) Вопрос в том, кто делает.

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

gem install rails просто в рельсах адекватно все расписано, про базу, про установку руби и т.д.

у джагно - нет.

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

Поздравляю, бро! :)
бро

Богомерзкое Раболепное Отродье?

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

ruby это dsl жопа

Особенно весело этот dsl дебажить. Спасибо наелись.

«понятное поведение» в ruby? Ты серьёзно?

irb(main):001:0> 'a,b,c'.split ',' [«a», «b», «c»] irb(main):002:0> 'a,b,c,'.split ',' [«a», «b», «c»] irb(main):003:0> ',a,b,c'.split ',' ["", «a», «b», «c»]

irb(main):007:0* ar = [1,2,3] [1, 2, 3] irb(main):008:0> ar[2..2] [3] irb(main):009:0> ar[3..3] [] irb(main):010:0> ar[4..4] nil

irb(main):013:0* l = -> { 'ruby это dsl жопа' } #<Proc:0x0000000194a128@(irb):13 (lambda)> irb(main):014:0> l.call «ruby это dsl жопа» irb(main):015:0> l.() «ruby это dsl жопа» irb(main):016:0> l[] «ruby это dsl жопа» irb(main):017:0> l() NoMethodError: undefined method `l' for main:Object from (irb):18 from /home/victor/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'

Комьюнити которое поощряет monkey patching должно быть уничтожено. Даже яваскриптеры поняли что monkey patching это зло, а хипстеры все никак не допрут.

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

ruby это dsl жопа

Особенно весело этот dsl дебажить. Спасибо наелись.

«понятное поведение» в ruby? Ты серьёзно?

irb(main):001:0> 'a,b,c'.split ',' 
["a", "b", "c"] 

irb(main):002:0> 'a,b,c,'.split ',' 
["a", "b", "c"] 

irb(main):003:0> ',a,b,c'.split ',' 
["", "a", "b", "c"]
irb(main):007:0* ar = [1,2,3] 
[1, 2, 3] 

irb(main):008:0> ar[2..2]
[3]

irb(main):009:0> ar[3..3] 
[] 

irb(main):010:0> ar[4..4] 
nil
irb(main):013:0* l = -> { 'ruby это dsl жопа' } 
#<Proc:0x0000000194a128@(irb):13 (lambda)> 

irb(main):014:0> l.call 
"ruby это dsl жопа"

irb(main):015:0> l.() 

"ruby это dsl жопа" 
irb(main):016:0> l[] 

"ruby это dsl жопа" 
irb(main):017:0> l() 
NoMethodError: undefined method `l' for main:Object from (irb):18 from /home/victor/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'

Комьюнити которое поощряет monkey patching должно быть уничтожено. Даже яваскриптеры поняли что monkey patching это зло, а хипстеры все никак не допрут.

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

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

любые такие системы мониторинга. а что, на руби не пишут систем мониторинга?

val-amart ★★★★★
()
Ответ на: комментарий от yoghurt

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

По моей щеке потекла слеза умиления

это прекрасно!

val-amart ★★★★★
()

В руби самый идиотский синтаксис, какой я тольбко видел.

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

Приплести жабу в обсуждение руби вот это вот толсто :}

Deleted
()

Ruby vs Python

Согласно всем рейтингам языков программирования Ruby уступает Python. У Ruby своя ниша и не надо ему соревноваться с Python , Python в мире *nix нельзя заменить Ruby и этим все сказано. А дальше вы можете восхищаться Ruby, писать кипятком - это ничего не изменит.

yanka ★★
()

Ура! Желаю успешного развития и большого будущего этому прекрасному языку! Пойду напьюсь от радости

Alve ★★★★★
()
Ответ на: Ruby vs Python от yanka

Python в мире *nix нельзя заменить Ruby

А жопу нельзя заменить пальцем. Разные языки, разное применение. Си в мире юникс нельзя заменить фортраном, можете восхищатся фортраном и писать кипятком это ничего не изменит, олололо!

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

Что-то кроме веба руби особенно нигде не видно. Да и вебе только и слышно как нагруженные проекты сваливают с рельс.

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

Спи спокойно, мой маленький принц.

anonymous
()
Ответ на: ruby это dsl жопа от anonymous

а что вас тут не устраивает?
1. в пайтоне сплит также работает ',1,2,3'.split(',')
2. ну как бы массивы с 0 сщитаются.
3. опять же все нормально.

st4l1k ★★
()

Ruby это исключительно web

Python же успешно применяется в системном администрировании, вебе, на нем пишется большое количество десктопных приложений . Любой *nix дистрибутив изначально поставляется с python. Python везде и никакой Ruby это не изменит

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

ой да ну chef, puppet уже забыли. Metasploit который появился на ruby до того как массы про руби узнали. vagrant тоже идет лесом. Если не знаете не говорите. Эм нагруженные прокты не сваливают с рельс, у твиттера морда на рельсах.

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

я не говорю, что py3 плох, я говорю о совместимости и она пока не 100%, а следовательно придется поработать над портированием старых прог.

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

Спасибо, так яснее. Вот аналог этого кода на Ruby:

# Не кажется ли вам, что код на Ruby действительно более прост?
class NewString < String
  def to_s
    puts "I'm #{self}"
  end
end
 
v = NewString.new 'x'
v.to_s # => "I'm x"

# Вверху -- вот здесь. Не знаю, как сказать правильнее.
def top_method
  'I am private instance method of the Object class, because I am defined outside any class or module. How it works in Python?'
end

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

Однако, это не совсем то, что делают Refinements. С помощью них, как было показано ранее, мы можем иметь различные версии String в разных модулях. При этом способы инициализации строки остаются прежними. И все это без трюков.

Кроме того, насколько я понял, функция type ограничивает нас каким-нибудь стандартным типом данных.

Тем не менее, если этого можно как-то достигнуть в Python'e(даже с трюками), было бы интересно увидеть.

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

Python 3 отличный язык, просто с ruby местами разные и каждый выбирает что ему по душе.

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

ну с Win32api как обычно глючит, плюс с доками бяда.

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

Что-то кроме веба руби особенно нигде не видно. Да и вебе только и слышно как нагруженные проекты сваливают с рельс.

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

Всегда поражала обсведомлённость лоровского анонимуса.

Подкину тебе ещё инфы. На node.js нормальные люди не перейдут никогда, ибо сраноубогий говноязык js не нужен в принципе, человек однажды отведавший нормального ООП в руби в js будет плеваться и матерится, а потом бросит эту глупую затею.

«Нагруженные проекты» громко сваливающие с рельс - это те ребята, которые «перешли на быстрый пхп, т.к. не нашли голодного студента писать на рельсах»? Ага, знаем, это обычно рашкинские конторки, которым пофиг на всё, лишь бы быстро писать и дешёво.

А сообщество рельс загнётся ещё не скоро, что-то годы идут, а оно только крепнет и увеличивается. А где же наши джангисты? Ах да, я забыл, они там, в сторонке, молятся на «Питон быстрый, питон скорость!».))))

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

1. Питон так не работает. вот руби код

irb(main):001:0> 'a,b,c'.split ',' 
["a", "b", "c"] 

irb(main):002:0> 'a,b,c,'.split ',' 
["a", "b", "c"] # где '' ???

irb(main):003:0> ',a,b,c'.split ',' 
["", "a", "b", "c"] # а тут '' есть

вот питон

In [1]: 'a,b,c'.split(',')
Out[1]: ['a', 'b', 'c']

In [2]: 'a,b,c,'.split(',')
Out[2]: ['a', 'b', 'c', ''] # здесь все однообразно (есть '')

In [3]: ',a,b,c'.split(',')
Out[3]: ['', 'a', 'b', 'c'] # здесь все однообразно (есть '')

2. Ты слепой?

irb(main):007:0* ar = [1,2,3] 
[1, 2, 3] 

irb(main):008:0> ar[2..2]
[3]

irb(main):009:0> ar[3..3] 
[] [b]мы за границей массива[/b]

irb(main):010:0> ar[4..4] 
nil # тоже за границей массива но результат не такой как раньше (nil != [])

3. Т.е. делать вызов с помощью () it's too mainstream?

anonymous
()
Ответ на: Ruby это исключительно web от yanka

Python же успешно применяется в системном администрировании, вебе, на нем пишется большое количество десктопных приложений . Любой *nix дистрибутив изначально поставляется с python. Python везде и никакой Ruby это не изменит

Да ты что?

Отмотаем машину времени на несколько лет назад и внезапно:

Perl же успешно применяется в системном администрировании, вебе, на нем пишется большое количество приложений . Любой *nix дистрибутив изначально поставляется с Perl. Perl везде и никакой Python это не изменит

Ага...

Alve ★★★★★
()

для посланца из криоотсека №1.8.7, когда релиз 2.0 будет?

iMp ★★★
()
Ответ на: ruby это dsl жопа от anonymous

Спасибо вам за жтот пост. Раньше я думал, что Руби язык гораздо более строгий, чем Питон, где есть разница между (a) и (a,). Теперь мне стало ясно, что даже Python 2.x сравнительно с Руби уже конфетка. Не говоря о Py3k.

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

Только не надо лелеять надежду, что Ruby станет заменой Python. «Японский никогда не станет английским», беда Ruby в его синтаксисе, он «неочевиден» и слишком много магии и это отпугивает массу людей.

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

Подкину тебе ещё инфы. Кроме javascript на ноде есть coffeescript который смесь рубей, питона и js.

«Нагруженные проекты» это twitter и linkedin. А php ты вспомнил потому что butthurt?

Не знаю где джангисты, но питонисты где-то здесь http://www.python.org/about/success/

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

В пайтоне ты нихрена не присваиваешь - ты связываешь имя-ключ в текущем (локальном) пространстве имен (представляемом словарем-хэшем-ассоциативным массивом, кому какое определение знакомо) с каким-то объектом.

p = print
аналогично
locals()['p'] = globals()['print']
, где locals - встроенная функция, возвращающая ссылку (угадайте, почему ссылку? - потому что это тоже ключ, но уже в глобальном ( globals() ) пространстве имен, где находятся все встроенные функции и классы исключений, и функция print в том числе) на текущее (локальное) пространство имен И пайтону до задницы поэтому, что за объект ты связываешь с ключом 'p'. И это надо понимать, если на нем пишешь, и только.

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

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

Не помню уже…

>ни на одной комфе он не спалился
Возможно он просто не воинственный. Меня как-то это никогда сильно не заботило :)

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

Пойду напьюсь от радости
Alve ** (02.11.2012 21:54:05)

А жопу нельзя заменить пальцем. Разные языки, разное применение. Си в мире юникс нельзя заменить фортраном, можете восхищатся фортраном и писать кипятком это ничего не изменит, олололо!
Alve ** (02.11.2012 21:55:35)

за пол-минуты успел напиться - ох, ловкач ;)

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

Однако, это не совсем то, что делают Refinements. С помощью них, как было показано ранее, мы можем иметь различные версии String в разных модулях

Спомощью моего однострочника - тоже. Разница в том, что литералы будут обрабатываться встроенным str.

При этом способы инициализации строки остаются прежними.

Можно сценарий, в котором нужен monkeypatching именно встроенного типа? Потому что всё остальное и у меня патчится.

Кроме того, насколько я понял, функция type ограничивает нас каким-нибудь стандартным типом данных.

Нет.

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

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

Порядочные FreeBSD-шники устанавливают gem из портов.

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

здаюсь по всем позициям нелогичное поведение

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