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

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

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

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

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

а если он того, самовыпилился? Так вот и ТСа же можно довести

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

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

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

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

в общем что есть в стандартной поставке С то и использует

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

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

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

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

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

Зачем ты привел эти словеса? Чтобы показаться умным? Но умным это тебя не сделает, поверь. Как же я вообще программирую в Лабвью и прототипе Метапрога, не обладая этими Сакральными Знаниями?

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

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

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

фихтенгольца

Немецкий матюк?)))

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

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

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

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

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

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

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

Ну фихта бы тебе почитать, чтобы хотя бы понимать O-нотацию для оценки сложности алгоритмов, для этого теорию пределов надо хотя бы на базовом уровне понимать. Фихтенгольц это все очень наглядно описывает в своем «Дифференциальном и интегральном исчислении».

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

при таком уровне абстракции юзать семантику низкоуровнего языка это фейл

Царь тоже пока что так считает. Но почему? Что помешает мне манипулировать указателями, юнионами и структурами в графике? В Лабвью я успешно делаю почти то же самое и смог сделать не менее чем прототип Метапрога - довольно сложное графическое приложение, плюс Метапрог Онлайн и сервер к нему.

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

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

Когда мне было лет 7 я не знал ни про указатели, ни про массивы, но написал «сложное» графическое приложение fucking nine на вижуал бейсике. Там было три картинки, в которое выводились рандомные цифры при нажатии на кнопку. Если выпадало три девятки, то затирался mbr.

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

умнее в моих глазах ты не стал

Ты же понимаешь, что в этом треде всем абсолютно насрать на то, что тебе там в твоих глазах воспринимается?

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

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

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

Там же идеальная вселенная, где все на квадратиках со жгутиками сделано! Даже небо! Даже Аллах!

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

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

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

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

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

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

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

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

Каждому инструменту — своё применение.

Я читал на хабре прикольную историю: https://habr.com/ru/post/442112/

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

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

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

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

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

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

Этого всего должно хватить чтобы сделать списки, деревья, множества, ассоциативные массивы и т.д.

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

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

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

Пора со всем этим ознакомиться.

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

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

бенчмарков... Для чистоты эксперимента отбросьте лабвьюшный «массив» и попробуйте реализовать условный «массив» самостоятельно.

Я уже реализовал массивы в Метапроге.

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

Я политсрач тоже не разжигаю. В том комментарии я обвиняю не одну, а обе стороны, поскольку по сути это одна банда. Но ладно уж, на ЛОРе я не за этим.

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

Если на какой-то твой тезис не было ответа или был ответ, который тебя не устроил - перефразируй.

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

Я уж лучше сделаю Метапрог «сам на себе». LabVIEW C Generator у меня есть - это убожество не поддерживает даже рекурсию, не говоря уже о многих других плюшках. Мой транслятор и то, наверное, уже лучше.

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

я вам написал только те термины которые применимы к ситуации которую мы обсуждаем

Правильно. И если мне какой-то из терминов непонятен - изволь объяснить доступным языком. гуглить мне откровенно лень, да и некогда. Я все никак 7 версию прототипа не выпущу, куда мне там гуглить и вникать в незнакомые понятия, без которых я и так обхожусь?

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

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

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

O-нотацию для оценки сложности алгоритмов

Я хоть и не знаю что это за зверь, но Котечка и не только пишут, что всякие там O(n) на практике вообще не работают. Правда?

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

Только учти, что тебе абсолютно всё придётся чертить с самого нуля! Ты наверняка захочешь транслировать свои диаграммы в LLVM-IR. Это ладно, генерацию в код целевой архитектуры на себя возьмет сам LLVM, но тебе всё равно придется парсить свои диаграммы и генерировать IR. Осилишь ли ты такое? А написание стандартной либы? Ведь удобных примитивов, которые тебе любезно предоставили копирасты из National Instruments уже не будет.

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

А теперь напиши что-то по сложности сравнимое с прототипом Метапрога + Метапрог онлайн - тогда и поговорим.

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

Взаимно. Мне тоже насрать на твое мнение.

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

царь еще тот поехавший

На самом деле что ни найду «царского» - бреда еще не видел, пишет достаточно умно. Разве что к Метапрогу относится скептически - и то только потому что еще толком не знает его.

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

А int ты там реализовал?

Есть знаковое 32-битное, которое соответствует int (по крайней мере, на x86).

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

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

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

Ещё как работают. Например бинарные деревья очень сильно ускоряют поиск в больших объёмах однотипных данных

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

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

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

Где бенчмарки, Маня?! Без них ты просто воздух сотрясаешь. Как говорил Линус: «talk is cheap».

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

Это могут показать только бенчмарки. Которые кстати будут лучшей рекламой в случае удачи. А в случае неудачи они дают автору пищу для размышлений

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

но тебе всё равно придется парсить свои диаграммы и генерировать IR. Осилишь ли ты такое?

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

А написание стандартной либы? Ведь удобных примитивов, которые тебе любезно предоставили копирасты из National Instruments уже не будет.

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

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

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

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

Буду иметь в виду, но оставлю это на потом.

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

неправильно решить квадратное уравнение

В чем неправильность?

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