LINUX.ORG.RU

Перенос кода Perl на Python

 ,


0

3

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

>>> Подробности

Помню видет простую терминалку на pyserial, вроде даже как пример к pyserial. Она использует три треда. Один непрерывно ждет данных из дескриптора, другой пишет их туда, а третий взаимодействует с пользователем. Какие нафиг epoll'ы, вы чего... Даешь по треду на каждую фигню. После этого понял, что мне питон нафиг не нужен.
А Perl хорош как минимум, что там для него много готового кода с veripool который в питоне ничем не заменить.

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от anonymous

тут же про PERL, а это что-то вроде CP/M, Алгол и Кобол, слова то знакомые но все из далекого прошлого.

Ну вот, ещё одно подтверждение, что я *****н старый... :(

AlexVR ★★★★★
()

Perl, the only language that looks the same before and after RSA encryption

anonymous
()
Ответ на: комментарий от AiFiLTr0

> Помню видет простую терминалку на pyserial

давно ли вы смотрели на код с cpan? очевидно, вы туда не заглядываете. а зря. как говориться, кто в армии служил, тот в цирке не смеется.

anonymous
()

Как сказал мой добрый друг:

Perl прекрасен! Прекрасен в своей ублюдочности!

anonymous
()
Ответ на: комментарий от DNA_Seq

> а когда у питона появился аналог cpan?

бог миловал :)

у python есть pypi, если вы о «здесь все насрем».

anonymous
()
Ответ на: комментарий от anonymous

Я вообще олдфаг предпочитающий баш и С. Что не пишу на С, то пишу на баше. Perl юзаю только для верилого-специфичных задач где без готового вериложного парсера не обойтись.
Код из cpan иногда смотрел, но такого опуса как в pyserial еще не видел. Вот, кстати та эпичная терминалка https://trac.cs.earlham.edu/ecoi/browser/serial/pyserial-2.2/examples/miniter... вроде.
Так и не пойму, неужели в питоне не обернули epoll...

AiFiLTr0 ★★★★★
()

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

anonymous
()
Ответ на: комментарий от anonymous

то есть скажем веб приложения на перле я надеюсь никто не пишет? или менеджер пакетов. это было бы можно сделать, но это очень хуевая идея.

бугога, а мужики то не знали

Reset ★★★★★
()
Ответ на: комментарий от Quasar

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

Ага, настоящие программисты пишут на брейнфаке, а быдлокодеры только на перле, питоне, пыхе и прочей сране.

Reset ★★★★★
()
Ответ на: комментарий от Reset

достоинства в одном контексте оказываются недостатками в другом.

anonymous
()

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

anonymous
()
Ответ на: комментарий от anonymous

> Список твоих проектов на Haskell в студию.

У меня есть Hello World на Haskell

Проектов на питоне у меня нет =='

Profit

nCdy
()
Ответ на: комментарий от tensai_cirno

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

объясни лучше зачем искать нетривиальные пути решения тривиальных задач?

anonymous
()

Грамотный код на Perl код не нуждается в переносе на другие (тем более скриптовые) языки — в 95% случаев скорости достаточно — остальное можно ускорить за счет вызовов C из Perl.

gzim9x
()
Ответ на: комментарий от AiFiLTr0

> Так и не пойму, неужели в питоне не обернули epoll...

from select import epoll

anonymous
()

Перенос кода Perl на Python

Выкинуть код на Perl, написать код на Python. Проверено, шикарно работает.

sanuda
()
Ответ на: комментарий от anonymous

> Ну вот и иди, компиляй генточку и пиши факториалы на хаскеле. Это же так круто и модно.

Вот и пойду :D Не знаю как круто или модно, но мне нравится >_<

nCdy
()

> Скорее всего вы окажетесь в ситуации, когда вы видите, что ваш код Perl работает, однако не имеете понятия о том, как именно он работает. Именно здесь начинаются трудности переноса кода с Perl на Python.

Вообще-то, именно где-то здесь у нашего сферического деятеля с питоном должна была появиться мысль:
«Стоп! Какой нах* перенос?! Как оно работает? Как оно должно работать? Пока нет полного понимания — никаких переносов, бл.!» ???

...или у питоноводов всё совсем по-другому?

Neksys ★★★
()
Ответ на: комментарий от Reset

Кто-нибудь случайно вместо таба пробел или наоборот поставит и полдня дебага обеспечены.

Хехе, ну, можно и так.

4 часа 57 минут почитать лоры и хабры, потом глянуть на трейсбэк, в котором английским по белому написано

  File "test.py", line 3
    print 2
    ^
IndentationError: unexpected indent

поправить идентацию и отчитаццо, как хорошо поработал)

А можно сразу поправить и не ныть

gistart
()
Ответ на: комментарий от nCdy

> Не знаю как круто или модно, но мне нравится

Вот и не лезь со своими игрульками ко взрослым дядям.

anonymous
()
Ответ на: комментарий от Neksys

> «Стоп! Какой нах* перенос?! Как оно работает? Как оно должно работать? Пока нет полного понимания — никаких переносов, бл.!» ???

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

anonymous
()
Ответ на: комментарий от anonymous

>у python есть pypi, если вы о «здесь все насрем».

а как модули скачивать и компилять в автоматическом режиме? Ставил Biskit из исходников - так ему numpy и python-number Одновременно требуются

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от anonymous

> Вот и не лезь со своими игрульками ко взрослым дядям.

Эм ? Это не аргументированно !!!

nCdy
()
Ответ на: комментарий от DNA_Seq
aptitude install python-pip && pip install https://biskit.svn.sourceforge.net/svnroot/biskit/trunk

можно еще из easy_install репов:

easy_install <pkg_name>
pip install <pkg_name>
gistart
()
Ответ на: комментарий от DNA_Seq

> а как модули скачивать и компилять в автоматическом режиме? Ставил Biskit из исходников - так ему numpy и python-number Одновременно требуются

на популярных linux дистрибутивах, достаточно:

easy_install biskit

скорее всего, достаточно одного из упомянутых вами пакетов.

anonymous
()
Ответ на: комментарий от anonymous

>>а как модули скачивать и компилять в автоматическом режиме?

емержем.

дети, закройте уши. я буду говорить плохие слова.

anonymous
()
Ответ на: комментарий от DNA_Seq

> Спасибо, но оно нерабочее получилось. Пришлось ручками модули компилять.

все зависит от вашего окружения. оно может быть очень специфическим.

anonymous
()
Ответ на: комментарий от DNA_Seq

ну не знаю... для сайтиков, всякие reportlab и т.п., отлично ставятся и собираются

gistart
()
Ответ на: комментарий от anonymous

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

Нужен «Исходник»

Neksys ★★★
()
Ответ на: комментарий от anonymous

> Спасибо, но оно нерабочее получилось. Пришлось ручками модули компилять.

вот только-что водрузил у себя biskit путем easy_install biskit. а вы, часом, не на экзотической платформе сидите типа windows или aix? хотя, если вы уже знаете, как из исходников пакеты собирать и устанавливать, у вас может быть такой франкенштейн, что уже ничем не поможешь.

anonymous
()

Убивать убивать ржавой секирой ужоса!!! Последнее предложение совершенно верно _делать не стоит_!

alx_me ★★☆
()
Ответ на: комментарий от anonymous

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

Ещё меня очень заинтересовал язык из которго можно восстановить идею. UML? Ну так пишите комментарии в doxygen + доп договорённости по проекту и будет вам счастье. Меня уже затрахали серебряными пулями. Не освоив один язык находят более другой где ещё меньше нужно проектировать и документировать а потом удивляются что идея потерялась. Может быть её вовсе не было?

alx_me ★★☆
()
Ответ на: комментарий от alx_me

> Ещё меня очень заинтересовал язык из которго можно восстановить идею

вы совершенно правы - я, несколько, утрировал. дело все в том, что перл построен на идее «there is more than one way to do that». невозможность восстановления идеи из кода на перле очевидна, не правда ли? отсюда же проистекает невозможность, в общем случае, трансляции перлового кода в любой другой.

anonymous
()

аргументация и реализация подкачали

Сама по себе идея о замене Перла Питоном весьма здравая. Но аргументация и реализация, как это часто бывает, подкачали.

Питон объективно проще и в освоении и в поддержке. Развитие Питона существенно более разумно и динамично. Библиотеки есть и под тот, и под другой языке, здесь дело вкуса и конкретных задач. Мне, например, нужны numpy, scipy, matplotlib, wxPython. Наверное, какие-то аналого на Перле есть, но я не знаю.

Vudod ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.