Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Вопрос объявления переменных в Ruby


Автор: Royan 13.1.2006, 17:18
Цитата

Цитата

не требует объявления переменных;

Хоть убейте, я не считаю это преимуществом для мало-мальски больших проектов smile


А как тебе JScript для ASP? Сейчас он вытеснен C#, но на нем было написано такое количество всего... Я уже не говорю, собственно, про JavaScript хоть текстовых редакторов на нем и не напишешь (RichEdit, который можно использовать с помощью JS не в счет, т.к. сам RichEdit - это компонент) на этом языке в дремучие 98 и 99 года создавались шедевры достойные классиков золотого века русской поэзии. Могу привести примеры, кого следует в этом убедить.

Автор: Void 13.1.2006, 17:35
Блин. Я же не сказал, что из-за этого на Ruby нельзя писать большие проекты. И естественно я знаю, что на Perl/Python/PHP/whatever, не требующих явного объявления переменные, написано море кода. Я сказал, что для крупных систем преимущество такого подхода по сравнению с явным объявлением перменных сомнительно.

Автор: Pete 14.1.2006, 22:04
Цитата(Void @ 13.1.2006, 16:48 Найти цитируемый пост)

Цитата
не требует объявления переменных;

Хоть убейте, я не считаю это преимуществом для мало-мальски больших проектов smile

Извини, если ты хочешь писать проги, скажем, для вычисления совершенных чисел, то ruby, действительно не оправдан. А вот если надо несколько раз вычислять апосториорную оценку (пришлось мне это делать, только получилось так, что сначала сдал курсач, а сегодня, наконец-то, прогу дописал!!!), то лучше ruby, пожалуй, не найти. Я же писал в первом сообщении, что ruby не для больших проектов, насыщенных и ориентированных прежде всего вычислениями, но работать на нем со сложными объектами, скажем, матрицами — одно удовольствие!
Добавлено @ 22:06
Да, еще отпишись, пожалуйста, что ты называешь большим проектом.

Автор: Void 14.1.2006, 22:28
По поводу быстрого скриптинга - согласен, хотя у меня для таких целей работает Python. Но это скорее дело привычки.
Цитата(Pete @ 15.1.2006, 00:04 Найти цитируемый пост)
но работать на нем со сложными объектами, скажем, матрицами — одно удовольствие!

Матрицы - не очень-то сложные объекты. Ознакомься как-нибудь на досуге с декларативным языком с поддержкой pattern-matching'а, чтобы понять, что такое настоящее удобство работы со сложными структурами данных. Хотя по сравнению с C++/Java, Ruby несомненно рулит в выразительности кода.
Цитата(Pete @ 15.1.2006, 00:04 Найти цитируемый пост)
Да, еще отпишись, пожалуйста, что ты называешь большим проектом.

Систему > 100K LOC, к примеру.
Я потворюсь еще раз: я не говорю, что необязательное объявление переменных делает крупные проекты на таких языках невозможными - нет. Но оно затрудняет проектирование и тестирование. Мое (и не только мое) мнение: максимум ошибок должен отлавливаться во время компиляции, а не во время выполнения. Отсутствие декларации переменных существенно снижает количество compile-time проверок.

Автор: Pete 15.1.2006, 02:00
Цитата(Void @ 14.1.2006, 22:28 Найти цитируемый пост)

pattern-matching

Ты имеешь в виду механизм сопоставления с образцом? Тогда я тебя не совсем понимаю:
1) при чем тут структура данных?
2) в ruby этот момент разработан весьма прилично (уступает, разве что, Perl).

Автор: Void 15.1.2006, 02:04
pattern-matching не на уровне регулярных выражений, а на уровне любых значений и типов. Сюда же приплюсуем рекурсивные и алгебраические (вариантные) типы.

Автор: Pete 15.1.2006, 02:08
Цитата(Void @ 14.1.2006, 22:28 Найти цитируемый пост)

Систему > 100K LOC, к примеру.
Я потворюсь еще раз: я не говорю, что необязательное объявление переменных делает крупные проекты на таких языках невозможными - нет. Но оно затрудняет проектирование и тестирование.

Да, зато прога, которая решает произвольную систему линейных уравнений, пишется минут за 20 и занимает примерно столько же строк smile (с учетом приглашений для ввода). Удобно, когда нет под рукой маткада...
Добавлено @ 02:09
Цитата(Void @ 14.1.2006, 22:28 Найти цитируемый пост)

Ознакомься как-нибудь на досуге с декларативным языком с поддержкой pattern-matching'а

Например?

Автор: Void 15.1.2006, 02:25
Цитата(Pete @ 15.1.2006, 04:08 Найти цитируемый пост)
Например?

Все ML-оиды (OCaml, SML), Haskell.

Интересно, что вернее:
где языковой флейм, там Void, или
где Void, там языковой флейм? smile

Автор: Pete 20.1.2006, 15:25
Я бы рад, да времени пока нет...

Автор: FunnyFalcon 27.3.2006, 20:04
Цитата

Систему > 100K LOC, к примеру.

То что на языке с "обязательным объявлением переменных" у вас займет 100К LOC, на Ruby вряд ли превысит 35K LOC, а скорее всего, даже <<20K LOC.
Что проще - отладить 100K с объявлением переменных или 20 - 35 K чистой логики, без всякого мало кому нужного мусора?

В инете десятки/сотни статей людей, рассказвающих о переходе с Java/C++ на Python - разница в скорости разработки и __отладке__ - не проценты, а разы. И многие описывают именно __крупные__ проекты с LOC > 50K.
Ruby - во многих случаях еще удобней (особенно для Web). Пример - RubyOnRails :-)

Но все это за счет скорости конеченого продукта. Однако - если трафик вашего не более 1000 кликов в минуту - не все ли равно? Если у вас стоит сервак 2хXeon - думаете он не справиться и с гораздо большей нагрузкой? Когда-то был VisualBasic <5.0 - тоже был интерпретируемый, все плевались, но всем хватало - не странно-ли?

Можете сказать: RubyOnRails - это единственное достойный/известный продукт на Ruby. Попробуйте - для своей задачи (веб) он в разы лучше ближайших конкурентов.

Автор: Void 27.3.2006, 20:16
Цитата(FunnyFalcon @ 27.3.2006, 22:04 Найти цитируемый пост)
То что на языке с "обязательным объявлением переменных" у вас займет 100К LOC, на Ruby вряд ли превысит 35K LOC, а скорее всего, даже <<20K LOC.
Что проще - отладить 100K с объявлением переменных или 20 - 35 K чистой логики, без всякого мало кому нужного мусора?

Хотите сказать, оверхед от объявления переменных составляет 200-300%? Некисло smile На такие заявления на моей памяти не решался ни один апологет динамических языков.

Есть немало языков, позволяющих достигать очень высокой выразительности и концентрации логики, обставляя в этом отношении действительно многословные Java и C#, и не теряя статической типобезопасности.

RoR пользуется успехом — значит Ruby нашел нишу. Веб-разработкой не занимаюсь, так что судить не могу.

Автор: FunnyFalcon 27.3.2006, 20:38
Sorry. Буду признателен, если вы посодействуете знакомству с такими языками. Не сомневаюсь - они есть, но все-таки хотелось бы поподробнее.



Автор: Void 27.3.2006, 21:06
FunnyFalcon
Из классики: MLоиды, Haskell. Где-то рядом LISP и Erlang. Впрочем, последний все-таки динамически типизирован, хотя является наиболее коммерчески успешным из перечисленных.
Из сравнительно новых: Scala, Nemerle.

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

Автор: FunnyFalcon 27.3.2006, 21:37
А чем из перечисленного вы (или ваши знакомые) пользовались? И в каких проектах?

Насчет ошибок на стадии компиляции: каких ошибок у вас больше - связанных с типизацией или с логикой?

Я не опытный программист. Но те ошибки типизации, что у меня были, больше были связаны с ограничением языка на статическую типизацию, чем с логическими ошибками (Правда это был С++). А логические ошибки и в статически типизированных языках вохможны и компилятором не отлавливаются.

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

Автор: Cr@$h 24.8.2006, 17:09

M
Cr@$h
Тема выделена из разговора об особенностях Ruby.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)