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

К сожалению они занимаются пиаром на почве санкций и госреестров. То есть вместо того чтобы служить проводником для Linux и Open Source в России, нарабатывать связи и т.п., они пиарятся на том что они его собой заменяют, окукливаясь в своём мирке.

Школьный линукс — неужели не слышали? Там к сожалению, слишком много нахлебников набежало, в частности, печать дисков отдали на откуп фирме, которая в линуксе не шарит и навыпускала брака. Но в школы линукс пошёл усилиями в том числе Альта.

К сожалению они занимаются пиаром на почве санкций и госреестров. То есть вместо того чтобы служить проводником для Linux и Open Source в России, нарабатывать связи и т.п., они пиарятся на том что они его собой заменяют, окукливаясь в своём мирке.

Никогда не слышал от альтовцев того, что они ЗАМЕНЯЮТ опенсорс. Они всегда считали себя частью опенсорса. Более того, альт популяризировал линукс в России ещё тогда, когда у большинства не было толстого канала в интернет.

А госреестры и пр. — это одно из применений. И его не надо противопоставлять опенсорсу. У госорганизаций, особенно силовиков, на самом деле два пути: либо продолжать доверять майкрософту и ораклу, либо брать линукс. Но линукс должен быть сопровождаем отечественной фирмой, с которой можно спросить в случае чего. Вот эту нишу отечественные дистрибутивы и заполняют.

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

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

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

Мне их хватает.

А мне нет.

Мне виднее, какие абстракции нужны в Метапроге.

Ну и кому он нужен будет твой Метапрог? Твоя идея – предоставить программисту очешуительный слой абстракции (абстракция от текстового представления), так почему ты не хочешь ввести высокоуровневые абстрактные типы? Почему я должен ковырять твои массивы с сишными структурами? Я хочу встроенные деревца, например, generic контейнеры.

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

Почему я должен ковырять твои массивы с сишными структурами? Я хочу встроенные деревца, например, generic контейнеры.

Разве их нельзя собрать из структур? Можно даже прикрутить к конструктору диагармм примочки.

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

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

Открой любую свою диаграмму. Ворох квадратиков и жуликов.

жуликов

Завязывай со спиртным или что ты употребляешь

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

generic контейнеры

Насколько я понимаю, это аналог структуры условного выбора типа, верно? СУВТ уже есть в Метапроге, даже в прототипе.

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

Это называется автодополнение. Иногда лень перечитывать сообщения, когда набираешь их с телефона. Вот и получаются такие опечатки, пока ждёшь самолёт. Увы, удобных средств сенсорного набора до сих пор не придумали. Жаль, что у современных телефонов клавиатуры почти не встречаются.

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

Мне льстит, что у меня есть преданные фанаты, которым не лень сюда писать даже с телефона.

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

Нет. Это когда можно подставить при создании структуры в нее свой тип. Например есть у тебя такая структура:

struct array {
    int size;
    int elements[];
};
А нужно что бы были элементы те, которые ты хочешь.
struct array(type t) {
    int size;
    t elements[];
};

struct array(int) int_array;
struct array(float) float_array;
struct array(struct array(int)) array_of_array_of_int;
Вот про такое речь.

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

Ну например свои массивы могут понадобится для сотни типов. И что, постоянно редактировать тип массива? Там получится структура длиннее чем твой скриншот той gtk структуры %) И размер одного элемента union считается по самому большому. Можно хранить только указатели, или нулевой массив как у меня, но надо как то сделать что бы не надо было указывать все типы в СУВТ, а только при создании... Не знаю даже.

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

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

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

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

Во-вторых и с реестром и т.п. можно вести себя по-разному. И нишу можно заполнять по-разному.

И да, ты можешь думать иначе. Я описала то ощущение, которое складывается у меня, и которым я думаю можно объяснить реакцию, которую вызывают альтовые новости на ЛОРе и поведение участников дискуссий, местных и opennet-овских.

И наверное не стоит в этом треде дальше развивать эту тему.

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

Ну, товарищ тебе сказал основную суть generic, я добавлю, что чаще всего под generic контейнерами имеют в виду связные списки или иногда динамические массивы, которые можно изменять. Под встроенным типом я имею в виду встроенный в язык или стандартную библиотеку конструкцию List<T> с API навроде

LinkedList<string> strLst

strLst.PushBack("String 1")
strLst.PushBack("String 2")

str := strLst.Find("%2%")
strLst.Remove(str)

// версия на динамическом массиве

SimpleList<string> sList

sLst.InsertAt(2,"String at index")
sLst.RemoveAt(2)

Короче, я желаю встроенные generic линкеды с нормальным апи (без возни с сишными структурами и указателями)

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

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

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

Спиртное я не пью. Мне жгутики на моих диагарммах не мерещатся: жгутики округлые (примерно как кривые Безье у Рината), у меня линии только прямые.

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

Жгутики не имеют фиксированной геометрии, неуч.

И вообще, судя по твоим темам, ты там что-то очень тяжёлое долбишь.

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

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

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

Жгутики не имеют фиксированной геометрии, неуч.

Аккуратные у меня, видать, жгутики.

И вообще, судя по твоим темам, ты там что-то очень тяжёлое долбишь.

Вот это:

https://www.youtube.com/watch?v=uf8TXoM675U

Под это я программирую. А тебе слабо?

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

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

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

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

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

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

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

Ладно, увидишь по реализации. Добраться еще надо, а еще баги с умными массивами пофиксить...

metaprog
() автор топика

будильник на Метапроге

А не пробовал сравнить время и трудоёмкость создания будильника на Метапроге и на конкурирующих решениях типа Node-RED?

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

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

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

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

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

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

В противном случае художники в Фотошопе тоже не рисуют, плотник что программа отсчитывает инструменты за них.

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

Ой йомайо, K&R пилили Си 4 года, получаю зарплату зеленью и будучи профессиональными программистами. А я в свободное время за год сделал прототип Метапрога, на котором уже можно сделать хотя бы будильник. Можно и большее, но пока руки не добираются.

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

K&R пилили Си 4 года

А «K» в курсе, что он «пилил Си»? А то он отрицает.

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

Ритчи сделал язык за год, не за четыре. И за этот год на него переписали ядро Unix.

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

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

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

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

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

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