LINUX.ORG.RU

Метапрог-прототип, версия 11 + бенчмарк

 , ,


1

3

Следующая версия:

Метапрог-прототип 13 + LOR Browser

Скачать (читать файл с названием своего языка из архива!):

https://www111.zippyshare.com/v/Nq5mH4Sa/file.html

Версия 11 содержит оптимизации транслятора и исправления в Метапрог онлайн. В остальном различий с описанием 10 версии нет.

Версия 10 содержит несколько хотфиксов для транслятора диаграмм и онлайн-функционала. В остальном различий в сравнении с описанием 9 версии нет.

Версия 9 содержит хотфикс: в 8 версии были проблемы со скачиванием проектов через Метапрог онлайн. В остальном различий в сравнении с описанием 8 версии нет.

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

Пока что тест получился в целом неважнецкий, где-то на уровне С++. Полагаю, его еще можно оптимизировать до уровня рукописного Си, так как Метапрог может непосредственно оперировать сишными функциями, если надо - даже без помощи метапроговской стандартной библиотеки. Архив с сишными трансляциями бенчмарка и будильника на Метапроге:

https://www32.zippyshare.com/v/JlUIhEAn/file.html или https://drive.google.com/file/d/1lu1RVqqXEVGgZbviCfwrxFMhdDgvo6LT/view

Доступ к Метапрог-диаграммам можно получить через Метапрог онлайн (репозиторий «бенчмарк ЛОР»), открыть - в прототипе Метапрога.

Каждый бенчмарк проходит 10 повторений, во время каждого выводится 4 числа:

Номер повторения (0-9).

Время (миллисекунды) генерации 100000 строк длиной 100 байт и подсчета их хешей.

Время (миллисекунды) генерации 1000 строк по 20 байт и подсчета их хешей.

Время (миллисекунды) поиска вхождний по хешам.

В случае каждого нахождения вхождения в консоль/stdout выводятся подстрока и строка.

В тестах в случае совпадения хешей в консоль/stdout выводится строка «мяу». Кстати, совпадения хешей случаются даже с 20-символьными подстроками, хотя самих вхождений нет (идет дополнительная проверка).

Условное схождение присутствует, например, в функции генерации случайной английской буквы (A-Z_a-z.bmp, между условием и «+»). После слияния веток с данными (или жесткими последовательностями выполнения) от противоположных условий дальнейшие блоки выполняются в обеих случаях.

Есть разные функции генерации случайного числа, и они совершенно разные по скорости. Если использовать randombytes_uniform из библиотеки libsodium - генерация случайных строк работает в сотни раз медленнее, чем rand. Но функция randombytes_uniform из специальной криптографической библиотеки дает «по-настоящему» случайные числа, в отличие от строк из псевдослучайных чисел (rand), которые повторяются даже между разными запусками программы. Есть тесты, использующие разные функции для случайного числа при генерации 100000 строк по 100 байт. Генерация 1000 строк по 20 байт погоды не делает, тут во всех тестах randombytes_uniform. Уверен, что rand сократило б время генерации 1000 строк по 20 байт до нуля миллисекунд.

Подсчет хешей функцией nk_murmur_hash во всех случаях занимает ничтожную часть времени.

Также для тестирования на достоверность и корректность работы программы есть тесты с подстроками по 5 и 3 байта вместо 20. По ним видно, что бенчмарк работает корректно.

В Метапрог-диагармме подфункции/поддиагарммы могут быть представлены в виде ссылок на файлы (серо-зеленая дискетка при наведении мышью) или же быть частично или полностью отвязанными от файла на диске и полностью находиться в теле файла диагарммы (в таком случае цвет дискетки зависит от наличия и соответствия файлу на диске - путь к нему все же хранится в кластере/структуре диаграммы). Иногда это удобно, чтобы, например, сделать локальный форк подфункции. Например, чтобы использовать rand вместо randombytes_uniform, достаточно было форкнуть диаграмму основного бенчмарка и сделать отвязку от файлов на диске цепочки поддиаграмм, отвечающих за формирование массива случайных строк вплоть до функции генерации псевдослучайного числа. В итоге получились локальные форки функций без необходимости сохранять их в новые файлы. Подобным образом можно управлять и типами, такими как структура/выбор (struct/union), структура условного выбора типа (СУВТ, прямых аналогов в Си нет), пронумерованный список (enum) итд.

Бонус: будильник с проверкой введенных значений (сишная трансляция в файле alarm.c в архиве с бенчмарком, Метапрог-диагарммы в Метапрог онлайн, проект «будильник»).

Из недоделанного: схождения по переключателю (switch) корректно работают только в случае схождения всех без исключения случаев, в том числе «інше»/«другое» (default).

Также заметно, что диагарммы бенчмарков «оплелись» в области поиска подстрок. В прототипе Метапрога работать не очень удобно: есть ограничение на размер окна (если еще увеличить - будут слишком большие задержки отрисовки) и не только, переместить блок входа в цикл по условию (do... while), когда он стал перекрывать вход в типованный цикл (for) было уже довольно сложно (надо переподключать проводки и жесткие последовательности), решил оставить все как есть - все равно работает. В Метапроге «сам на себе», когда он появится, подобных неудобств быть не должно.

В планах: циклы по структурам, переключатели (switch) по многотиповому типу, возможно макросы.

Предыдущая версия: Метапрог-прототип, версия 7 + графические диалоги на Метапроге



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

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

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

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

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

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

Я думаю нет смысла это им объяснять, ведь своего мнения у них нет, а есть только мантры их главного божества.

Кстати, я абсолютно уверен, что царя в качестве объекта вожделения эти два индивида выбрали исключительно из-за его забавной манеры общения, а не якобы скилла в сишке, учитывая, что сишку метапрог не знает, а также обильное воровс^W использование его оборотов речи

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

Я сейчас пишу не «по царю» совсем, только ворованный LLVM упомянул, лол. Скорее наоборот ушел в сторону противоположенную. Вообще смешно видеть как лоускильные лалки подгорают с любого упоминания царя.

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

есть компилятор С который собирает исполняемые файлы, компилятора метапрога нет и следовательно он ничего не исполняет

Если появится процессор который исполняет С код напрямую, метапрог станет компилятором?

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

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

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

Вы только что сказали что С код будет напрямую исполнятся процессором

Да.

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

Какие преобразования? Я не телепат. Так то в x86 стоит RISC процессор который занимается реальным исполнением.

Поэтому ни о какой компиляции речи уже и не идет.

Я не знаю как ты сделал такой вывод.

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

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

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

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

Получается не существует Java компилятора в байт-код? Так как там нету промежуточного представления.

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

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

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

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

Байткод промежуточное представление для ВМ которую условный сан написал самостоятельно.

Есть ли тогда у Scala компилятор? Если нету, то мысль я твою понял. Ну компилятор я напишу при раскрутке.

Царь кстати примерно тоже самое писал:

Ты просто взял украл gtk, украл си, украл libc и построил на их базе абстракции. И ты никак не научился и не научишься писать кода, как и никто из пользователей абстракций. Ты сможешь только компоновать то, что за тебя сделают люди.

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

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

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

Раз вы цитируете кого-то то тогда скажите в чем смысл этой цитаты по-вашему, в чем именно воровство? Раз вы разделяете эту точку зрения. Для меня это выглядит так на примере питона, есть язык С, на нем реализован язык питон, который использует библиотеки языка С для реализации себя. Но напрямую питон в С не транслируется, не использует компилятор языка С чтобы получить исполняемый файл, так в чем воровство? Если питон был бы написан на фортране было бы воровство фортрана что ли? Это же бред чистой воды, не так ли?

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

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

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

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

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

разница каких-то 25 раз

С ринатовским бенчмарком на хешах? Он же написал, что там ошибка. Правда не соизволил объяснить какая.

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

Если ты про антоновский бенчмарк, то точно ли там 25 раз? Может в 2,5? Я там не разглядел внешний цикл на 10 итераций.

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

Лямбды уже можно делать через сишные колбеки, но это неудобно. И сишные колбеки поддерживают только один выход, а метапроговские функции могут иметь много выходов (или не иметь ни одного).

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

вы просто предлагаете метапрог который из квадратов и линий лепящий сразу выхлоп на С без промежуточного представления

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

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

Локальный форк и копипаст - это не то же самое.

В чём разница?

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

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

А можно было бы иметь одну диаграмму бенчмарка, и туда просто передавать функцию для генерации случайного числа

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

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

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

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

Умственная отсталость антиметапрогеров пробила очередное дно. Смотреть код, но не увидеть в заголовке командную строку для компилятора - это надо еще умудриться. Ведь требуется линковка, без которой ты черта с два что-либо скомпилируешь.

А «музыка» говно. Блочить надо не за нарушения «авторских прав», а за то, что это говно слушать противно.

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

Там только мои попытки понять всю прелесть Labview. Увы безуспешные.

Если ты даже спросить у меня что-либо не догадался - проблема не в Лабвью или Метапроге. Тот же stasolog все что непонятно у меня спрашивает и денег за ответы я не беру.

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

Ну если ты старался только ради того, чтобы у меня «пригорело», то это говорит лишь о твоем ослоумии.

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

Ну давай спрошу. Как собрать будильник. Дай пошаговую инструкцию для «тупых антиметапрогеров». Не могу я твой чудо софт оценить, не собирается.

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

метапрог ответил, что он в этом нифига не разбирается

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

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

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

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

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

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

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

Если я забодяжу, или найду реализацию эксепшенов для си, то си станет скриптухой в терминологии метапрога?

Нет.

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

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

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

Тысяча отборных программистов метапрога... Они уничтожат все твои переменные, все функции и указатели

Переменных в Метапроге нет, но функции и указатели есть. Исправляй.

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

Ну то есть то, о чём я писал, что метапрограммирования в виде лямбд нет.

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

Метапрог-прототип, версия 11 + бенчмарк (комментарий)

А лямбд еще нету.

stasolog

Метапрог-прототип, версия 11 + бенчмарк (комментарий)

Лямбды уже можно делать

metaprog

Вы противоречите друг друг, вы уж определитесь, есть ли лямбды или их нет.

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

Ну ты либо осиливаешь сборку, либо тебе нужен просто бинарь.

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

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

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

И что?

Ты написал, что лямбд нет, автор метапрога написал, что лямбды можно делать, то есть они есть. Вы противоречите друг другу. Кто из вас двоих врёт?

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

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

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

Или дай мне файлообменник получше.

github.com и аналоги. Даже для двоичных файлов можно по крайней мере отслеживать, какие файлы изменились и когда, привязывать к комментариям изменения.

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

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

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

Веб-интерфейс же. Можно вообще без консоли обойтись наверное.

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

Мануалы читаются однократно. И пойми, твой комментарий — ещё одна форма высказывания «я не осилил».

А вот для тех, кто будет качать, гитхаб гораздо прозрачнее любой файлопомойки.

hobbit ★★★★★
()

Ладно, тут вопрос поинтереснее есть.

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

Опять диагармме… Если не комментарии, то хоть бы ОП вычитывал, диагарный хлопец. Ладно. Собственные диаграммы, как я из этой фразы понял, в файлы сохранять уже можно, так?

А формат этих файлов где-нибудь описан?

И соответствует ли он тому формату, который будет в «метапроге-на-себе»?

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