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)

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

Просто еще один вариант стасолога

Эмм, Миниробо на ЛОРе находится гораздо дольше, чем Котечка, если что.

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

Я уже в них даже разбираться не хочу. Однообразный унылый троллинг не интересен. Пока было весело общались, включил стасолога досвидания(миниробо он там или котечка неважно). Кстати другие два постоянных участника куда-то подевались. Видимо скакать между тремя аккаунтами не очень удобно.

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

Прецеденты подобного есть? Чтобы предъявляли за то, что что-то слизано с пропиетарной прогарммы или же явно сделано в ней?

Есть.

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

Пока было весело общались, включил стасолога досвидания

Ладно я не знаю текстовых ЯП, но Котечка и Минирободансер знают и могут лучше аргументировать чем они плохи. От этого у антиметапрогеров и подгорает, ведь крыть-то нечем:)

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

Спасибо шо гасил антиметапрогеров, пока я допиливал 12 версию (и сюрприз, который еще будет завтра).

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

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

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

а сделать универсальную среду программирования, доступную всем

Верно, Метапрог Онлайн вообще побочный продукт.

Криптоанархисты

А при чём тут криптоанархизм? Tor — попса.

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

Вообще не факт. У котечки же сколько учёток было уже? До старожилов, которые здесь ещё с начала 00-х, нам обоим далеко в любом случае. Впрочем, с учётом возраста котечки, таки маловероятно, что Они были здесь ещё в 2012-м.

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

Кстати другие два постоянных участника куда-то подевались

Никуда не подевались, они торчат, как всегда, в Метапрог Онлайн.

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

гугл

яндекс

Сорта говна.

он просто скачал-установил-крякнул.

Мда, ну и желтуха. Мало того, что эникейщика IT-специалистом обозвали, так ещё и прямым текстом написано, что ловили на живца и поймали с копиями вареза. Вот только это совершенно не имеет отношения к Нашему вопросу. Ещё раз повторяем, покажите прецеденты предъяв за распространение файлов, созданных в спираченной программе, или создание клонов такой программы. И желательно в Украине.

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

Гуглите и обрящете. Я не слежу за Украиной, нам было сказано - что бы никакого софта с проблемными лицензиями, организация может получить штраф а вы можете получить большие проблемы.

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

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

Гуглите

Зачем Вы рекламируете Гугл? Сколько Вам за это платят?

Я не слежу за Украиной

Ну так в этом ключевая проблема: авторы зачем-то проецируют на @metaprog свои копирастические реалии, совершенно не осознавая, как обстоят дела с пиратством в Украине. И Мы и @metaprog уже неоднократно говорили: тут даже в госучреждениях нередко пиратская винда стоит, а в магазинах на продаваемые компы предустанавливают виндосборочки. Кому и что Вы пытаетесь доказать с таким пониманием вопроса?

организация может получить штраф

@metaprog — не организация. За бизнесом следят чуть пристальнее, это да, может и КРУ припереться. Но на такой случай просто ставится на пару дней линукс, а когда ревизоры уедут — обратно ;-)

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

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

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

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

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

Какие еще преступения? Против человечности? Или капитала заморских олигархов, и без того небедных?

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

Отсутствие прецедентов говорит о том, что закон на практике не работает, например. Вы таки не поверите, но в Украине это обычное дело. Да и у вас вроде тоже. Телеграм уже заблокировали? ;-)

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

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

Смысл не в практичности, а в утверждении «Компилятор оптимизирует лучше чем ты напишешь на асемблере». Я пока не понимаю с чего это убеждение берётся.

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

Ну уж точно не hello world надо для бенчмарка использовать.

Ну а что ещё ? Ну давай возмём калибриОС, аналогичная ОС на си с интерфейсом и тд, в 1.44мб ?

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

Надо какой-нибудь алгоритм взять. Я не знаю, я не спец CS специалист, чтобы об этом спорить. Работает — не трогай — нормальный принцип.

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

Ну а что ещё?

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

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

В теории выглядит красиво, есть практическое подтверждение ?. На практике видим поголовное впихивание вставок на ассемблере в так называемые «критические места». Собственно та же клибриОС вполне себе пример, почему божественные компиляторы со всеми оптимизациями компилят мне текстовый редактор который весит больше чем ОС?

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

есть практическое подтверждение

Подтверждение чего? Что компилятор протаскивает константы? Или что мёртвый код удаляется?

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

Да, но эти вставки требуют очень вдумчивого написания. И квалификация программистов, которые этим занимаются, обычно выше средней. Ты же помнишь, что там написано: «лучше чем ты напишешь». Большинство программистов не знает, как деление свести к умножению, а компиляторы знают.

Собственно та же клибриОС вполне себе пример

Ты используешь её на постоянной основе и пишешь сейчас из неё, да?

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

Подтверждение чего? Что компилятор протаскивает константы? Или что мёртвый код удаляется?

Подтверждение того, что +- опытный программист на Си Vs опытный программист на асемблере напишут одинаковое приложение и за счёт компилятора у первого получится быстрее, компактнее ?

Да, но эти вставки требуют очень вдумчивого написания. И квалификация программистов, которые этим занимаются, обычно выше средней. Ты же помнишь, что там написано: «лучше чем ты напишешь». Большинство программистов не знает, как деление свести к умножению, а компиляторы знают.

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

Ты используешь её на постоянной основе и пишешь сейчас из неё, да?

Нет. Но при чём здесь это? Vim тоже используют не многие, 0.01% пользователей эвм, конечно в разы больше чем КалибриОС, но какое это имеет отношение к вопросу?

У меня пакет Vim весит 1.6мб без зависимостей, не распакованный, калибриОС поменьше будет, собственно либо Vim писали вэб макаки, либо КалибриОС боги, хотя скорее всего просто изначальный посыл, что компилятор наоптимизирует так что ты руками не напишешь - миф.

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

Подтверждение того, что +- опытный программист на Си Vs опытный программист на асемблере напишут одинаковое приложение и за счёт компилятора у первого получится быстрее, компактнее ?

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

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

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

Только всё это крайности.

Говорит мне человек, который меряет число системных вызовов в hello world программе, и на основе этого пытается судить об кодогенерации компилятора. Нет, я наоборот, на на крайности смотрю. Кто-то обязательно сможет написать последовательность инструкций с лучшей или той же производительностью. Но сможешь ли ты? Я вот много смотрел в сгенерированный компиляторами код. Очень много раз я видел там оптимизации, о возможности которых вообще не подозревал. Так что про себя я знаю, что в среднем мой ассемблер будет хуже сгенерированного компилятором. А писать я его буду в десятки, если не сотни раз дольше.

Нет. Но при чём здесь это?

При том, что нет смысла сравнивать что-то, чем можно пользоваться, с чем-то, чем нельзя.

пакет Vim весит 1.6мб без зависимостей, не распакованный, калибриОС поменьше будет

Так у тебя единственный критерий — размер?

просто изначальный посыл, что компилятор наоптимизирует так что ты руками не напишешь - миф.

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

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