Посоветуйте, пожалуйста, Ruby vs Python для тех, кто очень любит LISP - PullRequest
20 голосов
/ 01 января 2009

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

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

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

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

Ответы [ 12 ]

31 голосов
/ 01 января 2009

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

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

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

25 голосов
/ 01 января 2009

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

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

17 голосов
/ 01 января 2009

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

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

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

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

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

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

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

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

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

12 голосов
/ 01 января 2009

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

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

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

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

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

8 голосов
/ 01 января 2009

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

5 голосов
/ 01 января 2009

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

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

3 голосов
/ 01 января 2009

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

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

3 голосов
/ 01 января 2009

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

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

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

1 голос
/ 01 января 2009

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

0 голосов
/ 13 июня 2011

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

...