LINUX.ORG.RU

Perl 6 vs Python 3

 , ,


3

4

Дискач.

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

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

★★★★★

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

Ну выскажись на тему Perl 5 vs Perl 6. Переехал ли? С достоинствами чуть более понятно, но что относительно недостатков Perl 6? Например о времени старта скрипта уже сказали.

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

Как оно решает когда создавать новые потоки?

Шедулер считает оптимальное число тредов в зависимости от количества работы (если 1 треда хватает, то и ладно), количества ядер (первое время идёт довольно быстро, когда N тредов == N ядер коэффициент докидывания новых тредов сильно снижается по понятным причинам) и потенциальным дедлокам (смотрит на потребление CPU и выполнение, если думает, что тредов мало, чтобы разрулить дедлок, докидывает больше). Есть очереди задач, общая, для таймеров (для нормального латенси по времени) и affinity (для обработки потоковых асинхронных событий от IO, учитывающая, что скорее всего только один тред должен работать с данными от стрима).

Если хочешь поэкспериментировать и у тебя есть rakudo на борту, то просто попробуй позапускать разные примеры с включённой переменной RAKUDO_SCHEDULER_DEBUG, он логгирует, какие потоки и почему создаются. Я сам в core не пишу, но можешь зайти на #moarvm на freenode и спросить, там все нужные люди тебе расскажут, что спросишь.

К примеру, вот тебе сортировка сном(хихи):

my @a = (1..20).pick(*);
await @a.map: -> $n {
    start {
        say "About to await on $*THREAD.id()";
        await Promise.in($n);
        say "$n on thread $*THREAD.id()";
    }
};

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

Подводные камни - не без них, конечно, изредка бывает, что падает что-нибудь. Ты пишешь, что в go идеально, но у них правда ни одного бага на эту тему в багзилле? Тогда моё уважение. Вот прям сейчас наблюдаю в irc, как разработчики пускают скриптами тысячи потоков, чтобы отлавливать багцы, проводится разный там стресс-тестинг, когда бедный GC заставляют отрабатывать каждые выделенные 512 килобайт, и другие издевательства над кодом.

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

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

Про какие-то суровые дебри и особенности внутренностей я сам не в курсе, канал в irc указал, если интересно, то дальше, думаю, разберёшься.

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

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

Upd: Вроде если собрать версию из гита, но уже поддерживается --target=mbc

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

Не переехал. Лично мне не нравится ООП искаропке. Хочу выбирать модель согласно потребностям. Подход perl5 с волшебным кастом мне видится идиоматичнее: самый минимум, из которого растут как простые, так и развесистые ООП системы/модели под задачу, вкус, и тп.

Грамматики + макросы канеш бомба, но в perl5 регексы не так уж плохи, есть либы где давно можно не закатывать солнце руками. И с возможностью метапрограммирования, влезать в компайл-тайм, байткод машины проблем серьёзных нет.

Да, это не perl6 по подходу, и то, как видится мне, perl6 решит в будущем много проблем пятого, с анализом кода.

NativeCall канеш ракета, но мне хватает xs, и инлайна для скорости здесь и сейчас.

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

Легаси+инфраструктура для меня играют большую роль. Все равно большую часть времени тратится на изучение области знаний в решаемой задаче. А решая задачу, хочется брать инструмент, отточеный для этого годами, а не питон, руби или перл6. Чтоб ничего не ломалось, когда я найду решение на perlmonks 2000-х. И чтоб всегда была возможность сделать лучше, исходя из modern perl. И чтоб у этих решений уже была система тестирования и багтрекинга, и легкость мэйнтенинга, и портативность, и чтоб всегда можно было положиться на сообщество лучших айти хакеров.

Эволюционный подход мне больше подходит.

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

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

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

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

Т.е. ты скидываешь всё нужное в модуль foo.pm6, use его из скрипта или другого модуля, в первый раз он прекомпилируется и всё, праздник наступает.

Весьма интересная фича заключается в том, что есть участки кода, которые выполняются во время компиляции, к примеру, если модуль определяет рутину(функцию) EXPORT, то там ты можешь обычным Perl 6 кодом(никаких шаблонов, никаких макросов, любой обычный код) описать, какие символы экспортирует модуль. Оно будет посчитано один раз и потом всегда использоваться. Тоже самое работает для блоков BEGIN, e.g. `BEGIN { say 42 }` <- 42 будет напечатано во время одной компиляции и всё.

И казалось бы, нахрена оно нужно, но потом выясняется, что у тебя есть метаобъектный протокол, то есть инструмент для метапрограммирования, и ты можешь, к примеру, из конфигов или каких-нибудь эксемелей брать описания типов и конструировать их прям как в рантайме, только в компилтайме. F# умеет нечто похожее, но там это плагины компилятора нужно писать, а тут прям с полпинка и оно заводится, и никакой магии, всё чисто по стандарту. «use» может принимать любые аргументы пользователей модуля и они передаются в EXPORT в параметры.

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

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

Не тяни из гита, это плохая идея. https://github.com/tadzik/rakudobrew <- возьми вот это, поставит тебе 2019.07.1. Не понравится - удолишь .rakudobrew и .perl6, будет всё окей.

Не сижу на генте уже года три, не могу сказать, что там с пакетами.

https://github.com/skaji/p6env <- ну или вот это.

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

Мне бы как раз однофайловый скрипт прекомпильнуть чтобы сразу дергать moarvm. Собрал с гита - --target=mbc не работает

Хотя вот https://stackoverflow.com/a/57338424

Upd: заработало, думаю как запустить

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

Увы, пока что нет.

На прошлом gsoc был проект посвященный как раз компиляции в единый бинарник, насколько я видел, допилили всё, кроме множественных зависимостей. Если не боишься С, можешь хоть сам допилить, что и куда делать расскажут-покажут. Либо ждать, пока кто-то другой сделает, проект развивается силами сообщества. Хотя, есть также гранты от TPF, можно получить вполне денег за это. Я сам немного не по этим делам, к сожалению, хотя хотелось бы, конечно.

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

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

Короче похоже гиблое дело, ему все больше и больше moar --libpath надо и еще ключей, ладно, нафик.

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

ну V8 же, самый быстрый интерпретатор среди скриптовых языков и всё такое…

неправда. Мой транслятор brainfuck -> asm быстрее :)

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

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

В одной из частей comma есть нужное заклинание для запуска perl6.moarvm, --libpath там всего три, собирается по инфе из --show-config. Но, поверь, это явно не тот путь, который нужен.

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

И в подъезде небось

Канеш, и в подъезде. Ну всё, ты мне надоел, школотрон. Ой, извините, олдовый перл какир since 2015.

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

Не рвись так громко, румын. Ты же психолог, а не псих.

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

Racket

Секунд 10 компелять Hello World через raco exe в бинарь размером 21 МБ?

Запускаться 200мс? Если Typed Racket через raco exe, то 700 мс? Карл, типы влияют на производительность в рантайме?

Я пытался с ним рабоать, как же он меня взбесил этим всем дерьмом.

  • Fortran, C, C++ - 16 KB
  • D, Nim - 60 KB
  • Pascal - 150 KB
  • Rust, OCaml - 250 KB.

Так пускай размер не влияет на время запуска. Например SBCL высрал image размером в 38 МБ, но ничего, потом запустился за 15 мс

Если и пробовать Scheme, то похоже удалю я это дерьмо и попробую Guile или Gambit.

Racket - медленно собирается, запускается и работает. Рекордсмен по всему.

@monk вроде за него топит

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

monk вроде за него топит

Да, я с его подачи им и заинтересовался и потом забил на кложуру.

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

А как тут вообще выбирать, для Perl'a же библиотек нету. Ну хотя если устраивает то что есть, я бы выбрал Perl6, только нужно сравнить скорость запуска пожалуй.

Deleted
()

Хотя тут много чего может быть еще, кросплатформа, IDE/инструменты. Lilly, а для Perl6 есть какое нибудь умное дополнение? Я знаю в Perl5 были траблы с этим.

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

Умное дополнение в каком контексте? Если речь об IDE, есть Comma на базе intellij, ну и разные там плагины для вимов, но для разработки я лично их не вижу. Но это моё мнение и оно предвзято, так что YMMV.

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

В смысле автодополнение. Perl трудно разбирать так сказать, тут как с С++, вот у плюсов есть clang, который сейчас есть в каждой нормальной плюсовой ide, а что у Perl? Ничего так и не появилось? Или все же...

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

Ну тип clang юзается как автодополнятор.

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

1) Perl 6 разбирать проще, чем Perl, но за счёт его дикой динамики (см мой коммент выше о том, как модуль может экспортировать символы, о которых его код понятия не имеет) и мутабельности быть корректным в 100% случаев не получится. Не мешает быть корректным в достаточном большинстве случаев.

2) В Comma есть автодополнение для типов, методов и всего добра. В отдельном виде как в каком-нибудь ghc-mod - нужно писать. В открытом виде - сорцы Comma нужно открыть.

А С++ да, можно наесться нормально при разборе, по самое горло. К примеру, согласно стандарту, `delete delete a` это совершенно корректное порождение грамматики. Или `struct S { x, y, : 3, : 4; };` <- корректно по стандарту, смысла около нуля.

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

Оно там есть, и даже более крутое чем в тестовых IDE, можно там по аргументам искать, типам и все такое.

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

Ну молодцы ;) Но по мне фича второстепенная. Не скажу за других, конечно

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

С диском моим все будет норм. А вот от гоатсе никто не застрахован. И вообще, вдруг от увиденного бомбанет

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

А ты на метапроге написал уже нейросети? Есть софт — есть

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

Библиотек конечно много, но они были написаны когда то, а новые для Python появляются.

Алсо пример «нейросети», которую написали «когда-то» на перле? И если написали уже, что тебе не нравится?

Мне кажется, ты сам не знаешь, чего хочешь

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