LINUX.ORG.RU

Метапрог-прототип, версия 6 + будильник на Метапроге

 , ,


1

3

Наконец-то настало время для первой прикладной программы на Метапроге - будильника. Чтобы правильно его собрать, нужна последняя версия прототипа Метапрога. Архив включает в себя исходные диагарммы на LabVIEW и скомпилированные exe, которые можно запустить под Wine на линуксе, читайте инструкции из архива с названием вашего языка. Скачать:

https://www24.zippyshare.com/v/xEn1RKAG/file.html

Основная причина выпуска 6 версии - исправление бага с жесткими последовательностями, ведущими к началу цикла. Это исправление вряд ли окончательное, но для трансляции диагарммы будильника сойдет. Если после транслятора из 5 версии прототипа Метапрога сообщение о времени будильника выводилось в цикле каждый раз, то тут - только один раз, в самом начале:

https://i.postimg.cc/QM43XMjf/image.png

Также проект может похвастаться тем, что функцию проигрывания звукового файла в своей основе сделал insw, успешно разобравшись с функционалом прототипа Метапрога. Я лишь добавил дебаги с условными разветвлениями (аналог if...else) и жесткими последовательностями. В получаемом из транслятора сишном коде это выглядит как множество вложенных друг в друга if...else. Проигрывание звука:

https://i.postimg.cc/d0d2FhRY/image.png

Сишная трансляция диаграммы будильника (не забудьте sound.wav!):

https://pastebin.com/YAd4J1SN

Почему будильник на константах? С графическим вводом значений пока проблемы: всплыли новые баги с «умными массивами». Исправление будет в будущих версиях. Но в этой версии исправлено несколько других багов: теперь не должно быть проблем с заданием типа массива и индикаторы прогресса закрываются сами после завершения операции.

Переворот массива

Наконец-то удалось первернуть массив из байтов. Для этого пришлось повозиться с диаграммами транслятора-кодогенератора. В 6 версии прототипа Метапрога эта диагармма уже корректно не оттранслируется, планирую выпуск 7 версии, но надо еще поработать над массивами.

Диагармма с подробными комментариями, думаю, что все тут должно быть понятно:

https://postimg.cc/RJMKXyTB

Если все же что-то неясно - не стесняйтесь спрашивать. Полученный код:

https://pastebin.com/UsY0TZvc

Предыдущая версия:

Метапрог-прототип, версия 5



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

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

По идее, именно на этом API должен быть построен транслятор для C.

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

Вот буквально позавчера столкнулся с багом в Android. Конкретный билд был неизвестен, но был стектрейс. Я достаточно быстро в исходном коде нашёл место и причину, несмотря на то, что метод немного отличался. Как будет обходится подобная ситуация при случайной генерации? Диграмма-то, по сути, менялась.

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

А теперь проблема, которую я описал в своём комментарии. Повторюсь: вопрос в том, что для этого всего уже есть туча готовых инструментов. Как будет с этим всем работать metaprog? Или предполагается своя экосистема?

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

API транслятора

Ты погляди хотя бы тот ад, что он генерирует, какой нафиг API? Он наверное даже и не знает, что это такое.

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

Метапрог транслируется в Си. Можно будет метапроговские сишные трансляции компилировать и для андроида.

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

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

Что ты понимаешь под «консистенцией»?

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

Добавление блока на диаграмму - достаточно редкая операция, линейный поиск даже по тысячам блоков будет мгновенным.

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

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

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

Вот буквально позавчера столкнулся с багом в Android. Конкретный билд был неизвестен, но был стектрейс. Я достаточно быстро в исходном коде нашёл место и причину, несмотря на то, что метод немного отличался. Как будет обходится подобная ситуация при случайной генерации? Диграмма-то, по сути, менялась.

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

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

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

И что, если я хочу генерировать LLVM-IR, ты предлагаешь мне парсить твои диаграммы вместо удобного для обработки машиной AST?

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

Да, предполагается своя экосистема. Метапрог слишком отличается от языков программирования на чистом тексте. Впрочем, это только плюс - можно делать плюшки, недоступные ни в одной текстовой IDE.

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

если я хочу генерировать LLVM-IR

Я тоже подумываю новый транслятор Метапрога «на самом себе» транслировать в LLVM-IR, но до этого еще далеко.

ты предлагаешь мне парсить твои диаграммы

Их не надо парсить, они и так уже в бинарном виде.

удобного для обработки машиной AST

В Метапроге нет «синтаксиса» в смысле текстовых ЯП и скорее всего прямая трансляция Метапрог-схем будет проще, чем генерация AST. Хотя вопросами именно компиляции (а не сишной кодогенерации) я еще серьезно не занимался, так что это всего лишь предположение.

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

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

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

линейный поиск даже по тысячам блоков будет мгновенным.

Ну это вообще пушка. Ты кроме массива про какие структуры данных слышал?

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

Про гусей не знаю, но вот в Саус парке был куроёб. Зато полицейский Барбреди научился читать.

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

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

А архиватор — это Бабушкин, совсем другой персонаж. Вот этот либо жулик, либо тролль (и да, мне лениво искать разницу между первым и вторым).

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

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

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

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

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

Это очевидно и никак не соотносится с тем на что вы ответили, не очень понимаю зачем вы это вообще написали.

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

а теперь вот такое.

Кстати вот блин да, а если он того, самовыпилился? Так вот и ТСа же можно довести, и @kostyarin_, и метапрогамать Диану…:-(

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

очевидно же что нет, правда еще он вроде как структуры могёт, в общем что есть в стандартной поставке С то и использует. «Массивчики, если то иначе - программирование!!»

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

Коллега, Вы забыли упомянуть про когерентность, латентность, вирулентность и градиентность!:-)

Жёстоко заставлять ТСа читать в Гугле, это же работа с текстом. Надо бы всю Вики перевести в метапрог-диаграммы…

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

Вроде он хотел захватить мир а не уничтожить? Я запутался…

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

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

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

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

метапрог боготворит царя

Учитывая, что он щас чуть ли не в каждом сообщении его упоминает… Да. Ну… Стокгольмский синдром, он такой.

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

Unicode4all ★★★★★
()

Извлёк из удалённых по 7.1 технический вопрос:

Черт побери, КАК вообще можно было додуматься определять типы во время исполнения, а не компиляции, да еще и считать это более простым, чем статическая типизация???!!!

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

Ты вот сейчас, кстати, подошёл оооочень близко к пониманию своих разногласий с теми, кого ты называешь «антиметапрогерами». Вот сейчас люди читают и думают:

Черт побери, КАК вообще можно было додуматься создавать программы диаграммами, а не текстом, да еще и считать это более простым, чем текст программы???!!!

Уловил аналогию? Ещё раз: простота освоения — одно, простота применения — совсем другое.

И да, есть области, где «несамостоятельная скриптуха» рулит. Если мне надо будет прошерстить большой текстовый файл и выдрать оттуда некоторое количество осмысленных строк — я накатаю скрипт на несамодостаточном Перле потому, что он будет тупо короче. Каждому инструменту — своё применение.

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

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

Кто сказал, что добавлять в диаграммы ничего не надо?

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

Ты кроме массива про какие структуры данных слышал?

Я этого вопроса уже не раз касался, но для особо одаренных обладателей Сакральных Знаний повторю. В Лабвью я использую: числовые типы, строки, кластера (аналог структуры), массивы и лабвьюшное подобие указателей. Это весьма похоже на сишную систему типов.

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

деревьев

он уже писал, что ботаникой не занимается :]

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

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

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

Вообще-то это была не шутка. Поиск по массиву из тысяч кластеров в Лабвью может быть мгновенным (правда это зависит от кластера). А если все же будет ощутимо лагать - можно создать отдельный массив из номеров для ускоренного поиска, тогда и миллионы элементов проблемой не будут. Но откуда антиметапрогерам знать подобные нюансы?

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

«бенчмарков» мы конечно же не увидим и будем верить вам на слово )

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

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

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

Не так уж он и оступился. Некоторые люди, имеющие власть и бабло, совершают поистине ужасные преступления. Не только черт знает когда, но и непосредственно в наши дни. Чего только стоит недовойнушка, на которых олигархи и чинуши по обе стороны СОВМЕСТНО делают миллиарды баксов, и им глубоко насрать что «терпилы» страдают. Что-то не слышно, чтоб их осуждали - еще бы, у них бабло и власть. А вот пацаненка за немножко неправильный форк убунты говном обливать уже черти сколько лет - святое дело. Где-то даже видел предложение подать на него в суд - ведь это не олигарх, который наймет дорогих адвокатов, купит судей и все сойдет с рук.

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

Я вам уже раза три минимум назвал причину по которой ваше «архитектурное» решение поломается

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

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