LINUX.ORG.RU

Perl 6 vs Python 3

 , ,


3

4

Дискач.

Чтобы писать утилиты и демоны например для десктопа. Допустим оставим в покое веб-девелопмент, там и так тесно. И забудем былое, Python 2, Perl 5 и связанные стереотипы.

P.S. Прошу не удалять за тупняк, я понимаю как это выглядит. Но тема то интересная

★★★★★

Последнее исправление: vertexua (всего исправлений: 2)

Ответ на: комментарий от DELIRIUM

Это нормально, ведь перл проиграл питончику.

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

Чего же не пишет-то на нём никто?

Он слишком офигенен. Людишки плачут и опускают руки, ибо понимают, что недостойны такого идеального инструмента.

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

Язык нужен для практики, а не ублажения граммарнаци-компилятора. Может у тебя бдсм склонности так проявляются?Растовикам привет.

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

Virtuos86 ★★★★★
()

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

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

Кстати, о растоманах.

RazrFalcon, что о перле думаешь? Два стула: с одной стороны это почти как мерзкий ненавистный баш, с другой убервыразителтный язычок по упоротости на уровне раста, как ты любишь.

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

Virtuos86 ★★★★★
()

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

То что в минималку втащили и перл и питон, это не от хорошей жизни.

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

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

утилит/демонов что нибудь компилируемое без тонн зависимостей.

Питон как раз скомпилирован

anonymous
()

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

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

В ход пошли языки для неофитов, как можно примитивнее.

Я тебя огорчу, но perl5 очень примитивный язык, но с замороченным по историческим причинам синтаксисом (контексты + невписавшиеся в дизайн ссылки с явным дереференсингом). Питон и руби намного более сложные языки. Так что чини ЧСВ.

bread
()

Ясен пень что все будут топить за Python. Но было несколько интересных постов где все-таки обсуждалась хоть часть тонны новых фич в Perl 6 против тех мелочей что в Python 3. Понятно что Perl 5 был настолько плох что улучшать можно было что угодно, но сейчас вроде бы 6-ка значительно вменяеемее

vertexua ★★★★★
() автор топика
Последнее исправление: vertexua (всего исправлений: 1)

Как человек, 10 лет зарабатывавший на хлебушек перлом с сожалением констатирую: фактически он мёртв.

r_asian ★☆☆
()

Ты здесь хотел увидеть, кто популярней? Питон, конечно. Довольно очевидно, что из-за когнитивных искажений люди берут не то, что подходит, а то, что они больше знают / о чём больше слышали.

Если ты хотел увидеть какое-то более-менее сравнение, то ты правда думаешь, что большинство здесь в глаза видело Perl 6 и что-то на нём писало, чтобы сравнивать? :)

А по делу, ну давай перечислю некоторые моменты касательно плюсов и минусов(ведь мы не фанатики, правда?) Perl 6:

* Grammars это очень круто, когда тебе нужно распарсить какой-нибудь выхлоп или файл или логи или там что угодно. Они структурированные и читабельные. PCRE питона здесь, извиняюсь перед теми, кто считает их хорошими, это как второклассник против профессионального боксёра. Один минус, что их оптимизация пока оставляет желать лучшего по сравнению с перлом, потому что, к примеру, штуку типа /^b/ перл заоптимизирует в вызов метода starts-with, а вот Perl 6 пока такого не делает. Но мы же умные, если нам нужен ^b, мы вызываем starts-with.

* В плане демонов поддержка event-driven вещей очень крутая. Давно уже раскидываю эту ссылку, просто глянь на это. И это лишь очень маленькая часть того, что можно делать, но аналогов такого счастья на уровне синтаксиса... Ну, лично я нигде не видел, буду рад, если покажут. Для демонов разных асинхронно стримить события, при этом быть защищённым от гонок и чтобы оно всё было **композабельное**(без композабельности ивентлуп-то можно написать) - красота.

* В Perl 6 если ты напишешь функцию MAIN, то она тебе, основываясь на параметрах создаст автоматически хелп и парсер для cli. Т.е. написал ты, допустим,

# inside "frobnicate.p6" 
sub MAIN(
  Str   $file where *.IO.f = 'file.dat',  #= an existing file to frobnicate 
  Int  :$length = 24,                     #= length needed for frobnication 
  Bool :$verbose,                         #= required verbosity 
) {

И оно тебе само сделало хелпер:

$ perl6 frobnicate.p6 doesntexist.dat
Usage:
  frobnicate.p6 [--length=<Int>] [--verbose] [<file>]
 
    [<file>]          an existing file to frobnicate
    --length=<Int>    length needed for frobnication
    --verbose         required verbosity

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

* В Perl 6 лучший юникод. Я понимаю, что фича типа «Не умирать, когда работаешь с последним стандартом юникода и знать, что в вот этом вот emoji на самом деле одна графема, а не три» нужна не всем, но она есть. Большая часть языков на текущий момент сливается, ведь юникод там не на уровне графем. Презентация, питон там тоже есть(спойлер: он ошибается).

* В Perl 6 0.1 + 0.2 == 0.3. В питоне ответ сам посмотришь. :) Вроде мелочь, а приятно, потому что больше никто об этом почти не парится.

* Есть junctions, например ты пишешь, «if $index ~~ 1|2|42», что означает «Если индекс это 1 или 2 или 42», что у питона на этот счёт? elif? Junctions можно сохранять в переменные и это просто обычная логическая связка значений, необязательно «или».

* Легко писать лямбды за счёт синтаксиса с $_ и *. Вот вроде пример тупой(ну кто сейчас считает фибоначчи, правда?), но сам код для лямбды на питоне выглядит немного... Если люди думают, что это «просто и понятно», то мир их дому.

* Хочешь аннотируй типами, хочешь не аннотируй, язык подстроится под тебя. Это из коробки, не костылями через комментарии.

* *Очень* легко делается паралеллизм данных и паралеллизм задач. Много данных нужно перемолоть? Распараллель их на 160 ядер добавив в код 5-10 символов(буквально). Просто кинь взглядом на этот параграф и прикинь в голове, насколько оно масштабируется, хехе.

* Производительность может лажать. Ситуация улучшается, но некоторые части оставляют желать лучшего, например startup time. Все знают, что у rakudo оно хреновое, но пока не дошли руки починить это.

* Некоторые вещи ещё work in progress. Например, нет поддержки юниксовых сокетов и UDP сокетов. Если они тебе нужны - увы. Один человек занимается ими на гранте, и дело продвигается, но это не прям сел и поехал.

* (нет gil, не знаю, как он мешает, но вижу иногда людей, которые приходят в irc в духе ВОТ ЭТО У ВАС ЗДЕСЬ СВОБОДА ОТ БЛОКИРОВКИ ИНТЕРПРЕТАТОРА, забавно наблюдать)

Люди, которые пишут так, будто Perl 6 как-то связан с Perl кроме как исторически, не в теме и я бы не доверял их мнению.

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

Я здесь не перечисляю фичи, полезные для крупных приложений, а просто прошёлся по части фич для самой бытовухи для скриптов и утилит, как ты написал: обработать стрим данных, разбирать форматы, CLI, вот это вот всё.

Для ясноты напишу ещё раз - Perl 6 (Raku) это **НЕ** Perl, не имеет никакого смысла делать вывод об одном, зная о другом.

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

Спасибо, я не думаю что большинство видело Perl 6, но кто-то видел. Вот как раз такой пост ждал, спасибо

vertexua ★★★★★
() автор топика
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от Lilly

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

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

В целом, есть плюсы и минусы, растущие из разной истории(кто-то зарелизился в девяностых, кто-то в 2015-ом году).

Но мне лично нравится то, как разрабы языка, по сути, сели и крепко подумали «А как мы можем улучшить то, что уже существует?». К примеру, взяли pcre, написали длинный список их недостатков и того, что делает их нечитабельным месивом и подумали «А как мы можем сделать лучше?». Придумали и сделали. При этом понятно, что тот же Ларри это явно не последний человек, который работал с pcre.

Или вот взяли проблему типа канкаренси и подумали «Вот есть какой-нибудь rxjava, но пользоваться им больно и страшно и неудобно. Как мы можем сделать удобней?». Придумали и сделали. «Гонки трудно искать». Обычно дизайнеры языков отвечают в стиле «Сам дурак», но здесь люди задаются вопросом «А что мы можем как разработчики языка с этим сделать? Можем ли мы помочь пользователям?». Девиз «Пытай разработчика компилятора ради удобства пользователей» это же чудесно (для пользователей, для разработчиков это не весело). Но многие делают наоборот, «пусть пользователи сами парятся с проблемами, потому что я не хочу придумывать, как можно решить проблему, едет и едет».

Будет очень печально, если язык, как многие тут хотят, умрёт, потому что это та штука, где действительно есть изменения на фоне относительного застоя в дизайне ЯП.

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

Lilly
()
Последнее исправление: Lilly (всего исправлений: 1)
Ответ на: комментарий от Lilly

Производительность может лажать

Умножил все крутые фичи (80% из которых востребованы чуть чаще чем никогда) на ноль.

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

Int :$length = 24

Хорошо, дошкольные аннотации там есть (хотя вывести int из 24 оно не может?). Покажи теперь тип-сумму.

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

Тип можешь вообще не указывать, а gradual typing это не про вывод.

Покажи теперь тип-сумму

class A {...}

subset A-or-Str where A|Str;

# далее A-or-Str это обычный тип, который совместим со строками или A, включая их объекты типов.

# если в сигнатуре, то можно и новый тип не делать:
sub foo($bar where Complex|Int) {
    ... # where принимает любые условия, т.е. это не специализированная конструкция конкретно для типов
}
Lilly
()
Ответ на: комментарий от Lilly

И сразу тебе распарсит аргументы строки в аргументы MAIN.

ХОТЕТ!

В python есть click, опять же не из коробки.

* Есть junctions, например ты пишешь, «if $index ~~ 1|2|42», что означает «Если индекс это 1 или 2 или 42», что у питона на этот счёт? elif?

Как то так.

if index in [1,2,42]:
   ...

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

Популярный как Жока, но не легендарный как Бока

perl5_guy ★★★★★
()
Ответ на: комментарий от Lilly
print(f"{index} is certainly a Str or Int!") if isinstance(index, (str, int))

не уверен, что наверняка корректный код, — пишу с часов, — но должен быть (да, питон >= 3.6 для `f`-строк)

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

Я уж молчу, что постинкремент куцый и является инструкцией, а не операцией. Народу необходимо делать:

fmt.Println(x++)
Но толстосумы глухи к чаяниям широких масс.

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

Не уверен, что он от меня хочет (когда писал на питоне, отсутствие конкретики в SyntaxError сообщениях всегда напрягало, в Perl 6 информации обычно больше):

➜  ~ python3
Python 3.6.9 (default, Jul  5 2019, 09:47:14) 
[GCC 9.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print(f"{index} is certainly a Str or Int!") if isinstance(index, (str, int))
  File "<stdin>", line 1
    print(f"{index} is certainly a Str or Int!") if isinstance(index, (str, int))
                                                                                ^
SyntaxError: invalid syntax
>>> 
Lilly
()
Ответ на: комментарий от perl5_guy

Пилю уже скоро год как микросервисы на Go (у меня Go не основной язык, так python/php) - ни разу не было каких-либо проблем с пре/пост-инкрементом. У Go навалом недостатков, но они явно не тут.

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

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

my @array1 = (0..49999);
my @array2 = (2..50001);

my $promise1 = start @array1.map( {is-prime($_ + 1)} ).eager;
my $promise2 = start @array2.map( {is-prime($_ - 1)} ).eager;

my @result1 = await $promise1;
my @result2 = await $promise2;

say @result1 eqv @result2;

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

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

¯\_(ツ)_/¯

Честно, не в курсе. Можешь на #perl6 зайти и спросить, может кто из старожилов скажет лучше. Судя по апокалипсису, здесь, эта тема поднималась одной из первых и мнения были ещё аж в 2001-ом году.

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

Народу необходимо делать

Этому народу необходим brainfuck. И это не широкие массы. Постинкремент как операция - одна из основных сишных диверсий в IT, доведенная до абсурда перловой культурой однострочников.

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

Постинкремент как операция - одна из основных сишных диверсий в IT

C, наверное, и в штаны тебе насрал, да? Иди отстирывай.

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

Я тебя огорчу, но perl5 очень примитивный язык

Нет, твой пук в лужу меня очень веселит.

но с замороченным по историческим причинам синтаксисом

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

Питон и руби намного более сложные языки

Но обосновывать ты это не будешь, да?)

Так что чини ЧСВ.

То, что ты не понимаешь ничего в перле, не делает мое чсв высоким ;-)

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

Как человек, 10 лет зарабатывавший на хлебушек перлом с сожалением констатирую: фактически он мёртв.

Макаки на перле стали невостребованными. Сейчас котируются макаки на питоне.

А зарабатывают областью знаний, а не знанием конструкций языка.

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

То есть сложный синтаксис это плюс

Он сложный только в сознании питоно-макак. Для людей он выразительный.

необходимость следить за тем, что делаешь с байтами, потому что за тобой не подтирает задницу виртуальная машина, это «ублажение компилятора»?

С чего такой вывод?

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

PyQt то лучше и проще, и приятней. Они теперь даже официальные питоновые биндинги имеют. Эти биндинги вообще два разных проекта.

Это вообще топчик, мечта.

Это говнина.

Сами биндиги один под GPL другой под LGPL. Сам Qt, насколько я понял, частично под GPL, частично LGPL, частично только коммерчески доступен.

GUI приложения должны заворачиваться в самодостаточный exe-файл слинкованный со всеми зависимостями (иначе зачем вообще всё это делать?). Средство для оформления этого в приложение есть только у PyQT (у Qt биндинга нет такого инструмента).

То есть нужно купить Qt, купить PyQT.

Дальше возникает проблема того, что python как язык изначально не предназначен для заворачивания в exe-шник. Питоновские библиотеки тоже могут оказаться несовместимы с упаковкой. Это не всегда работает, а если работает, то не без проблем. Нужно при разработке сразу заворачивать в exe и только так запускать (сначала напишем, потом займемся упаковкой в exe - так не получится). Отдельная тема - нативные библиотеки которые тащите вы и которые нужны питону. И весить оно сравнимо с жирнотой типа жавы. Никакие pyinstaller и pyqtdeploy не решают проблему.

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

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

Связка Питон и Qt это говно. Это вариант работоспособный лишь в теории. На практике это малоприменимо. Это никогда не будет работать.

Нормальная (Java, .Net. - примеры таких технологий, когда были актуальны) технология такова, что на ней можно делать проект в десятки человеко-лет. Но с таким же успехом можно делать проект на пару часов.

Например в .net, ты за одну минуту получаешь EXE, который запустится у пользователя. Со второй минуты ты добавляешь то, за что заказчик будет платить.

Питон + биндинг + Qt - это три разных технологии, которые будучи как-то объединены не могут нормально собираться в самодостаточную GUI программу.

И ты получаешь падающий в рантайме говноязык у которого вместо системы типов предлагаются юнит-тесты (увлечение исключительно дебилов). Язык с невозможностью нормальных IDE (динамика же). Биндинги до «чужой» технологии (qt на c++), что тоже очень плохо. При этом ты должен платить за лицензии.

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

эффективный аналог PyUSB пока придумали не только лишь все

Эффективный, это когда есть не только pure python модуль, но и сишная обертка? 😁

https://metacpan.org/pod/USB::LibUSB::XS

https://metacpan.org/pod/USB::LibUSB

С maemo ты обосрался, пришла очередь с libusb.

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

Есть ещё вопросы?

Есть. Назови скриптовые языки с многопоточностью без GIL.

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

Делфи (пользовался до 7 версии) были хороши. Если отвращения к синтаксису object pascal'я в школе не приучили, и не писать всю логику в click handler, очень годная среда была, и компилятор оптимизирующий был.

Сколько головной боли потом было с дотнетчиками и библиотеками разных версий...

Deleted
()

vs - плохо.
Это типа «Полукопченая колбаса» vs «Сырокопченая».

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

Он останется в живых и без моих скромных потуг, потому что перл уникален, второго перла нет. И учитывая легаси (не в опыте неофитов, а в продакшене) и широкие возможности языка, многие перловики не видят смысла !даже! в перл6.

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