Обсуждение:Ruby

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Пожалуйста, добавляйте новые темы снизу

Конечно хорошо, что создатели статьи так подробно расписывают все возможности языка, но я не нашёл тут одного элемента, который нужен во всех статьях о языках программирования... Где пример программы "hello world"? Пожалуйста, добавте его по мере возможности. Dr. Fatman 15:23, 27 июня 2007 (UTC)[ответить]

Пример есть в самой статье Hello world, а здесь добавлять столь простой пример, я думаю, не целесообразно. --valodzka 09:58, 1 августа 2007 (UTC)

Формулировки[править код]

В статье путаются понятия «язык» и «интерпретатор». Например, во фразе «является полностью свободным языком программирования с возможностью копирования, модификации и распространения». Конечно, это интерпретатор (т.е. реализацию языка) можно копировать, модифицировать и распространять. — Lispnik 10:12, 30 января 2006 (UTC)[ответить]

Непонятно[править код]

 нет необходимости использовать утомительный 'self.'

где в каком языка? Майоров Александр 14:27, 6 марта 2006 (UTC)[ответить]

Очевидный наезд на Python :) Maxim Razin 20:02, 7 марта 2006 (UTC)[ответить]

Сопрограммы?[править код]

File.open('file.txt', 'w') { |file| <blablabla>

Какое отношение этот пример имеет к сопрограммам? Да и в других примерах явно путают сопрограммы и итераторы. Maxim Razin 20:01, 7 марта 2006 (UTC)[ответить]

Прямое отношение — этот пример реализуется приблизительно так:
 def open(name, mode)
   file = File.new(name, mode)
   begin
     yield(file) # вызов сопрограммы - делаем всё что хотим
   ensure        # блок срабатывающий при любом исходе
     file.close  # файл будет закрыт без вмешательства пользователя, 
                 # независимо от того будут ли исключения, ошибки ли всё гладко.
   end
 end

Valodzka 00:31, 8 марта 2006 (UTC) ferstein?[ответить]

Matz — кликуха что-ли? Разве это важная информация? Тем более не относится к языку программирования.

Это имя (ник) в новостной группе, и несёт о человеке информации в современном мире не меньше чем имя

Недостатки языка и недостатки интерпретатора[править код]

Мне кажется, статья стала бы полнее, если бы в ней появилась информация о недостатках Ruby, и проблемах, с которыми столкнётся программист, который захочет перейти на этот язык. В частности, поддержка Unicode.

Как вы считаете? Igorchubin 06:24, 17 марта 2006 (UTC)[ответить]

Несомненно. —ajvol 09:08, 17 марта 2006 (UTC)[ответить]
В принципе основные недостатки указаны в разделе реализация, юникод правда был забыт. Cейчас добавил. Valodzka 20:52, 17 марта 2006 (UTC)[ответить]
Спасибо. И ещё, есть ли недостатки у самого языка? Если да, то, наверное, имеет смысл указать их в статье. Igor Chubin 07:24, 18 марта 2006 (UTC)[ответить]
Недостатки языка (особенно относительно нового), в отличии от интерпретатора, обычно указать очень сложно. Почти все они являются довольно неаднозначными и зависят от взгляда: один может рассматривать это как минус, 2-й как плюс. Valodzka 12:22, 18 марта 2006 (UTC)[ответить]

Ещё мне кажется, что недостатки (и интерпретатора, и языка) стоит вынести в отдельный раздел. Те, кто только начинают знакомиться с языком, вероятно, сразу хотят знать о его основных недостатках, для того чтобы быть готовым к худшему. Я думаю, раздел «Недостатки языка и интерпретатора» можно добавить сразу же после раздела «Реализация» Igor Chubin 07:23, 18 марта 2006 (UTC)[ответить]

Разумная идея. Valodzka 12:22, 18 марта 2006 (UTC)[ответить]
В 2006-м решили, что это разумная идея, а уже 2013 и хоть бы кто-то что-то написал. Скольковам платят в Руби, чтобы молчали?
Вы можете помочь Википедии, дополнив статью данным разделом. --Evgeny.V.Orlov 10:28, 13 мая 2013 (UTC)[ответить]
Gogaren, уже не первый раз Вам делают замечание про подпись своих сообщений. Соблаговолите впредь подписываться, чтобы другим участникам не приходилось заниматься поисками в истории тех, кто пишет всякого рода чепуху (см. выше) --DILIN 14:58, 13 мая 2013 (UTC)[ответить]

Отсутствие информации о RAA[править код]

В статье нет ничего о RAA (Ruby Application Archive), что выглядит странно. Как вы думаете, что если добавить информацию о RAA в раздел "Библиотеки"? Igor Chubin 07:23, 18 марта 2006 (UTC)[ответить]

думаю если пара строк о RAA и/или RubyForge будет полезной. Valodzka 23:26, 18 марта 2006 (UTC)[ответить]

Возможно, нужен disambig[править код]

У меня со словом "Руби" ЯП не связывается. Скорее всего, первое значение - распространённое имя, ну и + куча продуктов (от "рубиновый"), язык - один из их множества.--83.102.202.2 10:15, 23 марта 2006 (UTC)[ответить]

Логично делать disambig когда будут статьи о других продуктах. --217.21.40.1 00:07, 24 марта 2006 (UTC)[ответить]

Руби -- объектно-ориентированный язык[править код]

Есть ли категория "Объектно-ориентированные языки", чтобы можно было добавить "Руби" в эту категорию, как её добаливи в скриптовые языки?

И ещё -- можно ли как-то подправить самое первое определение языка Руби, чтобы в нём фигурировало "объектно-ориентированный скриптовый язык", поскольку это относится к Руби как ни к какому другому. Igor Chubin 12:01, 24 марта 2006 (UTC)[ответить]

Есть такое правило в Википедии — правьте смело. Для отнесения статьи к какой-либо категории нужно в тексте статьи написать строчку вроде:
[[Категория:Языки программирования]]
--ajvol 12:38, 24 марта 2006 (UTC)[ответить]
Сделано. Уже добавил. Кто-то может подсказат, как быстро проинициализировать категорию большим количество ссылок на статьи? Igor Chubin 13:53, 24 марта 2006 (UTC)[ответить]

К вопросу о правилах (регулярных выражениях) и русском языке[править код]

Примеры вида "Раз, два, три!".scan(/[А-Яа-я]/) для выделения всех русских слов в строке будут работать не всегда. Все зависит от кодировки строки. В CP1251 и ISO-8859-5 все хорошо ибо коды русских букв идут подряд А-Яа-я. А вот для KOI8 например уже вот так Ю-Ъю-ъ, соответственно правило выглядит /[Ю-Ъю-ъ]/. Для CP866 еще интерестней символы идут подряд от А-Яа-п потом идет псевдо графика а потом уже р-я. Вот такая вот получается путаница.

Всё зависит от кривости самого софта, среды и рук человека который настраивал "локаль" во всём этом деле. Кодировка, как таковая, тут не при чём.--Busla 13:49, 23 декабря 2006 (UTC)[ответить]

Наименования языков[править код]

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

Какого, спрашивается, … половина названий языков написана кирилицей, а половина — латиницей?! Давайте хотя бы в рамках одной статьи не устраивать кашу.--Busla 14:12, 23 декабря 2006 (UTC)[ответить]

Все до кучи[править код]

1) В статье попутаны потоки и процессы - вызов fork() порождает новый процесс а не поток(это две большие разницы).


2)"Таким образом нет необходимости использовать какой-либо специальный синтаксис (например, self.имя_переменной для Python),"

А @name это что не специальный синтаксис?

3)"инновативных решений" AFAIK по русски не инновативных а инновационных + эти решения были инновационными в smalltalk и lisp но никак не Ruby(P.S. в Python так-же все это есть).

И давайте придерживаться объективности.

4) Использование self. в Python кроме лишних 4 символов по сравнению с Ruby, несет массу возможностей.
5) И никто не мешает сделать imap ~ self. в Вашем любимом редакторе и не набирать его постоянно.

6) "Имеет независимую от ОС поддержку многопоточности." Пропущено слово "невытесняющую" или "с вытеснением только из Ruby кода", это вообще то очень жесткое ограничение.

..........

K.Danilov aka koder 15:44, 10 марта 2007 (UTC)[ответить]

1) - fixed

2) - согласен

3) - в целом согласен (PS: а нигде и не утверждается что этого нет в Питоне)

Давайте объективно:

4) Это какие возможности?

5) Никто не мешает сделать всё, что угодно, мы же обсуждаем язык а не редакторы

6) ОС-независимая многопоточность является таковой по определению, добавлять это по моему лишне

Спасибо за конструктивную критику. --valodzka 23:37, 26 марта 2007 (UTC)



3)Когда я писал про питон то имел в виду что там они так же появились раньше, но уже очевидно были "слизаны" со smalltalk & lisp(поэтому я питон с ними вместе и не перечислил).
4)Полная взаимозаменяемость функций/ламбда/методов_класса/связанных_методов_объекта
6)> ОС-независимая многопоточность является таковой по определению

Не всегда(точнее все мне изв. процессорные архитектуры позволяют это реализовать, при минимальной поддержке со стороны ОС - асинхронных сигналах). Например Inferno,Plan9,etc имеют вытесняющую поддержку собственных потоков работая как "гости" под другими ОС - т.е. с позиции базовой оси Inferno - один поток(и 1 процесс), а в самой inferno живет множество premptible потоков.
> добавлять это по моему лишне
Даже если-бы они таки были не_вытесняемыми по определению то подавляющее большинство людей все равно не знало бы этого. Так, например, в доке по Ruby это очень аккуратненько описано причем сразу в стартовом абзаце.
K.Danilov aka koder 09:11, 27 марта 2007 (UTC)[ответить]

4) Может я чего-то не понимаю, но причём здесь self.? Аналогичный код на Руби:

class A
  # Метод класса
  def A.m1() puts 'm1' end
  # Метод объекта
  def m2() puts 'm2'end
end

# Анонимный метод
m3 = proc { puts 'm3' }

# "Просто" функция
def m4()  puts 'm4' end

def test(*args)
  args.each{|x| x.call }
end

a = A.new

test(A.method(:m1), a.method(:m2), m3, Object.method(:m4))


6) Ладно, добавил. --valodzka 17:31, 27 марта 2007 (UTC)


Ок. Будем считать что 4) это питоновские "ветряные мельницы", я это зачеркнул.
Спасибо за правку, я уж было думал что сюда никто не заглядывает, а поск. я не слишком хорошо знаю руби то сам править не стал. K.Danilov aka koder 09:43, 28 марта 2007 (UTC)[ответить]

Насчёт потоков[править код]

Межт я пишу не туда, но всёже. В програмировании применяются Stream - обычно байтовые потоки, размер которых может превышать размер буфера. И Thread - элемент многозадачности, который на русский язык переводится тоже как поток. В текте статьи, судя по всему, упоминаются именно Thread'ы. На мой взгляд, стоит как-то указать, что ввиду имеются именно они. Как вариант, викифицировать как поток

Last.try 17:03, 14 августа 2008 (UTC) last.try[ответить]

Типизация[править код]

Динамическая типизация - переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной. Таким образом, в различных участках программы одна и та же переменная может принимать значения разных типов.

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

Так что же такое "строгая динамическая типизация"? Возможно, должна была быть "строгая неявная", но тут она неявная динамическая. Homo Computeris 15:12, 8 декабря 2008 (UTC)[ответить]

Да ошибка была в карточке :). Конечно же у Ruby динамическая типизация, просто с явным приведением типов ("1" + 2 даст ошибку). --A.I. 17:33, 8 декабря 2008 (UTC)[ответить]
Не совсем так. Откатывать изменения не буду, потому что трактовок хватает и они могут очень сильно отличаться. Но
One definition of strongly typed involves preventing success for an operation on arguments which have the wrong type.
en:Type_system
Т.е. строгая типизация означает что именно то что написал AI "1" + 2 даст ошибку. И вообще понятия строгая(сильная)-слабая и динамическая-статическая ортогональны, например: ruby - strong,dynamic, php - weak,dynamic, c - weak,static, c++ уже скорее strong,static. -- valodzka 10:35, 9 декабря 2008 (UTC)
Ну фомально сейчас только нужно заменить «явное приведение типов» на «строгая», но думаю первая версия понятнее :) --A.I. 19:02, 9 декабря 2008 (UTC)[ответить]
О каком приведении типов вообще идет речь? И о каких собственно типах?Andriy.Tyurnikov 04:01, 1 августа 2011 (UTC)[ответить]

Но опять же тут типизация неявная без потери данных. Надо уж сразу и в таблице менять. Я на Руби не пишу, в общем-то говоря, но тут косяк %) Homo Computeris 22:08, 9 декабря 2008 (UTC)[ответить]

Сделано :) --A.I. 09:58, 10 декабря 2008 (UTC)[ответить]
Строгая думаю действительно убрать и использовать для обозначения этого «явная типизация». --A.I. 22:32, 10 декабря 2008 (UTC)[ответить]

Там теперь одновременно явное и неявное без потери. Это задумано? :) И может "строгая" из статьи стереть просто? Вроде, динамическая, а какая именно: строгая - не строгая история умалчивает, но точно с явным приведением типов.  :) Homo Computeris 22:06, 10 декабря 2008 (UTC)[ответить]

У C тоже явное и неявное без потерь. Нормально. --A.I. 10:31, 11 декабря 2008 (UTC)[ответить]

По мне, явная типизация - это статическая: при создании переменной явно определяется ее тип. Homo Computeris 23:05, 10 декабря 2008 (UTC)[ответить]

Перенесено со страницы Википедия:Сообщения об ошибках#Ruby. участником V0d01ey 01:44, 24 февраля 2011 (UTC)

Переменные Ruby содержат не сами объекты, а ссылки на них. Присваивание — это не передача значения, а копирование ссылки на объект

Это неправда. По крайней мере не всегда правда. Числа, например, копируются по значению. Достаточно ввести в irb a=5; b=a; a=10 и убедиться, что b=5

Автор сообщения: blueboar 78.108.76.54 16:51, 21 января 2011 (UTC)

Пример не совсем корректный. Мы сначала создали объект 5 и поместили ссылку на него в a, потом скопировали ссылку на него в b, потом создали объект 10 и поместили ссылку на него в a. --A.I. 09:25, 24 февраля 2011 (UTC)[ответить]
  • Если вы распишете это в полной нотации a=5;b =a; a = a + 10 вы увидите что здесь не меняется то что хранится в а, а присвается новое значение. --valodzka 13:24, 25 июля 2011 (UTC)
Fixnum, Symbol, TrueClass и FalseClass действительно особые классы, и в рубидоках говорится о передаче по значению - не верьте, копирования целочисленного значения не происходит - если передать Fixnum аргументом, и у него вызвать instance_variable_set("@referencing", true), а потом вне метода вызвать instance_variable_get("@referencing") - увидите. Но при этом указанная фраза действительно запутанна: не совсем понятно как переменная может "содержать сам объект" не содержа ссылку на него. И что такое передача значения, а не копирование ссылки? Примитивы в Руби отсутствуют


Повлиял на Python 3[править код]

Раз уж есть "повлиял на Perl 6", то почему не "повлиял на Python 3"? Ведь в питон 3 (и бэкпорты в 2.*) то и дело тянут что-то из руби. То принт стал функцией, то юникод перепилили, то splat operator (*)... Nakilon 12:02, 15 октября 2013 (UTC)[ответить]

Вроде он перешел на JavaScript? 217.118.83.203 15:57, 18 марта 2019 (UTC)[ответить]

Таблица версий[править код]

Нужна ли таблица версий как в английской версии статьи?


Таблица версий[править код]

Версия Последняя минорная версия Дата выпуска Поддержки до Поддержки исправления безопасности до
Старая версия, не поддерживается: 1.0 NA 1996-12-25[1] NA NA
Старая версия, не поддерживается: 1.8 1.8.7-p375[2] 2003-08-04[3] 2012-06[4] 2014-07-01[5]
Старая версия, не поддерживается: 1.9 1.9.3-p551[6] 2007-12-25[7] 2014-02-23[8] 2015-02-23[9]
Старая версия, не поддерживается: 2.0 2.0.0-p648[10] 2013-02-24[11] 2015-02-24[10] 2016-02-24[10]
Старая версия, не поддерживается: 2.1 2.1.10[12] 2013-12-25[13] 2016-03-30[14][15] 2017-03-31[16][17]
Старая версия, не поддерживается: 2.2 2.2.10[18] 2014-12-25[19] 2017-03-28[20] 2018-03-31[17]
Старая версия, не поддерживается: 2.3 2.3.8[21] 2015-12-25[22] 2018-06-20[23] 2019-03-31[23]
Старая версия, не поддерживается: 2.4 2.4.10[24] 2016-12-25[25] 2019-04-01[26] 2020-04-01[26]
Старая поддерживаемая версия: 2.5 2.5.8[27] 2017-12-25[28] TBA TBA
Старая поддерживаемая версия: 2.6 2.6.6[29] 2018-12-25[30] TBA TBA
Текущая версия: 2.7 2.7.2[31] 2019-12-25[32] TBA TBA
Будущая версия: 3.0 2020[33][34] TBA TBA
Легенда:
Старая версия, не поддерживается
Старая поддерживаемая версия
Текущая версия
Тестовая версия
Будущая версия
  1. The Ruby Community’s Christmas Releases. www.rubyinside.com.
  2. A Patch in Time: Securing Ruby.
  3. ruby-1.8.0 released! www.ruby-lang.org.
  4. Plans for 1.8.7. www.ruby-lang.org.
  5. EOL for Ruby 1.8.7 and 1.9.2. www.ruby-lang.org.
  6. Ruby 1.9.3-p551 Released. www.ruby-lang.org.
  7. Ruby 1.9.0 Released. www.ruby-lang.org.
  8. Support for Ruby version 1.9.3 will end on February 23, 2015. www.ruby-lang.org.
  9. Support for Ruby 1.9.3 has ended. www.ruby-lang.org.
  10. 1 2 3 Ruby 2.0.0-p648 Released. www.ruby-lang.org.
  11. Ruby 2.0.0-p0 is released. www.ruby-lang.org.
  12. Ruby 2.1.10 Released. www.ruby-lang.org.
  13. Ruby 2.1.0 is released. www.ruby-lang.org.
  14. Support plans for Ruby 2.0.0 and Ruby 2.1. www.ruby-lang.org.
  15. Ruby 2.1.9 Released. www.ruby-lang.org.
  16. ReleaseEngineering - Ruby - Ruby Issue Tracking System. bugs.ruby-lang.org.
  17. 1 2 Support of Ruby 2.1 has ended. www.ruby-lang.org.
  18. Ruby 2.2.10 Released. www.ruby-lang.org.
  19. Ruby 2.2.0 Released. www.ruby-lang.org.
  20. Ruby 2.2.7 Released. www.ruby-lang.org.
  21. Ruby 2.3.8 Released. www.ruby-lang.org.
  22. Ruby 2.3.0 Released. www.ruby-lang.org.
  23. 1 2 Support of Ruby 2.2 has ended. www.ruby-lang.org.
  24. Ruby 2.4.10 Released. Ruby Programming Language (31 марта 2020). Дата обращения: 1 апреля 2020.
  25. Ruby 2.4.0 Released. www.ruby-lang.org.
  26. 1 2 Support of Ruby 2.4 has ended. www.ruby-lang.org.
  27. Ruby 2.5.8 Released. Ruby Programming Language (31 марта 2020). Дата обращения: 1 апреля 2020.
  28. Ruby 2.5.0 Released. www.ruby-lang.org.
  29. Ruby 2.6.6 Released. Ruby Programming Language (31 марта 2020). Дата обращения: 1 апреля 2020.
  30. Ruby 2.6.0 Released. www.ruby-lang.org.
  31. Ruby 2.7.2 Released. Ruby Programming Language (2 октября 2020). Дата обращения: 2 октября 2020.
  32. Ruby 2.7.0 Released. www.ruby-lang.org.
  33. Ruby 3x3: Matz, Koichi, and Tenderlove on the future of Ruby Performance.
  34. What’s coming in Ruby 3 and Rails 5 - Mangrove. www.mangrove.com.