LINUX.ORG.RU

Perl 6 vs Python 3

 , ,


3

4

Дискач.

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

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

★★★★★

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

Нынче же новая тема - делать WebAssembly реализацию. Вот кстати могло бы взлететь норм.

Но там уровень еще ниже и пришлось бы пока-что даже свой сборщик мусора тащить

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

Нынче же новая тема - делать WebAssembly реализацию

Википедия пишет, что WebAssembly появился в 2015-ом году и только в 2017-ом появился «референсный» интерпретатор, moarvm (емнип) начали пилить в 2013-ом и уже в декабре 2015-го года состоялся первый «релиз» языка.

То, что можно сделать - можно, конечно. Но даже так, беседы о том, как круто было бы сделать всё зашибись и всем добро даром, это одно, а непосредственно сидеть и отлавливать баги в GC или реализовывать указанные выше фичи на уровне webassembly это, увы, другое. Я буду вполне доволен если просто оптимизируют текущий стек (moarvm+nqp+rakudo), чем люди активно занимаются.

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

Ну просто я гарантирую дикий хайп по WebAssembly следующие годы. Там делают WASI, системный интерфейс. И штатный опциональный сборщик мусора.

И если это сделать, то Raku будет гоняться и на серверах всех платформ и во всех браузерах

Вон уже новая тема - edge computing. Когда пихаешь свой софт не в облачные датацентры, а во все edge mini датацентры, например такое делает Cloudflare. И они хотят больше контроля при той же защите. Хотят применить WebAssembly вместо докера для того чтобы давать людям возможность запихнуть во все edge точки свои лямбды

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

https://developers.cloudflare.com/workers/about/how-it-works/

Там только V8, спящие инстансы с твоим кодом, ждут своего часа. Задеплоены в 194 городов. Естественно если у тебя WebAssembly модуль, то хоть на плюсах пиши высокоэффективную математику, Cloudflare разрешит это в sandbox

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

Или у флатпака тут какие-то свои преимущества добавляются?

У снапа и флатпака есть аппсторы, убунта к примеру гармонично имплантирует снап, федора флатпак. Ну то есть юзеру не надо куда-то там идти, искать, жмакать. Уже есть большая кнопка «СДЕЛАТЬ ХОРОШО». Нажимаешь, тебя спрашивают - «а каким именно образом?» - «Comma» - кнопка «ХОЧУ!» и все волшебным образом как надо куда надо поставилось. Причем можно не только софтину, но и нужный рантайм, чтобы юзер не чесал репу и все работало из коробки. Мы живем в эпоху тотальной культурно выражаясь прокрастинации, поэтому чем меньше телодвижений для попробовать - тем чаще лучше больше будут пробовать.

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

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

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

С целью приседаний с утяжелениями пересобрал сейчас парочку своих утилит на WebAssembly. Overhead - 9 мс при старте на JIT. Внешне даже не скажешь на какой странной штуке оно работает

Кстати, забавно, не помнится мне чтобы был JIT, но не было GC и не было даже счётчика ссылок. Просто абстрактный ассемблер превратился в нативный за 9мс. Но с security sandbox для IO

@stevejobs

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

реализовывать указанные выше фичи на уровне webassembly

MoarVM is written in C, and is designed to (eventually) have a couple of build targets: a dynamic library (so it can be loaded by other VMs or programs that embed it) with a small executable front-end wrapper

Все уже реализовано до нас, Emscripten. Предполагаю, что попотеть таки придется, но не думаю что прям убицца какая задача. Видимо просто некому и некогда.

А интересно было бы. ЯП вызывает симпатию, по крайней мере на первых порах. Очень органично вплетены фичи и конструкции, нет ощущения, что «вот тут мы сначала забыли, а потом вспомнили и решили проблему при помощи клея, скотча и кусочка синей изоленты"ю Может это пока я не разгрыз еще ничего толком )

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

Звучит интересно, теперь кому-то это нужно пилить.

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

Видимо просто некому и некогда

Есть такой фактор, но знающих, что делать, всегда больше тех, кто волонтёрствует. :S

Я сам не core разработчик, а так, сбоку где-то, мозгов самому пилить низкоуровщину у меня нет, подчинённых тоже нет, денег килобаксами донатить тоже, мм, такое. Когда спрашивают за фичи или отдельные детали, которые я знаю - могу ответить. Принимал бы я решения, что дальше делать... Эти люди на лор не ходят. :]

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

NQP насколько сильно усечен по сравнению с raku? Судя по размерам очень, но вот конкретно, что там выпилено? Рантайм раку что-то около 40 метров, так? MoarVM на удивление легенький.

Если остаться наедине с NQP много ли можно надевелопить?

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

Если остаться наедине с NQP много ли можно надевелопить?

Можно и на брейнфаке, было бы желание...

Идея очень не очень по ряду причин:

1)Нет почти всего сахара и высокоуровневых конструкций. Нет типов из CORE в нормальном виде, т.е. вот этих вот Supply/Supplier, DateTime, да даже Int-ов(которые big int), есть только железные инты, строки, массивы, хеши, а также доступ к мета-моделям. В теории, можно их завести руками портировав всё, но... Нет gather/take, нет оператора присваивания (есть только прямой «бинд», который игнорирует контейнеры), нет await для промисов, нет supply, операторов мизер, given/when, я думаю, много чего ещё. Писать можно, но это получится такое подобие lua по мощи, что ли, при этом гораздо более уродливое и без божественного jit-а. Если пакет молока нести тяжело, то можно всё молоко вылить - один пакет будет, конечно, нести легче и даже быстрее, но только толку уже - примерно так это выглядит.

2)Я знаю, что на этот аргумент всем всё равно, но nqp это тулчейн для разработчиков компилятора, а не для пользователя. Что-то отламывают - тыкаешь пальцем в себя.

Вообще, на данный момент, nqp в мире раку это как аналог ассемблерных вставок сишного кода. Если что-то позарез нужно выразить, но компилятор не даёт для этого прямых средств - ты можешь копнуть глубже (хотя скорее всего эта невозможность выразить это баг, который можно решить, ну или ты Серьёзно Делаешь Не Так). Что-то можно сделать быстрее, применив его, если знаешь как. Но выкидывать весь «верх» и писать чисто на нём в повседневности это особый вид интересного времяпровождения.

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

Python 2.7 Goury ★★★★ (17.09.19 22:22:42) Срал я на PEP8 и на его рекомендации. Я пишу код так, чтобы хотелось ещё и чтобы было удобно и приятно.

Слыш, комментарий к пользователю не резиновый.

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

Нашел хорошую лекцию по NQP, помогла разобраться и покопаться в кишочках. Новая серия нубских вопросов )

1. Хочу откомпилять в байткод, а потом байткод выполнить на moarvm. Есть какая-нибудь толковая дока на этот счет?

2. grammar это круто, а дебажить это как? Парсер упал - Nil. Srsly#?! Что делать чтобы вывести информацию об ошибке и пальцем ткнуть в то самое место?

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

Что делать чтобы вывести информацию об ошибке и пальцем ткнуть в то самое место?

Если нужно отдебажить чужое, то: https://github.com/jnthn/grammar-debugger и оттуда Grammar::Tracer, например. Или https://github.com/nkh/P6-Grammar-Tracer-Compact

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

grammar Foo {
    token foo {
        <relative-part> [ '?' <query> ] ? [ '#' <fragment> ] ?
        [ $ || <.panic('unexpected text at end')> ]
    }   # ^ пытаемся здесь сматчить конец строки, если не получается, вызываем panic

    method panic($reason) {
        say "Tried to parse self.orig()";
        # ну и другие методы кроме orig можно дёргать чтобы узнать, в каком месте строки курсор и т.п.
        die X::Foo:ParseError.new(...);
    }
}

Если ты наколбасил 100 правил сразу, ничего не проверяя, тестов нет, а глаза горят… То так не надо делать.

Хочу откомпилять в байткод, а потом байткод выполнить на moarvm

Эээээм… Ты хочешь написать компилятор (или скорее бекенд) в байткод moarvm? Или свой скрипт откомпилировать и дёргать его на moarvm напрямую, без бинарника perl6? Если второе, то для скриптов этого нет, для модулей это автоматически происходит за счёт прекомпиляции.

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

Весь Raku парсится грамматикой, написанной на nqp, занимающей примерно 6000 строк - https://github.com/rakudo/rakudo/blob/master/src/Perl6/Grammar.nqp Это красивым кодом и с комментариями. Кастомная грамматика языка для Comma занимает чуть меньше пяти тысяч строк кода.

Я даже не знаю, что можно такого делать, чтобы паниковать.

Плюс ты можешь тестить отдельные правила с частями ввода, например вот так:

grammar Foo {
    rule TOP { <heh> <foo> }
    rule heh { 'heh' }
    rule foo { 'foo' }
}

say Foo.parse('hehfoo'); # чего-то не сматчилось
say Foo.parse('heh', :rule<heh>); # а отдельное правило работает, проблема где-то выше...
Lilly
()
Ответ на: комментарий от Lilly

Если нужно отдебажить чужое

Смотри, я запилил свой литл найс DSL. Юзер уже не под отладчиком, и никогда не будет. Он просто зафигачил свой «{Hello} ( [World]» и хочет чтобы его носом ткнули в источник проблем.

Эээээм… Ты хочешь написать компилятор (или скорее бекенд) в байткод moarvm? Или свой скрипт откомпилировать и дёргать его на moarvm напрямую, без бинарника perl6? Если второе, то для скриптов этого нет, для модулей это автоматически происходит за счёт прекомпиляции.

Хочу перетащить moarvm в вебку, при помощи Emscripten. Предположим у меня теперь есть moarvm, дальше как жить? Тащить рантайм раку в несчастную html страничку и канпелять по месту? Звучит не очень. Норм вариант - скомпилировать в байткод что надо и на страничке волшебно подкладывать его (байткод) moarvm. И наша чудная программулина выполняется прямо на страничке браузера изумленного юзера.

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

Смотри, я запилил свой литл найс DSL

Пример с panic-ом выше - то, что ты хочешь. В вопросе было слово «дебажить», немного вводит в забуждение, что именно нужно.

Хочу перетащить moarvm в вебку, при помощи Emscripten

Не советчик, рекомендую зайти на #raku на freenode и спросить там юзера pmurias, он писал бекенд под JS, толково проконсультирует по всем вопросам.

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

свой скрипт откомпилировать и дёргать его на moarvm напрямую, без бинарника perl6?

Есть на этот счет какое-нибудь howto? Или пример. С разбегу не получилось, байткод получил, исполнение на moarvm не взлетело.

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

Есть на этот счет какое-нибудь howto? Или пример

Без понятия, спрашивать на #raku нужно, как завести.

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

Поскольку пишу хелловорлды непонятно сильно ли жручий рантайм. Есть возможность с чем-нибудь сравнить? Хотя бы среднепотолочные оценки, типа «легче жабы, но страшнее питона».

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

Спасибо за ответы, буду собирать грабли дальше.

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

Хотя бы среднепотолочные оценки, типа «легче жабы, но страшнее питона»

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

Может есть какой-нибудь тул чтобы перегнать регулярки перла на раку?

Есть adverb совместимости:

say 'hello world' ~~ m:Perl5/^hello (world)/;
say 'hello world' ~~ m/^hello (world)/;

Но это скорее костыль по сути.

Тулзы для конвертации нет (или я её не знаю), но я как-то написал компилятор из ECMA262 регулярок (знаю, звучит смешно, но надо было) - https://github.com/edumentab/p6-ecma262regex

Где-то вменяемое описание грамматики перлового языка регекспов есть? Если да, можно написать такой же компилятор, только он, конечно, посложнее будет. Не знаю перл достаточно хорошо, чтобы уверенно сказать, что можно 100% покрыть, но если реально 90%, то будет неплохо.

Там цена вопроса сконвертировать (E)BNF в нативную грамматику и прописать класс, который будет по AST-у делать нужную текстовую форму.

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