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)

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

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

Очевидные вещи для кого? Для меня? Для какого-то другого?

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

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

У вас ЧСВ зашкаливает

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

Ты не понял чтоли.. ну.. тогда популярно: При написании стринга

#например так
'a'
Инициализируется новый объект. Значение в хеше можно получить только по объекту ключа. По какому либо другому объекту нельзя, поэтому для стрингов сделали исключение, потому что вот такое поведение
h = {}
h['a'] = 1
h['a'] #nil
удивляло бы куда больше. Естественно, что сам объект уже не важен.

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

это хотябы в документации описано. с [NaN] == [NaN] вообще сказал что в стандарт не опредиляет поведение.

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

Значение в хеше можно получить только по объекту ключа.

Значения получаются по хеш сумме ключа. Разные объекты с одинаковой хеш суммой дадут одно и тоже значение.

irb(main):001:0> ar_key1 = [:ar, :key]
[:ar, :key]

irb(main):002:0> ar_key2 = [:ar, :key]
[:ar, :key]

irb(main):003:0> 
irb(main):004:0* h = {}
{}

irb(main):005:0> h[ar_key1] = :value
:value

irb(main):006:0> h[ar_key1] 
:value

irb(main):007:0> h[ar_key2] 
:value

irb(main):008:0> ar_key1.object_id == ar_key2.object_id
false

irb(main):009:0> ar_key1.hash == ar_key2.hash
true
Такого поведения не было бы, потому что опять же значения получаются по хеш суме ключа.
h = {}
h['a'] = 1
h['a'] #nil

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

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

Шаблонное мнение типичного школоло из палаты мер и весом.

anonymous
()
Ответ на: комментарий от anonymous
irb(main):001:0> n=0.0/0
=> NaN
irb(main):002:0> n == n
=> false                    #Что ?????
irb(main):003:0> [n] == [n]
=> true                    #Дальше идут сплошные маты.
irb(main):004:0> n.eql? n
=> false
irb(main):005:0> n.equal? n
=> true
# а теперь снормальным числом.
irb(main):010:0> a=1
=> 1
irb(main):011:0> a.eql? a
=> true
irb(main):012:0> a.equal? a
=> true
irb(main):013:0> b=1
=> 1
irb(main):014:0> a.eql? b
=> true
irb(main):015:0> a.equal? b
=> true

Matz сказал что это нормально и его устраивает

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

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

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

Меня бесит не столько язык руби сколько бесят программисты на нём.

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

но есть исключение при вставке строковых ключей в Hash

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

Далекие от математики люди иногда меня спрашивают: «Раз вы знаете математику, ответьте на вопрос, который меня всегда занимал: сколько будет бесконечность разделить на бесконечность?» На это я могу ответить только: «Вы произносите слова, которые не имеют никакого смысла. Это не математическая фраза. Вы говорите о „бесконечности“ так, как если бы это было число. Но это не число. С таким же успехом вы могли бы спросить „Сколько будет истина разделить на красоту?“ Я ничего не могу по этому поводу сказать. Я умею делить только числа, а „бесконечность“, „истина“, „красота“ — это не числа».
Джон Дербишир

NaN == NaN привносит немного логики из (относительно) реального мира. Сравнение несравнимых вещей. Это исключение, ведь в руби все объект, но сколько же нужно этих исключений. Думаю касаемо NaN одного достаточно, не делать же весь массив не сравниваемым..

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

Matz сказал что это нормально и его устраивает

Это не просто нормально, но еще и логично и предсказуемо, если вы понимаете, где определены методы, которые вы вызываете; и для чего они предназначены.

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

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

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

а что паппеты? configuration management, кстати, очень симптоматичная сфера применения руби и практически полного отсутствия питона (да, я знаю о bcfg2, о его активной разработке и богатом функционале). или дело в том, что все, кто мог подобное написать, ушли в ruby, или в том, что на том же питоне такие вещи писать почему-то проблематичнее.

а как же salt? отличная штука кстати. после паппета, капистрано и чефа мне нравиться.

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

да вроде всё с ней ок (если по спекам смотреть), кроме того, что ещё год назад про неё никто не знал. ну, и как следствие современное многообразие хоть сколько-то широко используемых конфигурационных систем сейчас — это chef, puppet, cfengine.

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

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

Если я буду постоянно думать как там на си внутри, нафига мне руби нужен?

Разве вы постоянно делите на ноль?

на jruby все пучком

А вот это мне уже сильно не нравится(то, что поведение разное). Разве это не должно отслеживаться посредством RubySpec? Надо будет изучить этот момент подробней.

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

Matz сказал что в стандарте не указано как должно, так что по желанию раз рабов.
Вообще чем лучше NaN эксепшена?

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

Matz сказал что в стандарте не указано как должно, так что по желанию раз рабов.

Можно линк?

Вообще чем лучше NaN эксепшена?

Потому что все ок — #/ Float может получить Fixnum.

NaN нужно. Например:

divident = 4.2
divisor  = rand(3)

important_value = divident / divisor

do_something if important_value.nan? 
Anatolik ★★
()
Ответ на: комментарий от st4l1k

Получается немного долше

Пожалуйста, 4 пробела — для Python'a, 2 — для Ruby. Давайте, если мы что-то делаем, делать это красиво.

Дело в том, что использовать exсeptions там, где нет ошибки — моветон.

http://bugs.ruby-lang.org/issues/1720 Переводчиком пользуйся, последний пост от matz.

Спасибо. Черт, давно хочу осилить японский на уровне чтения технической информации, но пока не сложилось.

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

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

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

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

Я говорю только шаблонами, мои шаблоны верны всегда на 100%.

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

Что-то мне после вашего ознакомления с Руби совсем расхотелось с ним иметь дело. Как-то там всё страшно. Я не думал, что такое возможно. Кстати, они inf и nan различают? В Питоне это суть три разные вещи: inf, -inf и nan.

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

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

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

Надеюсь не ввел никого в заблуждение.

h = {}
h['a'] = 1
h['a'] #nil
В Ruby такого нет и все работает как надо.

Вот сообщение от предыдущего оратора на которое я отвечал:

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

h = {}
h['a'] = 1
h['a'] #nil
удивляло бы куда больше. Естественно, что сам объект уже не важен.

Мой ответ следует читать так:
Если бы вставку строковых ключей не делали особым случаем, то проблема

h = {}
h['a'] = 1
h['a'] #nil
все равно не возникла бы, потому что значения из хеш словаря достаются по хеш сумме ключа. Разные объекты с одинаковой хеш суммой дадут одно и тоже значение из хеш словаря.

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

а в питоне также если NaN в массиве то True если просто переменными то False. Да различают.

In [28]: [float('nan')] == [float('nan')]
Out[28]: False
anonymous
()
Ответ на: комментарий от Virtuos86

А он по-английски писать не умеет? Зачем создавать языковой барьер

дак ведь японская националистическая империя

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

In [28]: [float('nan')] == [float('nan')]
Out[28]: False

Вообще-то, NaN в Python это None

Python 2.7.2+ (default, Jul 20 2012, 22:12:53) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> [None] == [None]
True
>>> 

* float('nan') это инстанс float? — я, мягко говоря, удивлен, почему это не вызывает эксепшена, О_о *

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

Вообще-то, NaN в Python это None

?! NaN — это «Not a Number», «не число». None — это просто «ничего». В ruby тоже

[6] pry(main)> nil == nil
=> true

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

копипаста с лурка прекрасно объясняет почему. Для тру лоровцев:

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

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

Тебе будут платить деньги, раза в 3 меньшие чем местному специалисту на этой же должности, а уж о получении гражданства речь может пойти только лет через 30 твоего непрерывного труда на корпорацию, с 7 утра и до 11 вечера, с одним выходным в неделю и дай Б-же 7-дневным отпуском раз в 2 года. Люди на улице, если тебе придется к ним обратиться, будут отводить взгляд и бормотать, что они тебя плохо понимают, даже если ты овладеешь японским в совершенстве, лучше, чем сейчас владеешь русским. То же и в магазинах. А о знакомствах ближе, чем деловых, можешь даже и не мечтать, не то что о няшной японочке. Зоофилия, знаешь ли, ни у одной нации не в почете. Впрочем, если ты действительно высококвалифицированный, ведущий в своей области специалист и при этом - хикки эпического левела, которому не только не нужно, но и противно абсолютно любое человеческое общество, тебе может понравиться. Вот только я не понимаю, зачем ради сидения в 4 стенах ехать на другой конец мира, если этим же при заявленных тобой данных можно с успехом заниматься и тут.

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

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

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

Ты бы ещё к анимешникам обратился. Тут таких любителей в разы больше :-).

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

хикки эпического левела

Это вы в тему Ричарда Хикки вспомнили, предлягаете на Clojure свичнутся.

А зачем такая сущность, как Nan в таком случае?

Как я понял из вики для научных вычислений она должна быть. А вот почему В массиве возвращает True это хз.

irb(main):006:0> [a]==[a]
=> true
irb(main):007:0> a.equal? a
=> true

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

Батенька,

[a]==[a]

здесь, естественно, что `a` - один и тот же объект, потому и True.

А здесь создаются два разных экземпляра, которые не идентичны

[float('nan')] == [float('nan')]

потому и False. В то же время

>>> [float(1)] == [float(1)]
True

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

И их как-то особо использовать не рекомендуется.

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

А зачем такая сущность, как Nan в таком случае?

При «сломанных» вычислениях получаем nan. Дальнейшие вычисления с nan дают nan. В numpy с этим можно встретиться при желании.

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