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

Ну значит, это СПО-фанатики против пиратства, понятно.

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

Хех. Для этой задачи какой хэш не придумай (разумный) - все будет хорошо. Строки то рандомные… я юзал два хэша:

  1. битовую маску из четностей символов строки (в плюсах)

  2. произведение кодов первых нескольких символов (в питоне)

Оба хороши - быстро считаются и дают равномерное заполнение бакетов.

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

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

А зачем они?

Под таким лозунгом весь Метапрог разрабатывается. Придумайте что-то другое.

Не могут.

Почему?

алфавитные державы между собой рубились - мама не горюй…

И в итоге проиграли все.

Проблемы концепта дупопрога с проблемами С не связаны никак, это сугубо дупопроговское ноу-хау.

Так какие проблемы? Перечислите.

Вылезайте из криокамеры

И куда?

их еще можно читать

Кусками, ага. А толку? Кривая программа так же работать будет — кусками.

Будет постоянно

Ну так и как Вы себе это представляете в большой программе? Не в будильнике, который достаточно мелкий, чтобы сломаться полностью, а уровня того же Метапрога. Он и сейчас, на LabVIEW, местами ломается — а местами работает.

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

хоть в книжке напечатать

Фи, ретроградство-то какое! Вы бы ещё грампластинки вспомнили. На кои в 2#20-м нужны эти талмуды макулатуры?

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

Bullseye же.

Ну тоды ой, надо перепроверять. У меня на стретче завелось.

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

Патчи к утёкшим сырцам тоже пилятся потихоньку.

ЧТД. Так они и останутся патчами к утекшим сырцам, которые никуда нормально не выложишь и другу не порекомендуешь. Это не жизнь.

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

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

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

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

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

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

А Метапрог Онлайн с нативным клиентом через TOR — это жизнь? :3 Сейчас, видите ли, тяжёлые времена наступают, не исключено, что скоро даже вчера считавшимся «белыми» компьютерщикам придётся уходить в даркнет, ну или перековываться в нормисов.

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

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

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

Зачем объяснять конспирологией то, что можно объяснить банальной человеческой глупостью? Ну вот не сдалось им лишний раз публиковать, как что-то сделано — сделано, и всё. Не зря ведь говорят, что подготовить проект к опенсорсу — это большая кропотливая (и не всем нужная) работа, а не просто на гейхаб хрен пойми чего выложить.

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

не все платформы

Ну охренеть, а как Вы собрались аппаратно ускорять на всяких затычках типа sh4 или древних ppc?

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

Под таким лозунгом весь Метапрог разрабатывается. Придумайте что-то другое.

Зачем? Большие куски АСМ вставок это экзотика. Остальное вполне представимо в виде той или иной диаграммы. Это было реализовано и это не прижилось - потому что оказалось неудобно.

Почему?

Потому что у человека 10 пальцев а мышь у компутера одна. Потому что средняя машинистка выдает 300 знаков в минуту, это уровень APM топового игрока в старкарфт, и то с участием клавы.

Я работал с такими «проф мышетыками в экселе» - я в питоне данные обрабатываю не медленнее, хотя слепой десятилпальцевой печатью не владею.

Так какие проблемы? Перечислите.

  1. в дупопроге все в кучу - постулируется что переменные ассоцированы со жгутиками (это стандартное понятие графа зависимостей, и это хороший концепт), и тут же массивы размещаются в квадратиках.

  2. нет однозначной точки входа. Ленивые вычисления работали бы, если бы не п.1

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

Все эти вещи уже проходились, ТС не первый кто пришел в метапрограммирование и кодогенерацию. Это я Вам как человек имеющий в этой области несколько печатных работ говорю;-)

И куда?

GC, владение, и пр. То что Вам это не нравится не значит что это плохо.

Кривая программа так же работать будет — кусками.

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

Ну так и как Вы себе это представляете в большой программе?

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

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

Кстати, отладочный вывод с валгриндом прекрасно сочетается.

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

Интересно что все-таки используется в лабвью для внутреннего представления массива

пойнтер + размер + сборка мусора

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

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

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

потому что оказалось неудобно

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

у человека 10 пальцев

У фрезеровщиков бывает меньше ;-) Фрезеровщики тоже целевая аудитория Метапрога, между прочим!

машинистка

Ну не сравнивайте, машинистка просто откуда-то перепечатывает, а программисту ещё в это время думать надо. Мышевозня тут сильно выигрывает за счёт того, что задействуются естественные рефлексы чуть ли не на уровне спинного мозга — то бишь работа распараллеливается.

Я работал с такими «проф мышетыками в экселе»

Ну у экселя одна беда в том, что большие объёмы данных он плохо переваривает. А так неплохая визуальная среда функционального программирования.

и тут же массивы размещаются в квадратиках

Зато на них методы есть, а как на примитивные типы, которые по жгутикам бегают, их навесить?

нет однозначной точки входа.

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

Если выходы квадратиков закольцевать

Это можно отлавливать.

То что Вам это не нравится не значит что это плохо

Плохо для чего? В концепции Метапрога как низкоуровневого языка с простым освоением это плохо. GC немыслим в низкоуровневом языке, а следование этим вашим RAII, заворачивание кода в std::move или война с компилятором Rust, чтобы он наконец перестал ругаться — значительно осложняют программирование — нет бы собрать, чтобы оно как-то работало, а улучшать и вылизывать уже потом.

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

выдает неверный ответ

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

а она не транслируется

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

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

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

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

Так представьте, во сколько раз был бы слив, если бы Метапрог транслировался в питон…

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

Так есть же вроде открытый аналог. MyOpenlab если я все правильно понял. Если бы ТС серьезно подошел к задаче. Взял бы, допилил под себя и многие вопросы бы отпали(про пиратство лабвью например). А так даст NI документацию или не даст и в суд подаст не известно :)

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

гуглить и читать книги

Ну вот ещё. Мы вот книги по программированию ни одной до конца не дочитали, в основном обрывочно где-то нахватались. Да и гуглом почти не пользуемся уже лет пять, DuckDuckGo всё лучше и лучше становится. А программируем, тем не менее. Не учите человека дурному.

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

и многие вопросы бы отпали(про пиратство лабвью например)

Это вообще не вопрос, это просто блажь фанатиков-варезофобов.

и в суд подаст

Какой суд, что Вы несёте? На некоммерческий проект? Такое даже в обкопиращенных странах типа США и Германии из ряда вон, а уж об Украине и говорить нечего.

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

Знаете, надоело спорить в 100501й раз об одном и том же. Если Вам так будет комфортнее, я признаю свое поражение по всем пунктам, а дупопрог это будущее человечества.

Пойду работать.

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

Какой суд, что Вы несёте? На некоммерческий проект?

Ну это Метапрог авокатам Ni будет объяснять, если проект в теории взлетит.

просто блажь фанатиков-варезофобов

И это тоже.

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

Нарыл букварь по лабвью, не знаю на сколько это нормальный источник, но вот что там написано:

Unlike C, LabVIEW arrays are always “safe.” It is not possible to overwrite the boundaries of an array in LabVIEW, it will automatically resize the array. Languages like C do not perform boundary checking, meaning that it is possible to write to the fifth element of a four-element array. This would compile without complaint from the C compiler, and you would end up overwriting a piece of memory and possibly crashing your program. LabVIEW will also allow your application to write outside the boundaries of the array, but it will redimension the array to prevent you from overwriting other data. This is a great feature, but is not one that programmers should rely on. For example, if writing to the fifth element were actually a bug in your code, LabVIEW would not complain and it would also not inform you that it changed the array boundaries! Array controls and indicators have the ability to add a “dimension gap.” The dimension gap is a small amount of space between the rows and columns of the control to make it easier for users to read. Another feature of the array is the ability to hide the array indexes. This is useful when users will see only small portions of the array.

Кажется не череcчур :D

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

Я у тебя по серьезному спросить хотел. Интересно твое мнение вообще то что ТС делает(Среду программирования на Labview это как я понимаю) с серьезным подходом осуществимо на твой взгляд. Хотя бы в теории?

Ответ abcq тоже интересно узнать.

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

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

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

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

И где здесь лицемерие? Копирастическая модель монетизации (плата за пользование программой, ещё и на ограниченных условиях) совершенно никак не связана со сбором добровольных донатов и нежеланием бесплатно реализовывать чьи-то левые хотелки.

через раз будет попёрдывать про настоящих программистов которые зарабатывают тонны денег

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

что они Линусы, Ритчи и Столманы, они с ними одного поля ягоды

Ну позвольте-с, Столлмана тоже многие считают подшконочным ни на что не влияющим фриком ;-)

Столман в тихаря кодит в вижуал студии

А вдруг кодит? Не докажете же ;-)

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

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

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

90% потенциальной ЦА

90% потенциальной ЦА не составляет проблемы запустить Метапрог.Онлайн, потому что им не нужен для этого Wine. Да и Tor Browser и так уже у многих стоит, особенно в РФ. Заметьте, кстати, что @metaprog во всех инструкциях указывает ставить не голый Tor, а именно Tor Browser. И тут опять вспоминается табунский Sasha-Flyer, что запускает продакшновый web-сервер через IDE. Воистину надо их с @metaprog свести, как там рекомендовали ;-)

И это не говоря уж о том, что Метапрог Онлайн наверняка будет одной из первых программ, переписанных на самом Метапроге, возможно даже, задолго до выхода из статии прототипа. Так что и нужда в рантайме LabVIEW отпадёт. И на GNU/Linux нативно работать будет.

и дейстовать будут совсем другими методами

Это какие же методы способны остановить Метапрога?

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

Ну то есть для написания серьезно проекта все равно придется учить С нормально. Лабвью ему даст основу, но она будет как тут говорят течь и генерировать непонятные ошибки которые без знания кода не отловишь. Ну и плюс рамки Labview, где например на питоне написать было бы проще. Верно суть понял?

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

зачем он на самом деле шифруется,

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

не пойдёт ли мой труд в корзину из-за сомнительного правового статуса означенного проекта

А с чего ему пойти в корзину, если переписать Метапрог на независимых от LabVIEW технологиях? К чему тогда прикапываться вообще? Никак у них способы соединения жгутиков запатентованы? :3

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

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

ВП стреляет там, где дилетантам надо решать какие то специфические а-ля программисткие задачи. То же Лабвью для конфигурации оборудования, блендер для конфигурации скриптов обработки изображения и пр. Порог вхождения снижен, скорость реализации неважна (это делается раз в неделю условно), зато юзер может использовать какую доп. функциональность.

Возможно было бы интересно проработать какую то среду ВП в функциональном стиле действительно избавившись от переменных - просто джаст фор фан.

Возможно ВП может стрельнуть для проектирования дизайна/архитектуры - такие вещи действительно удобнее рисовать на доске крупными мазками. Может оно и есть, как то же архитекторы свои мысли до окружающих доносят? А тут сразу шаблон кода на выходе. @hobbit наверное знает используется ли оно как то.

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

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

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

непонятные ошибки которые без знания кода не отловишь

Во зажрались… знаете, как раньше JS браузерный дебажили, когда ни девтулзов этих ваших не было, ни даже FireBug? alert в коде — вот и весь сказ. И отлаживали ведь как-то.

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

mertvoprog
()

AntonI, abcq благодарю за ответы. Немного нормальной информации в этой теме не помешает для разнообразия. Я не умею кастовать блин, по крайней мере на лоре:)

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

Нет все таки не зря большая часть здравомыслящих людей на лоре игнорят эти темы

Да скорее наоборот, тут одна элита, а не петушня из толксов, которая путает ЛОР с усопшим Двачем, к линуксу и даже IT отношения не имеет и торчит здесь только чтобы флудить на произвольные темы.

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

Ну чего ты такой серьезный то. Метапрог напишем, заживем. Все будет на жгутах, небо и птицы, даже ЛОР. А сообщения будут течь по проводкам.

Razk
()
Последнее исправление: Razk (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.