Как стать автором
Обновить

Комментарии 92

Я тоже часто в голове сравнивал питон и руби, а потом понял, что их сходство лишь в парадигме, полном и безоговорочном ООП.

Руби для веба в принципе, а питон для веба лишь отчасти, очень маленькой части.
Питон больше системный язык, наиболее универсальный из всех, что я видел :)
А Руби — квинтэссенция всего, что хочется видеть в веб-языке :)
Интересное представление о руби, вы его случайно с rails не путаете?
Сравнивать фреймворк с языком? :) Зачем? :)
Просто сложилось впечатление что вы за rails не видели ruby, и поэтому оцениваете предвзято.
Я не зная python настолько что бы спорить, но сам руби ни для какого веба не разрабатывался, все существующие там возможности вполне универсальны (ну разве некоторый упор для написания скриптов), и то что он хорошо подходит для для конкретной области (веб) скорее показатель удачного дизайна языка, в других областях он может применяться не менее удачно.
Возможно я не прав, но оценивал я действительно веб/не веб :)
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Когда Ruby начинал создаваться веба еще как такового не было в современном понимании. Как и когда начинал разрабатываться Python. Оба языка превосходны. Для любых задач. Просто у Python'а лучше интерпретатор (да и самих интерпретаторов несколько: CPython, Jython, IronPython например).
Цитата с википедии:
«Performance — the Ruby interpreter's performance trails that of comparable languages such as Perl, PHP, and Python[5][6], mainly due to the design of the interpreter: To execute Ruby code, the interpreter builds a syntax tree from the source code and then evaluates the syntax tree directly, instead of first compiling it into more efficiently executable form.»

Дамс, не удивительно.
Одно дело начал разрабатываться, другое — использоваться.
Руби в 1995 насколько я помню разрабатываться начал, питон тоже, пока они приобрели какую-то мизерную популярность прошли далеко не месяцы, так что говорить есть о чем, если, конечно, вы не имеете в виду «веб 2.0» и прочую современную лабуду.
При чем здесь современная лабуда. Django и RoR появились далеко не в 1995-м. Кстати, Python начал разрабатываться вообще в 1992-м. Так вот. Я о том, что весь веб в Ruby — это RoR. А в Python хоть и есть такие вещи как Pylons и TurboGears, но на самом деле именно Django сделал этот язык популярным для веба.
Вы неправы по поводу того что есть только RoR. Есть Merb, Camping, Sinatra и много других вполне успешных фреймворков.
НЛО прилетело и опубликовало эту надпись здесь
>Django сделал этот язык популярным для веба
Пруфлинк на статистические данные?
а как же plone, zope и прочие динозавры?
перенесите, по возможности, в блог Python
Спасибо, перенесу, как смогу ;)
Зачем переходить на питон/руби если есть перл?
Например, чтобы начать получать удовольствие от кодинга ;)
Кому что, конечно, но в свое время я наплевался, пока писал какой-то скриптик на перле.
Вы просто не умеете его готовить. (с)
:)
Плеваться не надо, каждому инструменту свое место. И на перле можно писать красиво и читаемо, другое дело, что это сложнее.
перл в полне хороший язык, нишевый просто.
Писать на перле — еще куда бы ни шло, даже, может быть, прикольно. Но вот читать перл… :)
НЛО прилетело и опубликовало эту надпись здесь
Зачем использовать репл, если есть АСМ?
Перл, конечно
>>и теперь интересно, когда Джанго подружится с пайтон 3.0.
оочень не скоро, ветку под него сделают, но офф релизы врядли будут менее чем через год после релиза питона. Там ведь не только джангу подпиливать, а и кучу модулей.
Для начала MySQLdb, которое я под win собирал ну о-о-очень долго и которое пока не избавилось от deprecated зависимостей.
Извините, вы и С++ произносите как «си-плас-плас»? Просто пока читал — постоянно спотыкался глазами на вашем «пАЙтоне».
С++ — нет, а Python я называю пайтоном. Суть-то не меняется.
Более того, я произношу «пайƟон»…
Если прочитаете о том откуда взялось название языка — все поймете и глаза не будут спотыкаться :)
Он как раз знает…
Официальная вики говорит, что произносить можно и «пайтон» и «питон». Предпочтения нет. Мне вот больше «питон» нравится.
По выразительности, я б сказал, на уровне С++. [...]
По запутанности, я б сказал, на уровне C++

Тянет на затравку холивара :-)
Имхо, выразительность C++ начинается в шаблонах и там же очень быстро заканчивается, перерастая в дикие компиляторо- и мозгодробительные заросли. Те же цели зачастую достигаются в динамическом Питоне гораздо элегантнее. И C++09 ничего принципиально не изменит. Я бы понял ещё с Хаскелем сравнение, если брать из стана строгой статики. Но C++?..

Что касается сложности, я считаю, что несмотря на явный рост «объёма» Питона как языка, он (пока?) проще C++. Но это уже совсем субъективно, ни одного количественного параметра придумать не удаётся :-)
> Тянет на затравку холивара :-)
Я нечаянно

Выразительность C++ приходит с шаблонами И перегрузкой оператором. Заросли не заросли, но я тащусь от, например, ковыряния в boost. Однако, код джанги, скажем, читать не намного проще (особенно про модели). Возможно оттого, что с пайтоном у меня опыта гораздо меньше, чем с С++.

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

А измерять дело дряное. Только ощущениями ;)
Буст — полезная и грамотная библиотека. Под дебрями я имел в виду DSL и метапрограммирование на шаблонах, как, например, в boost.spirit. Загляните внутрь. Это читаемо? Использование на простых примерах выглядит красиво и вообще доставляет, спору нет. Но сопровождать и отлаживать это на практике…
В общем, я придерживаюсь мнения, что шаблоны — это прежде всего средство generic programming, а остальные, случайно открытые побочные эффекты себя не оправдывают.
И вот в Питоне как раз эта область метапрограммирования, в которую натужно тащат шаблоны, легко и непринужденно покрывается за счет динамической природы языка.
Если проникнуться, то от метапрограммирование получаешь непередаваемое удовольствие. А код буста очень даже неплохо написан. Этим С++ мне и нравится, что такими простыми концепциями, как шаблоны, можно добиться самых неожиданных эффектов.
А пайтону повезло, что он динамический ;)
Если хотите настоящего метапрограммирования то откройте для себя lisp.
Кагбе сразу выражу свою позицию в отношении плюсов: язык пытаясь стать высокоуровневым, таковым не стал, а сломал где-то совместимость с Си (передача указателей на функции вообще феерия ещё та), а своим недо-ооп нагородил только проблем. boost (при всём уважении) это ещё один набор костылей и хаков, для неудачного дизайна языка.
Для низкоуровневых вещей есть Си, есть Objective-C с хорошим ООП, всё что выше уровнем: выбирай из огромной кучи более доделанных языков. Есть ынтырпрайз в лице Java, есть замечательные фя такие как Common lisp, scheme, ocaml, haskell, erlang — которые по настоящему помогают решать проблему, а не трахаться с языком.
Всем спасибо, перенес в тематический блог.
>со своей перегрузкой операторов, множественным наследованием, метаклассами и еще какими->то странными фичами пайтон — довольно сложный язык.

попробуйте компонентный подход wiki.zope.org/zope3/ComponentArchitectureOverview
Подход этот напомнил мне классический ООП в стиле С++…
не поделитесь, в чем именно? :)
Явные интерфейс и взаимодействие через них. Если я правильно понял из uml-диаграмм. Я глубоко не копал…
В каком месте вы считаете Python сложным языком? И какие фичи сложные? :)
Что лишнего в top-level scope?
«теперь интересно, когда Джанго подружится с пайтон 3.0» — это минус? Нет. Тем более всегда с этим можно помочь Django Software Foundation, предлагая нужные патчи.

Интересно было бы получить ответы на эти вопросы. :)
не сам питон сложный, а неправильное использование его возможножстей желает очень сложным конечный продукт. Взгляните, к примеру, на исходники zope2 — при множественном наследовании десятки раз очень сложно найти нужные концы.
Я надеюсь эта проблема решится хорошими инструментальными средствами разработки
Я написал: metaclass, огульная перегрузка операторов (еще больше, чем в C++). Я не говорю, что это плохо. Это замечательно, выразительно. Но сложно. Для сравнения, в Ява нет даже множественного наследования, автобоксинг появился кажется только в 1.5: Ява идет по пути максимального упрощения синтаксиса, в Ява ничего не происходит неявно (кроме сборки мусора, конечно ;).

Что лишнего? Заглянул. На букву A: abs. Почему б не положить в модуль math? Аналогично: divmod, chr и т.д. Compile и иже с ним, format, open… Даже понятно, почему эти функции в top-level. Но их слишком много, на разную тему в перемешку.

Минус, что подружится она сравнительно не скоро… Естесственно, это не минус python 3.0.
Под огульной перегрузкой я понимаю наличие, например, __getattr__, __getattribute__, __get__. Вот как с наскоку понять, что есть что, и для чего это все (все эти операторы для получения аттрибута)?
abs во всех языках в toplevel, abs работает не только с float но и с int. другой вопрос, что его можно было сделать методом класса int, но тут другой механизм. функция abs вызывает метод __abs__, так что можно можно конструировать свои типы, с которыми можно сделать abs. Так что в math этой функции делать нечего.

open — это синоним для file. его теоретически можно вообще выкинуть.

в toplevel в питоне не так уж и много. сравни с php.
Мне так нравилось форматирование строк оператором %. Введение красивых позиционных параметров — это хорошо, а вот необходимость использовать метод format расстраивает. Да, наверное, так аккуратнее — но с одной из составляющих лаконичности питона можно попрощаться.
Что-то Вы ошибаетесь

IDLE 3.0rc2
>>> '%s%s' % (1,23)
'123'
Я к тому, что этот способ никуда не исчез
Оператор проживет до версии 3.1, после чего будет безжалостно уничтожен — PEP 3101
Прошу прощения, не ту ссылку дал. Пожалуйста.
Я тоже так думал сначала, но потом попробовал писать с использованием .format() и осознал, что это очень удобно. Лаконичность ничуть не страдает.
Забавно, что до Py3k print был оператором, теперь функция.
Что такого революционного добавили в новой версии Питона, что это удержало вас от перехода на Руби? Спрашиваю не чтобы похоливорить. Просто со стороны действительно не понятно, что там такого принципиально нового.
Больее интересен вопрос: «Что мне может предложить Ruby, чтоб на него перейти?».
Раньше мог предложить более чистый синтаксис/библиотеку. Теперь у python тоже с этим все вполне хорошо. А Django, я верю, не хуже, чем Rails.
Мне Руби нравится, по ряду причин, больше чем Питон. Но мне не кажется, что Руби обладает достаточным перевесом, чтобы заставить питонщика перейти на него.

Одним из преимуществ Руби является нейминг. Все придерживаются стандарта. Классы именуют в стиле: SomeGreatClass, методы: some_great_method. Даже в стандартной библиотеке Питона можно встретить 3 варианта нейминга методов: some_great_method, somegreatmethod, someGreatMethod. Меня это крайне раздражает. Возможно, это раздражает только меня )

Плюс необходимость писать self в качестве аргумента каждого метода меня просто убивала. В 3-ей версии это убрали?

Джанго хороший фреймворк. Единственное чего я не понимаю: почему клоны Рельс есть практически для всех ЯП, а клонов Джанго я не видел. Для меня это загадка.
Потому что Джанго по большей части — это и есть клон рельс ;)
Это не так. Джанго — это полностью самостоятельный проект, который достаточно сильно идеологически отличается от Рельс.
Ну неужели клоны Rails совсем прямые, а не просто проекты, inspired by Rails?
Джанго, мне кажется, inspired by rails.
Работа над Джанго началась в 2003-ем, а публичный релиз Рельс был только в летом 2004-го. Так что основные идеи в Джанго оригинальны. Если вам интересны существенные отличия (а их много) — погуглите, не поленитесь.

> Ну неужели клоны Rails совсем прямые
Нет, на самом деле они кривые ))) Посмотрите CakePHP, Akelos.
А у CakePHP и Rails нет существенных отличий?
Хаха, есть. Язык реализации — самое основное ) CakePHP начинался как порт Рельсов на ПХП. Точка. Во что он превратился сейчас спрашивайте у тех, кто этот CakePHP использует.
Да, DHH придумал тесты, mvc, и вообще веб-фреймворки.
Из соответствующих записей в Википедии:
«Ruby on Rails was [...] first released as open source in July 2004»
«Django [...] was released publicly under a BSD license in July 2005»

Я могу ошибатся, но в данном ключе, учитывая огромное количество схожих элементов в обоих системах, мне кажется более реальным, что Django — всё таки «inspired by», нежели полностью самостоятельный.
Каких именно элементов, а то я тоже умею цитировать Wikipedia:

Apache Struts. It was originally created by Craig McClanahan and donated to the Apache Foundation in May, 2000.
Цитата из официального FAQ'а Джанго:

In fall 2003, the World Online developers (Adrian Holovaty and Simon Willison) ditched PHP and began using Python to develop its Web sites. As they built intensive, richly interactive sites such as Lawrence.com, they began to extract a generic Web development framework that let them build Web applications more and more quickly. They tweaked this framework constantly, adding improvements over two years.

In summer 2005, World Online decided to open-source the resulting software, Django.

Чувствуете разницу между датой начала разработки и датой релиза?

Огромное количество схожих элементов в обоих фреймворках? В Рельсах — MVC, в Джанго — MVT. В Рельсах модели — это ActiveRecord, в Джанго все поля в модели нужно прописывать явно, из-за этого у них до сих пор нет нормального механизма миграций. Продолжать?

Он чересчур гибкий (в ущерб скорости), и местами очень напоминает (и позволяет делать как в) перл. Многие (и я в том числе) склонны считать это, а так же меньшую выразительность синтаксиса недостатком руби. И это не вписывается в идеологию питона (import this). Только сегодня наткнулся на LOR'е на перлы самого DHH в рельсах www.linux.org.ru/view-message.jsp?msgid=3271907#3271930
НЛО прилетело и опубликовало эту надпись здесь
Наверное лучший критерий — скорость разбирания чужого кода человеком не знакомым с языком.
Мне Питон симпатизирует больше Руби своим более читаемым и приятным синтаксисом (имхо), который еще больше «причесали» в новой версии.
Ну это уже сугубо дело вкуса и личных предпочтений, за гранью объективности. С таким же успехом я могу сказать, что синтаксис Руби мне кажется «более читаемым и приятным».
у руби по сравнению с питоном малое количество библиотек.

scipy, matplotlib, twisted, PIL, Sage(!!!) — это и еще куча всего: потрясающие вещи вроде PyStream, библиотеки для работы со звуком, возможность вызывать функции из матлаба(must для сложных инженерных приложений), специальные утилиты для создания связок python — fortran (fortran все еще жив в области HPC) добавляют питону много, очень много очков.

к тому же, я слышал(не далее как на этой недели читал в комментариях на reddit, год полтора назад я слышл про краши регулярно), что интерпретатор до сих пор не вполне стабилен и изредка случаются краши. это правда?

не хочу разводить FUD, Flood и Holy War, но вы сами спросили в чем причина =)
У Руби действительно меньше разнообразных библиотек, с этим никто вроде и не пытается спорить.

Руби обязан взрывным ростом своей популярностью Рельсам. До их появления он был слабо известен, количество Руби-разработчиков было мизерным. Благодаря Рельсам в Руби-сообщество пришло много грамотных веб-разработчиков. Поэтому количество всяческих библиотек связанных с вебом на любой вкус и цвет просто зашкаливает. Почти все «cutting edge» иннновации в сфере вебдева приходят сегодня из Руби. Порой я узнаю о каких-то новых Руби-библиотеках и Рейлс-плагинах и у меня просто отваливается челюсть — настолько оригинально/круто/удобно реализована та или иная фича.

Поэтому для веб-разработчика вряд ли найдется столько полезных библиотек в другом ЯП. Если же заниматься научными изысканиями, то, возможно, для этих целей Питон подходит значительно лучше, спорить не буду. Я же, как веб-разработчик, даже представить не могу зачем мне может понадобиться, к примеру, биндинг к Фортрану или вызов функций Матлаба.
простите, я не совсем понял вопроса.

я думал вопрос был — почему не перешли/ не собираетесь переходить /…

и постарался ответить на него наиболее объективно.

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

p.s. кстати, веб приложения не в вакууме же живут. и им (часто?) бывает нужно что-то посчитать, или сделать какой то хитрый трюк. вот тут то вся мощь питоновских библиотек и приходится кстати.

вот мое такое скромное мнение состоит в том, что сейчас просто социальная сеть или еще чисто web служба/ресурс не больно то людям и нужна. нужно уже что-то более технологически сложное — с продвинутыми возможностями поиска, рекомендаций, фильтраций, etc.
Хорошо, постараюсь на этой неделе написать пост про cutting edge в Руби и другие плюсы этого языка.
у руби по сравнению с питоном малое количество библиотек.

Это абсолютно ложный миф.
scipy, matplotlib, twisted, PIL, Sage(!!!)


Вместо scipy — Ruby/GSL, вместо matplotlib — Ruby Gnuplot, вместо twisted — EventMachine. вместо PIL — RMagick, (что такого удивительного в пакете библиотек Sage я не понял)
Библиотеки для работы с видео и звуком есть, вызывать функции из матлаба в ruby можно, связки ruby — fortran так же имеются. Так что пока из ваших примеров ни видно ничего что бы добавляло «питону много, очень много очков».

к тому же, я слышал(не далее как на этой недели читал в комментариях на reddit, год полтора назад я слышл про краши регулярно), что интерпретатор до сих пор не вполне стабилен и изредка случаются краши. это правда?


Нет, не правда. Интерпретатор — который кстати? — если MRI и JRuby — вполне стабильны.
Про краши питоновского интерпретатора тоже пишут много — например:
раз, два, три, четыре
но разве это показатель чего то?
Что самое интересное у scipy&matplotlib хорошие сайты с документацией и свежими релизами, а у ruby/gsl & ruby gnuplot — какие-то стрёмные странички и релизы годовалой и трёхлетней давности. Действительно можно «ставить галочки», но стоит копнуть глубже и…
А вы копните глубже, копните — увидите много интересного. А не судите по тому, что выпало в первых строчках гугла. И GSL www.gnu.org/software/gsl/ и Gnuplot www.gnuplot.info/ — это библиотеки с более чем 10 летней историей, отлично документированные и широко используемые во всем мире.

Я не понимаю как это отменяет заброшенность самих проектов с наличием открытых багов.
Это очень странный аргумент — «вы не понимаете».
И GSL и Gnuplot активно развиваются и не заброшены.
ruby/gsl & ruby gnuplot — это интерфейсы для доступа к ним, они должны изменятся только в очень редких случаях, понимаете?
да, я уже поглядел 8 килобайт кода. видимо баги это не тот случай. вопросов больше не имею.
отлично. не в ruby/gsl не в ruby gnuplot багов нет. В GSL и Gnuplot баги несомненно есть — но точно так же как и везде: в выше упомянутом matplotlib сейчас 41 открытый баг — но это ведь не значит что этой библиотекой нельзя пользоваться.
значит багтрекер на рубифордже врёт. скачайте gnuplut-py и ruby gnuplot, посмотрите коды обоих и поймёте, почему у первого исходников в 15 раз больше.
значит багтрекер на рубифордже врёт.

Это не багтрекер врет — это люди путают собственные кривые руки с багами софта.

скачайте gnuplut-py и ruby gnuplot, посмотрите коды обоих и поймёте, почему у первого исходников в 15 раз больше.


Естественно — желание «еще раз изобрести велосипед» в людях непобедимо. Можно и в 150 раз больше кода написать. но вообще да, это интересно — обязательно скачаю и посмотрю.
ну sage не только пакет библиотек… вот например скринкасты, что бы стало понятней
www.sagemath.org/help-video.html

matplotlib имхо гораздо более лаконичный чем ruby gnuplot.

scipy это больше чем биндинги к gsl — есть еще LAPACK, пакет для обработки сигналов и если копнуть глубже уверен можно многое нарыть как например тот факт, что ruby биндинги судя по всему еще не полны — смотрите на даты последнего релиза биндингов и GSL.

про связку питона и фортрана — аналогов f2py и pyfort я так не нашел, как и возможность вызывать функции из матлаба…

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

вот eventmachine я не видел, надо посмотреть по ближе…

так что может это не совсем и миф…
matplotlib имхо гораздо более лаконичный чем ruby gnuplot.

Вполне возможно — зато допустим у gnuplot на много более богатые возможности по созданию 3D графиков.

scipy это больше чем биндинги к gsl — есть еще LAPACK, пакет для обработки сигналов

Во первых — в gsl полностью покрывает по функциям и LAPACK, и обработку сигналов Во вторых -вот порт LAPACK на ruby, а вот биндинг Ruby-LAPACK — это к вопросу о работе в ruby c Fortran библиотеками.

если копнуть глубже уверен можно многое нарыть как например тот факт, что ruby биндинги судя по всему еще не полны — смотрите на даты последнего релиза биндингов и GSL.


Копните глубже. Последняя версия GSL 1.11, а последняя Ruby/GSL 1.10 — это не то отставание о котором вообще можно говорить (но уж если это критично — готовой сборкой пользоваться не обязательно, можно собрать и самому)

про связку питона и фортрана — аналогов f2py и pyfort я так не нашел, как и возможность вызывать функции из матлаба…


Видимо недостаточно искали. Вот библиотека для вызова функций MATLAB rubyforge.org/projects/matlab-ruby/, одну из связок Ruby-Fortran я приводил выше, вот допустим еще биндинг для известной фортрановской библиотеки MINUIT www-meg.phys.cmu.edu/~williams/ruby-minuit/

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


и это тоже есть.
Так что — конечно — выбор библиотек для научных исследований у питона больше, но почти для всего у ruby есть аналоги. Так что ничего что добавляло бы «питону много, очень много очков» — нет.
C++ выразительный язык? Да это же набор костылей и подпорок!
По мне, так главный бенефит это итераторы везде и всюду, в частности для map/range/reduce и т.д. Этакая ленивость питона теперь будет везде.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории