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)

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

Туториал? Читать макулатуру?

Пройди интерактивное обучение. Я про него.

нах мышь! Все долдно быть очевидно, ведь это графическое программирование!111

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

то есть строки, которые вы так пиарите и все ваши сувт аналоГовнетные, требуют ручного управления и всех параметров в ручную?

Нет. Явный malloc это я говорю про то что он есть в каком то блоке.

Это схема и, например, функция, которая используется как колбек в примере

Циклы и функции не могут выпустить или впустить последовательность/проводок итд. С функциями не все так очевидно, а про циклы я подзабыл просто.

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

Нет там никакого обучения, если поставить рантайм лабвью и запуститить Metaprog.exe вылазит унылое окно с выбором пути для компилятора. Ничего в нем нет, кроме стандартных кнопок Labview. Ни диаграм в нем не посмотреть, не в саппорт метапрога не написать. Даже закрыть его нельзя, приходится через диспетчер убивать. Короче вы троллите с ТС почерному. Удалил все нафиг, включая лабвью. Мир праху проекту метапрог.

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

Не не не Девид Блейн, хватит наигрался. Делайте человеческий интерфейс или досвидания. Пойду мукулатуру лучше почитаю.

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

ты просто хейтер славянского ПО!111

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

Может те еще надо что бы ТС выяснил наконец что такое полный квадрат? Древние русы такого не знали и нам знать не велели!

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

Так в сишке и питоне тоже 10 проходов. т.е. сишка ~1 сек на проход, питон 3.3 сек на проход.

/me идет жаловаться модераторам на 4.2

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

Я вас поздравляю! От всей души и всего сердца. Жму руку, и жду наконц-то хеллоуворлд без утечек памяти.

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

Не жди, делай его сам как тебе надо. Тебе все же никто ничем не обязан. У меня вот желания фиксить несуществующие утечки нету, у ОПа скорее всего тоже, ты так долго можешь ждать...

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

Скорее в языках программирования…

В старом коболе все переменные глобальне и, вроде, в первом фортране. Как там в 60х годах?

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

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

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

У меня вот желания фиксить несуществующие утечки нету,

2GB выделено, 2GB утекло - несуществующая утечка. Норм троль, респект.

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

Используй будильник по назначению и все будет в кайф.

все будет в кайф.

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

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

Ну вот и все, какие могут быть претензии вообще? Тем более к метапрогу как к инструменту, думаешь фильтр что ли нельзя добавить?

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

Ну вот и все, какие могут быть претензии вообще?

Действительно, братишка, какие претензии.

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

не хватает тестов на метапроге. он бы там всех зарулил и сразу бы все «очевидно» стало.

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

То есть прога на метапроге (который есть чистый как слеза комсомолки Цэ) вчистую слила мерзкой и ненужной скриптухе на питоне O_O? Однако не тянут СУВТы даже против PyObject*…

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

Однако не тянут СУВТы даже против PyObject*…

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

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

Да я бы сделал. Не компилится он нифига. Даже с установкой SDL. Сейчас еще Clang попробую. А трек отличный.

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

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

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

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

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

ТС тупо нагло врет

Вас это удивляет?! Это его обычное поведение, причем он то искренне убежден что говорит правду. Альтернативная метапрогвселенная очень алтеранативна.

AntonI ★★★★
()

В Метапрог-диагармме подфункции/поддиагарммы

а по-моему он просто издевается.

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

Онжедеть - понять и простить, обнять и плакать… да @hobbit?:-)

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

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

«по-настоящему» случайные числа

это так мило.

почти «желаю, чтобы все»

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

О да! Причем настоящесть случайных чисел заключается в том что они… не повторяются от запуска к запуску! Тадам!!

Граждане, не пользуйтесь rand- ом - он выдает ненастоящие случайные числа которые повторяются!!!1111

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

Я с «ненавиоящего rand», у которого «повторяется», тоже проорал.

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

настоящесть случайных чисел заключается в том что они… не повторяются от запуска к запуску

Л - логика.

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

Какие вам ещё доказательства? Вы что, не видите, как из этого синего кружочка жгутиком идет вывод в желтый прямоугольник. Желтые прямоугольники выводятся из синих кружочков. Шах и мат.

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

Синий кружочек, соединённый красным жгутиком с синим, даёт синий, синий с красным даёт красный. Диды в пещерах рисовале и внуки должны

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

Синий кружочек, соединённый красным жгутиком с синим, даёт синий, синий с красным даёт красный.

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

anonymous
()

Ту туду-туууууууууууу тыга-дыга-дык Ту ту ту ту дууууууууууууууу

Ту ту ту тУУУУУУУУУУУУУУ ТУ ТУ ТУ ДУ ТУ ДУ

ТУДУДУ-ТУУУУУУУУУУ ДУТУДУТУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУ

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от anonymous

Кстати да. Больше свободы! Пусть каждый сам решает какой он кружочек и какие жгутики куда соединять!

Свобода, Прогресс, Метапрог!

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

Это пока науке не известно. Известно только что строку он перевернуть из консоли не умеет. А до кружочков ему ещё лет 5 как минимум рисовать.

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

Ура! Дайошь! Квадратное уравнение в 3 года! Метапрогеры всех стран соединяйтесь (жгутиками)!

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