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)

Ну что почти на 8 марта успел XD. Продолжаем обсуждать среду программирования мечты.

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

У меня уже были мыслишки поздравить антиметапрогеров с этим праздником. Но на носу еще один: годовщина первой Метапрог-темы.

metaprog
() автор топика

циклы по структурам

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

Еще я патентую оборот «локальный форк подфункции» и саму концепцию этого :)

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

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

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

И в чем бенчмарк? что он проверит? ты сам RNG писал? Ты понимаешь, что эта задача такая же бестолковая, как и вся твоя поделка?

anonymous
()

Гуру урановых самоваров снова в деле

Полагаю, его еще можно оптимизировать до уровня рукописного Си

Рукописного? На пергаменте, небось?

Бонус: будильник с проверкой введенных значений

Может, ещё квадратное уравнение не Шрёдингера?

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

В тестах в случае совпадения хешей в консоль/stdout выводится строка «мяу»

Концептуально. Джва года ждал, заверните!

anonymous
()

почему этого поехавшего до сих пор не забанили за распространение малвари через сомнительные файлопомойки?

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

После слияния веток с данными (или жесткими последовательностями выполнения) от противоположных условий дальнейшие блоки выполняются в обеих случаях.

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

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

AntonI ★★★★★
()
Ответ на: Гуру урановых самоваров снова в деле от anonymous

Полагаю, его еще можно оптимизировать до уровня рукописного Си

Рукописного? На пергаменте, небось?

В блокноте или другом текстовом редакторе.

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

У меня работает. Правда если комп не в спящем/ждущем режиме.

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

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

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

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

А кто недавно рассказывал что СУВТ замедлят метапрог до уровня питона, а потом жалобно отвечал «не вам мой уровень оценивать!!!!»? Кто ничего не знает, а сидит в программистком треде и еще поучает?

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

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

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

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

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

Фотки из дополнительного архива смотрел? Там где генерация случайной английской буквы. Вроде все должно быть понятно.

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

В 2018 диаграммы могут открыться, можешь посмотреть и запустить. Но 2018 Лабвью на ХР уже не идет, мне твой патч в прототип будет сложно принять (придется на 7 ставить новую версию). Лучше по возможности использовать именно 2013.

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

Да пока не до патчей. Просто посмотрю, может видео на ютую запилю. Хоть понятно станет что ты тут 12 с гаком тем предлагаешь.

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

Жду видосов, а тебя - в Метапрог онлайн.

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

Если трактовать ее безобидно, то это что то вроде

...
if(){}
else {}
...

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

Если трактовать ее по другому, то это ещё один потенциальный UB.

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

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

abcq ★★
()

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

При определенном вводе твой «будильник» громко падает в корку.

==2366== Process terminating with default action of signal 11 (SIGSEGV)
==2366==  Access not within mapped region at address 0x12
==2366==    at 0x10B7C2: main (in /home/test/mmmm/test)
==2366==  If you believe this happened as a result of a stack
==2366==  overflow in your program's main thread (unlikely but
==2366==  possible), you can try to increase the size of the
==2366==  main thread stack using the --main-stacksize= flag.
==2366==  The main thread stack size used in this run was 8388608.
==2366== 
==2366== HEAP SUMMARY:
==2366==     in use at exit: 9,490,534 bytes in 42,128 blocks
==2366==   total heap usage: 73,182 allocs, 31,054 frees, 139,466,911 bytes allocated
==2366== 
==2366== LEAK SUMMARY:
==2366==    definitely lost: 376 bytes in 92 blocks
==2366==    indirectly lost: 0 bytes in 0 blocks
==2366==      possibly lost: 33,638 bytes in 488 blocks
==2366==    still reachable: 1,672,435 bytes in 5,625 blocks
==2366==         suppressed: 0 bytes in 0 blocks
==2366== Rerun with --leak-check=full to see details of leaked memory
==2366== 
==2366== For lists of detected and suppressed errors, rerun with: -s
==2366== ERROR SUMMARY: 126694 errors from 20 contexts (suppressed: 0 from 0)
Segmentation fault

а еще он очень очень очень тормозит. Молодец, хороший «будильник». Пеши исчо.

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

я понимаю что это про условную конструкцию, но от этого она понятнее не становится :)

После слияния веток с данными (или жесткими последовательностями выполнения) от противоположных условий дальнейшие блоки выполняются в обеих случаях.

Каких веток, с какими данными?

Что такое жесткие последовательности выполнения, существуют ли мягкие последовательности и всегда ли они являются последовательностями?

от противоположных условий, что за такие условия и чему они противоположны? Могут ли существовать условия которые не противоположны?

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

Хотелось бы конечно пояснения какого-то более внятного. И почему сделано именно так.

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

Это уже два third party окружения, одно из которых закрытое. Пока линукс не целевая платформа, а сабж не перестанет зависить от проприетарщины, это оффтоп.

ТС, действительно, а нафига ты это здесь постишь? Ты — виндузота, воруешь проприетарщину, местные каноны тебе не близки, пилишь свою муть под оффтопик. Что ты здесь забыл-то?

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

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

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

Теперь вместо фразы «copy-paste» или «копирование» можно говорить «локальный форк подфункции». Казалось бы зачем не то, зачем придумывать новую фразу на существующее понятие, а то, что можно же в функцию передавать функцию (лямбду), которая будет возвращать генератор случайных чисел. И тогда можно спокойно обходиться без копирования кода, ой простите, локального форка… Или метапрог не умеет в метапрограммирование?

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

не забудьте занести членские взносы в конце месяца за использование запатентованного ноу-хау, хорошего дня! :3

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

Ты — виндузота

Вообще-то линуксоид, хоть и гоняю винду под виртуалкой.

проприетарщину, местные каноны тебе не близки

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

пилишь свою муть под оффтопик

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

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

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

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

Ну да это же не он, это вроде ликсайс из под анонима, «корки» это его словечко.

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

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

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

чтоб Метапрог был не похож на текстовое средневековье

А был похож на тёплый ламповый каменный век с наскальной живописью.

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

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

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

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

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

Нажми на белую стрелочку сверху панели Лабвью. Запустится. Или запусти ехе - там запустится сразу.

Очень не советую разворачивать на весь экран - будет жутко лагать.

metaprog
() автор топика

В Метапроге «сам на себе», когда он появится, подобных неудобств быть не должно.

И когда это планируется? Я джва года жду…

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

Компиляция в кадре это режиссёрский замысел?

Да

Залей ещё с отдельными vi

ок, залью

Нажми на белую стрелочку сверху панели Лабвью. Запустится. Или запусти ехе - там запустится сразу.

Сейчас попробую

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

Что поищет? Он в Гугле найти не может определение полного квадрата, а ты ему предлагаешь баг в говнокоде найти)

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