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)

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

Вот вы и прячетесь за абстракцией, которую так не любите, или любите все же?

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

то что у вас там якобы чего-то нет в графике, не говорит что этого нет вообще

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

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

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

Есть гугл, хотя бы его не отвергайте.

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

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

Зачем?

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

Ну так из-за чего и что поломается?

+поломка

Где?

достаточно беглого взгляда на выхлоп

А я забраковал питон хотя бы из-за кучи PyObject в коде, полученном из ситона.

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

А почему бы и нет? Чего мне не хватает? Сколько должно быть PyObject в выхлопе кодогенератора?

прочитайте хоть пару книг о разработке компиляторов

Когда руки дойдут до переделки транслятора Метапрога «на самом себе», скорее всего возьму функции из готовых компиляторов.

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

Я больше полагаюсь на дебаговые фичи самого Мктапрога, а не дебаггинг на уровне Си

ХАХАХАХАХАХАХАХАХАХАХА

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

Это вывод из того же самого перечня факторов риска.

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

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

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

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

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

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

Тем не менее вы пользуетесь плодами всего этого постоянно и оно работает отлично в основном. Ну тут разговор о другом вообще-то был, но вы этого не поняли.

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

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

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

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

Зачем?

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

Ну так из-за чего и что поломается?

+поломка

Где?

В принципе я уже ответил другим постом на это, но если вы сами не догадываетесь, будет для вас сюрпризом :)

А я забраковал питон хотя бы из-за кучи PyObject в коде, полученном из ситона.

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

А почему бы и нет? Чего мне не хватает? Сколько должно быть PyObject в выхлопе кодогенератора?

Знаний и опыта, но главное - желания их получать.

Когда руки дойдут до переделки транслятора Метапрога «на самом себе», скорее всего возьму функции из готовых компиляторов.

Ну возьмите, возьмите… Вы бы только знали насколько это, и все выше вами написанное, наивно звучит, «возьму функции из готовых компиляторов». O sancta simplicitas.

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

А я забраковал питон хотя бы из-за кучи PyObject в коде, полученном из ситона.

"Это нестерпимо. Человек, как первобытный, прыгает по всей квартире, рвет краны… Кто убил кошку у мадам Полласухер?! Кто…

– Вы, Шариков, третьего дня укусили даму на лестнице, - подлетел Борменталь.

– Вы стоите… - рычал Филипп Филиппович.

– Да она меня по морде хлопнула, - взвизгнул Шариков, - у меня не казенная морда!

– Потому что вы ее за грудь ущипнули, - закричал Борменталь, опрокинув бокал, - вы стоите…

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

– Третьего дня, - подтвердил Борменталь.

– Ну, вот-с, - гремел Филипп Филиппович, - зарубите себе на носу, - кстати, почему вы стерли с него цинковую мазь? - что вам нужно молчать и слушать, что вам говорят. Учиться и стать хоть сколько-нибудь приемлемым членом социалистического общества."(с)

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

Ты мой последний комментарий насчёт MyOpenLab всё же посмотри.

И у меня к нему дополнение есть. Ты хочешь, чтобы из Метапрога можно было программы для Андроида генерировать? Если хочешь — то учить Java всё равно придётся. Потому, что код на C++ и прочую нативщину к андроиду приделывать можно, но с костылями, это не «родной» способ.

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

Если C не является единственной целевой платформой, то как будет выглядеть API (backend?) для построения генератора?

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

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

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

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

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

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

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

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

Ээээ коллега, Вы явно не владеете матчастью:

  1. Ъ древние русы освоили грибоэлектричество и двоичный счет задолго до православия, которое коварный хазарский каганат придумал для порабощения наших гордых предков. Точнее Ваших - мои то как раз из каганата.

  2. Вместо калькулятора древние русы считали на пальцах, каждый древний рус мог быстро посчитать на пальцах от 0 до 1024 в двоичной системе, нынешние рэперы отдыхают (рекомендую, помогает развитию мелкой моторики).

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

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

Кстати, вопрос, который я давно хотел задать. Это техническая проблема. Вот есть у меня две диаграммы на метапроге, одна решает квадратное уравнение (нет), вторая будильник заводит. Как мне между ними сделать git diff?

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

от нуля до 1024 и я могу на пальцах посчитать

Не сможешь. Попробуй, например, сжать пальцы в кулак, а потом развернуть только большой и безымянный.

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

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

Ну от нуля до 1024 и я могу на пальцах посчитать

В двоичной системе?

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

Сними видео под зажигательный музон!

ЗЫ. Подсказка - лучше четные биты считать левой а нечётные правой.

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

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

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

никак скорее всего, слишком сложные концепции - не нужно.

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

он просто подифает выхлоп С, попов-стайл (еще было пара каких-то дундуков с их антивирусами на батниках и прочей дичью) или кто там еще был из великих инноваторов и мыслителей.

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

У Попова ящетаю самым инновационным был архиватор. Но Грета не одобряет - он плохо обходился с гусями.

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

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

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

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

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

https://upload.wikimedia.org/wikipedia/commons/d/d1/Wrist_and_hand_deeper_palmar_dissection-en.svg

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

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

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

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

может быть ¯_(ツ)_/¯. Мож развились как-то, пока на гитаре играл, но безымянные вообще могу не сгибать.

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

при вашей реализации текущей вы обязательно словите и «коллизию»

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

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

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

А как пел-то, как пел.

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

Какие еще неудобные вопросы? Если я на что-то не ответил - значит посчитал это бредом. Я не обязан отвечать на все бредни антиметапрогеров. Качаешь Метапрог и сам тыкаешь - либо не засираешь тему своими бредовыми фантазиями о Метапроге. В противном случае я не обязан к тебе прислушиваться и придавать твоему мнению хоть малейшее значение. И не обязан даже отвечать.

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

Ты хочешь, чтобы из Метапрога можно было программы для Андроида генерировать? Если хочешь — то учить Java всё равно придётся. Потому, что код на C++ и прочую нативщину к андроиду приделывать можно, но с костылями, это не «родной» способ.

Там Нуклеар и Си должны работать https://www.youtube.com/watch?v=3-MiceegZlM

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

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

Извини. По ошибке начал с тобой как с разумным человеком общаться. Забыл.

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

Если C не является единственной целевой платформой, то как будет выглядеть API (backend?) для построения генератора?

На разные платформы и фронтенд тоже нужен немножко разный. Но в основном это каается низкоуровневых функций, непосредственно работающих с целевой платформой. Допустим, если на Си операция сумирования выглядит как вставка (х)+(у) с х и у в качестве входов, то на ассемблере это ADD x y или как-то так. Но более высокоуровневые функции, использующие блок операции суммирования, «не заметят» разницу между сишной и ассемблерной реализацией. Разумеется, тут нужны макросы, отвечающие за выбор реализации. И, конечно же, добавление нужной платформы в сам транслятор, ведь правила трансляции у разных целевых платформ разные.

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

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

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

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

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

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

если плевать на единообразие интерфейса можно и просто на SDL нарисовать интерфейсы. Я бы так и делал собственно если бы хотел везде сишку городить.

Будет скорее всего SDL и нуклеар.

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

Если диаграмма была сохранена в файл, то после перезапуска Метапрога выхлоп кодогенератора должен быть ровно таким же. Разумеется, если в диагармму и Метапрог не вносили никаких изменений.

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

Если я на что-то не ответил - значит посчитал это бредом

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

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

По ссылке выше был более интересный вопрос.

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

Ну… тоже ожидаемо. Консистенция уровня записи в файл, без файлов консистенции нет, плохо, это надо тоже исправлять. Вам от этих «случайных» чисел надо избавляться.

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