Посоветуйте, пожалуйста, Ruby vs Python для тех, кто очень любит LISP

Я разработчик на C++, постепенно увлекаюсь веб-разработкой. Мне очень нравится LISP, но не нравится AllegroCL и веб-фреймворки, доступные для LISP. Я ищу больше свободы и возможности делать крутые хаки на языковом уровне. Я не считаю табуляторы преступлением против природы.

Какой из них ближе к LISP: Python или Ruby?

Кажется, я не могу выбирать между Python и Ruby: они кажутся очень похожими, но, очевидно, Ruby более функциональный и объектно-ориентированный, что хорошо, в то время как Python больше похож на Perl: простой язык сценариев. У меня правильное впечатление?

PS - Это может показаться приманкой для пламени, но на самом деле это не так, я просто стараюсь не сходить с ума от ОКР по поводу перехода с RoR на Python / Django и обратно.

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

user3850 01.01.2009 21:18

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

dreftymac 01.01.2009 22:08

Выберите оба варианта - обучение - это не игра с нулевой суммой. Изучение Python не мешает изучению Ruby.

S.Lott 01.01.2009 22:14

"У меня правильное впечатление?" - не совсем. Python и Ruby очень похожи по своей объектно-ориентированности. Ruby больше похож на Perl, чем на Python, но не из-за объектно-ориентированного подхода или функциональных возможностей.

Joshua Swink 02.01.2009 01:16

Вы думали об исследовании Clojure? Это LISP для JVM, и вы можете использовать очень большую экосистему Java для веб-разработки и развертывания.

Toby Hede 02.01.2009 02:47

Как говорит @ S.Lott, изучите их обоих. На протяжении многих лет я работал со всеми видами языков. Чем больше вы знаете, тем быстрее вы приобретаете новые. Что касается Ruby или Python, которые кажутся больше похожими на Perl, я всегда считал Ruby чем-то вроде потомка Java и Perl. Я не работал со Scheme или Lisp, поэтому не могу с ними сравниться.

the Tin Man 13.06.2011 05:29
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
21
6
5 618
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Ответ принят как подходящий

Я бы пошел с Руби. В нем есть все виды метапрограммирования и утиных приемов, которые позволяют легко расширять его. Такие функции, как блоки, на первый взгляд могут показаться не такими уж большими, но они обеспечивают действительно чистый синтаксис, если вы используете их правильно. Открытые классы могут быть адом отладки, если вы их облажаете, но если вы ответственный программист, вы можете очень легко делать такие вещи, как 2.days.from_now (пример из Rails) (Python, я думаю, тоже может это сделать, но с немного большей болью) )

PS: Проверьте «Почему Ruby - приемлемый LISP».

На самом деле блоки в Ruby - это волшебство, если вы привыкли к функциональному программированию.

ewalshe 01.01.2009 21:04

Разве блоки не являются серьезными побочными эффектами. Что противоречило бы всей философии функционального программирования?

Didier A. 17.12.2010 01:59

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

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

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

Я как раз размещал эту ссылку, когда вы ее разместили :)

Kiv 01.01.2009 20:41

Ruby обладает всеми преимуществами, которые Норвиг приписывает Python.

ewalshe 01.01.2009 21:02

Следует отметить, почему он выбрал Python: «Моя цель ориентирована на педагогику, а не на производство» (Python для программистов на Лиспе, мой вывод). См. Также: news.ycombinator.com/item?id=1803815

graywh 08.09.2012 01:36

Я также рекомендую статью Питер Норвиг, которую написал Намин. Если вы хотите изучить функциональное программирование на Python, обратите внимание на модуль functools в стандартной библиотеке.

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

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

Как «рубист» я согласен с Кивом. Оба языка предоставляют большую свободу действий, когда дело доходит до парадигм программирования, но также имеют свои преимущества / недостатки. Я думаю, что компромиссы, которые вы идете в любом случае, во многом связаны с вашим собственным стилем программирования и вкусом.

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

Наконец, я бы сказал, что Ruby мне больше нравится Perl. Отчасти это потому, что мне это намного удобнее, поэтому я могу довольно быстро взламывать скрипты. Тем не менее, большая часть синтаксиса Ruby была заимствована из Perl, и я не видел много кода Python, который выглядел бы похожим (хотя, опять же, у меня мало опыта работы с Python).

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

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

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

tzot 16.02.2009 14:54

В моем псевдокоде используются отступы. Я знаю, что в каком-то псевдокоде используется конструкция «do end», но я всегда думал, что она добавляет только лишний мусорный текст в псевдокод. Однако я согласен с вами, Ruby больше похож на псевдокод, потому что вы можете сократить синтаксис, например array [0..5]

Didier A. 17.12.2010 02:04

И Ruby, и Python довольно далеки от лиспских традиций неизменяемых данных, программ как данных и макросов. Но Ruby - это почти клон Smalltalk (и я надеюсь, что он станет больше похож на Smalltalk, поскольку устаревшая утилита Perlish устарела), а Smalltalk, как и Lisp, - это язык, который доводит одну идею до крайности. Основываясь на вашем желании сделать крутые хаки на языковом уровне, я бы выбрал Ruby, так как он унаследовал большую часть мышления метапрограммирования от Smalltalk, и этот образ мышления является, связанный с традицией Lisp.

Алекс Мартелли дает хороший анализ предмета. Сейчас он немного устарел, но я согласен с его основной сутью: Python и Ruby - два разных способа реализации одного и того же. Конечно, есть вещи, которые вы можете делать в Ruby, чего нельзя делать в Python. И конечно, синтаксис Python (возможно) лучше, чем у Ruby. Но если подойти к делу, не так уж и много объективных научных причин предпочесть одно другому.

Обычно вы слышите следующее: платформа важнее языка, а у Python платформа лучше, чем у Ruby (этот аргумент работает в обоих направлениях, так что не голосуйте против меня, все вы, рубисты). И в этом есть доля правды. К сожалению, это не очень актуально. Если вам не нравится платформа для любого из языков, есть реализации как на Java, так и на .Net, поэтому вы можете использовать их, если у вас есть проблемы с платформой.

Если вам нужна поддержка Unicode, не забудьте проверить, насколько хорошо она поддерживается. AFAIK, Python поддерживает Unicode лучше, чем Ruby, особенно начиная с Python 3.0. С другой стороны, в Python 3 по-прежнему отсутствуют некоторые популярные пакеты и сторонние библиотеки, так что это может сыграть против.

Адвокат дьявола: Кого это волнует?

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

Это похоже на решения Java / .Net. В конкретном случае могут быть веские причины, но мягкие факторы, такие как знакомство архитектора с платформой, являются гораздо более сильным предиктором успеха проекта.

Я признаю, что использовал Python гораздо больше, чем Ruby, но я бы не сказал, что у меня есть какие-то большие предпочтения между ними, кроме знакомства. Я использовал Python время от времени примерно с 1998 года, и мне нравится Smalltalkish-ность Ruby, поскольку я использовал Smalltalk ненадолго около 15 лет назад. Они оба делают похожие вещи, но немного по-разному.

Я хотел бы получить определенные функции от Ruby (или Smalltalk, если на то пошло), но Python так не работает. Вместо этого он имеет другие функции, а языковые идиомы немного отличаются от Ruby или Smalltalk. Несколько из Другиеплакаты связаны со статьями, которые сравнивают эти два.

Если вы беспокоитесь о Rails против Django, это говорит о том, что вы ищете платформу для веб-приложений. Оба языка имеют хорошую инструментальную поддержку и активное сообщество разработчиков. Похоже, что Django победил в рукопашной схватке веб-фреймворков Python, а Rails, похоже, находится в процессе «преодоления пропасти» и сопровождения Ruby. Обе системы являются достаточно зрелыми и доказали свою эффективность при значительных объемах трафика.

Совет: Наличие религиозных войн является хорошим показателем того, что ни одна из сторон не имеет веских аргументов.

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

Выберите один и используйте его. Вы сможете эффективно строить системы с помощью любого из них.

Я питонистка; однако, исходя из ваших требований, особенно «крутых приемов на уровне языка», я бы посоветовал вам поработать над Ruby. Ruby более гибок по сравнению с Perl, и вы можете сделать много хаков; Python нацелен на читаемость, что очень хорошо, и обычно языковые хаки немного осуждаются. Базовые типы Ruby могут быть изменены хакерским способом, который обычно позволяют языки прототипов, в то время как базовые типы Python больше подходят для создания подклассов.

Между прочим, я бы добавил небольшое исправление: и Ruby, и Python очень и очень объектно-ориентированы, и ни один из них не предназначен для использования в быстрых и грязных сценариях в стиле Perl. Среди них Ruby синтаксически больше похож на Perl, чем на Python.

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

Python определенно не больше Perlish - Ruby, по сути, является гибридом Smalltalk / Perl (некоторые из его менее используемых функций взяты непосредственно из Perl), тогда как Python имеет лишь отдаленное отношение к ним.

выберите наиболее популярный для своего домена, чтобы ваша работа была наиболее заметной. кто-то может сказать «рубин / рельсы» для Интернета, «питон» для всего остального. выбор языка только потому, что он шепелявит, действительно не подходит для профессионала.

Если вам нравится шепелявый, я думаю, вы будете лучше похожи на Ruby, но C++ больше напоминает мне Python. Я разместил небольшой пост на эту тему: http://hartator.wordpress.com/2011/06/12/ruby-vs-python-2011/

Другие вопросы по теме