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)

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

а это вы его спросите))

но подозреваю что нет, не станет

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

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

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

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

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

Дык нельзя переть против аксиоматической базы… Хотя ТС и на это способен:-)

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

В первых темах кто-то уже делал вроде. На перле на сколь помню.

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

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

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

Да какая разница? Всё равно они все ссаный текст компулируют. Отличия V10 от ванкеля на фоне варп-двигателя USS Enterprise никого не волнуют.

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

Отличия V10 от ванкеля на фоне варп-двигателя USS Enterprise

Там ТС очень интересовало какой модели состав сбил Анну Каренину. Так что я не был бы так уверен. Хотя на ЯП его любознательность не распостроняется походу.

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

Я собрал на gcc 9 но оно виснет просто, разбираться не стал вчера.

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

Что бы работало без segfault'ов нужно самому генерировать incl.xml и транслировать диаграммы в С. Это вообще чудо что например на винде будильник собирается без изменений в С коде который ОП нагенерил в линуксе.

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

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

Ну так Rust же использует ворованный LLVM и все рассказывают какой он быстрый, ты я надеюсь это тоже осуждаешь?

Банальный фибоначи в цикле превращается в несколько экранов нечитаемого кода.

Это много где так. Уже и выхлоп какой то тулзы я давал для python -> c

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

Ну так Rust же использует ворованный LLVM и все рассказывают какой он быстрый, ты я надеюсь это тоже осуждаешь?

Главное корректность работы программы. Скорость дело второстепенное. кому нужна быстрая программа которая через раз падает в кору.

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

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

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

УМВР, а все потому что как я сказал под каждую систему и компилятор нужен свой incl.xml, это уже раньше обсуждалось.

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

Запускаешь висит в процессах и жрет ЦП на 100 и нифига не происходит. Я подождал для преличия минуты 2 конечно, но в консоли так и осталась пустота.

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

Ну так это заслуга по большой части Латинги & Co который написал/и сдл так, что код кроссплатформенный. В коде ТС нет ничего кроме сишного стока который от платформы к платформе не меняется и достаточно универсальный, никакого чуда в общем-то.

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

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

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

Что бы работало без segfault’ов нужно самому генерировать incl.xml и транслировать диаграммы в С

Я вот смотрю на код Метапрог-прототип, версия 11 + бенчмарк (комментарий) после санитайзера и не вижу там ничего, что могло бы «привязать» код к системе, на которой генерился этот incl. В первых темах это можно было еще объяснить разъехавшимися структурами, потому как там на основе xml генерились свои, вместо пользования имен из хедеров, тут же я вижу использование имен из хедеров и нет никаких привязок даже к размерам поинтеров. плюс в исходнике вообще нет никаких «генеренных» инклюдов, стало быть код не использует никаких #ifdef, которые могли бы сделаать неправильный бинарь на другой системе. По-мойму кто-то врет и скрывает банальный UB.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я уже и подзабыл! Но вот вам переворот строки как в питоне (с поддержкой русского, английского, испанского итд) - https://ibb.co/5LhS5dQ. Кстати, блок вытаскивания элемента из массива практически шаблонная функция, так как принимает любые типы массивов, надеюсь Unicode4all теперь доволен, можно ведь делать функции и для списков каких нибудь.

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

Ты написал:

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

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

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

Допустим ты сделал две абсолютно разные функции для callback'a, теперь тебе нужна последняя третья функция, она отличается от второй только в том что в одном месте нужно заменить плюс на минус. Это упрощенный пример, но я надеюсь все понятно...

stasolog
()

Вот ради прикола наговнякал на древнем тикле интерфейс «будильника» https://imgur.com/a/UlZmnX5, он просто не позволит ввести некорректные значения, потому что с клавиатуры это невозможно, а скролл мышой или нажимания на «плюс», «минус», автоматически переводят 23 часа в 0 часов, 0 часов в 23 часа и т.д. Это заняло у меня минут десять, между подниманием рюмки. Ну там конечно можно было шрифты увеличить, что-то покрасивее сделать, но не стал заморачиваться. Кроме того, юзеру вообще не нужно будет прикасаться к клавиатуре, чтобы установить время.

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

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

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

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

А что ты делаешь на ЛОРе?

Ну тут же весело.

Ну хочешь, я тебе с убунты скриншот того же интерфейса сделаю? Станет легче? На вопрос, как там у Tk с wayland я опять не смогу ответить.

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

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

Вы докапываетесь до мелочей

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

который на тикле делается за десять минут, а вы не смогли за два месяца

Я код будильника даже не смотрел. Я тебе сделаю такой будильник за 5 минут на метапроге. Без чтения документации, при том что я еще не делал графических приложений на нем сложнее окна с кнопкой, для tcl/tk мне придется искать сначала тот древний сайт с документацией, вспоминать как там пакуются виджеты итд...

начинаются отмазки и вопросы про wayland

Просто tcl/tk устарел и немощен. Метапрог будильник запускается даже в браузере. Дело не в будильнике, а в технологиях. Ну сделаю я нормальный будильник, тебе полегчает? Скажи.

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

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

Интерфейс вашего будильника – гавно. Это очевидно.

Я код будильника даже не смотрел. Я тебе сделаю такой будильник за 5 минут на метапроге.

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

Просто tcl/tk устарел и немощен.

Да я и не спорю с этим. Просто, то что на древнем немощном тикле можно сделать за 15 минут, вы не осилили за два месяца.

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

Интерфейс вашего будильника – гавно. Это очевидно.

Это твой будильник.

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

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

Просто, то что на древнем немощном тикле можно сделать за 15 минут, вы не осилили за два месяца.

Я уже писал что осилю за 5 минут, у тебя что, проблемы с пониманием текста?

stasolog
()
Последнее исправление: stasolog (всего исправлений: 1)
Не надо шутить с метапрогом. Здесь другие ребята.  Это не С,  не С++. Python. Здесь твои текстовые языки порвут на части. Тысяча отборных программистов метапрога, бл*дь. Они здесь все разнесут. Они весь популярный софт накодят за один час. Они уничтожат все твои переменные, все функции и указатели. Текстовый программист - ты остановись, ты кончай, ты компиляторы спрячь подальше на диск. И забудь про свой ООП. У нас был один мудак, придумал Java — и рухнула великая мобильная индустрия. И другой чудак был, придумал PHP — и рухнул весь интернет софт. И ты повторишь ту же ошибку. Ты C# забудь, C# твой отработал своё, бл*дь. Ты подумай о будущем ЯП: они гибнут! Твои кодеры бегут из твоих фирм. Там никто не хочет кодить на этих языках, никто! У тебя говнокод, бл*дь! Ява, Ява, Ява! Это… грязная виртуальная машина! Ни удобства, ни фич нету у тебя, нет нормальных кодеров у тебя! 

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

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

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