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)
Ответ на: комментарий от ossa

ЗЫЖ а что стало с 8 темой?

ничего, это метапрог 8 тему и переименовал, так как баг нашёл в своём трансляторе.

Перезалил метапрог и переименовал тему.

Ему ещё сказали, что это больше тянет на 8.0.1, а не на 9…

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

это метапрог 8 тему и переименовал, так как баг нашёл в своём трансляторе.

догоним и перегоним firefox :D

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

Ему ещё сказали, что это больше тянет на 8.0.1, а не на 9…

Зачем использовать 5 символов если можно 1? %) Тут вот кстати интересные мысли, идеи! - http://sentimentalversioning.org/

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

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

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

Да к выходу непрототипа можно будет нумерацию и сбросить. Это ж уже другая программа будет, по сути, и с другим названием.

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

На тебе изгнание нежити не работает же да? Ты как зомби из фильмов Ромеры. А то мне тут hobbit в упрек поставил что я тебя призвал, мне даже немного стыдно.

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

Не берите грех на душу, это случайное совпадение. Мы призвались сюда ещё с тех пор, как начали писать в теме о Метапроге из-под анонимуса (а было это в районе нового года). Когда тема закрылась для анонимусов, начали писать МЕРТВОПРОГ, а в темы о Метапроге более не заглядывали, потому как были посланы @liksys читать архив. Ну вот и прочли, но только одну тему ;-)

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

Ну вот и прочли, но только одну тему ;-)

Понимаю, у самого похожая история. Мы должны это пережить. Даже если не переживем корону тян в итоге.

Такими темпами тоже скоро в анонимусы переквалифицироваться придется. С другой стороны в легионерах оно попроще.

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

оно попроще

Ну если написать сервис для анонимного мониторинга ответов на анонимные комментарии, то допустим. Мы ещё летом собирались. Для борд есть куклоскрипт, который автоматом это делает, а тут? Может, ЛОРовские анонимы давно что-то подобное сделали, но не делятся? Есть, конечно, RSS-лента уведомлений пользователя anonymous, но она ж шумная донельзя, надо буквально каждую минуту обновлять, чтобы ничего не потерять, и вылавливать из неё «свои» весьма нетривиально.

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

Мне это прям напомнило как на ныне мертвом AG.ru модеры на 1 апреля открыли свою мини имиджборду. Ох сколько потом им пришлось разгребать.

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

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

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

Никаких упрёков, просто констатация факта :)

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

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

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