LINUX.ORG.RU

Metaprog: универсальная графическая среда программирования [в разработке] часть 7

 , , ,


1

3

FAQ

0. Где отсутствующие примеры и пункты FAQ? Как вообще читать эти темы?

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

10. Примеры выдают варнинги при компиляции (у кое-кого еще и сегфолтятся)

Решено вводом неанонимных структур, если идет обращение к данным из сишных инклюдов.

12. Зачем ты пытаешься сделать «графический C» (используя подходы к разработке, структуры данных и прочее из C, но в виде блоксхем)?

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

13. Есть же first order logic, лямбда исчисление и т.д. Ты бы изучил для начала альтернативы, может для данного вида представления имеются лучшие подходы?

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

Примеры

Предыдущие см. в прошлых темах

Metaprog: универсальная графическая среда программирования [в разработке]

Metaprog: универсальная графическая среда программирования [в разработке] часть 2

Metaprog: универсальная графическая среда программирования [в разработке] часть 3

Metaprog: универсальная графическая среда программирования [в разработке] часть 4

Metaprog: универсальная графическая среда программирования [в разработке] часть 5

Metaprog: универсальная графическая среда программирования [в разработке] часть 6

Неанонимные структуры

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

Главная функция:

https://i.postimg.cc/8kJdT96h/image.png

Открытие нового окна:

https://postimg.cc/kBX6rB0P

Та же диаграмма в видео:

https://streamable.com/jqng1

Видно всплывающие подсказки, в конце удаляется и снова проводится один из проводков.

Начало рисования SDL, то что должно делаться каждый цикл в нуклеаре:

https://postimg.cc/tYS199bZ

Вставки, как видите, могут принимать и даже возвращать аргументы, как вставка обработки событий SDL возвращает running. Потом этот проводок с running будет подключен к главному циклу.

Кстати, что мешает мне сейчас сделать главный нуклеаровский цикл, ведь циклы ж уже готовы? Смотрите на этот скрин:

https://i.postimg.cc/65N2KMQz/image.png

Почти такой же пример, только есть цикл и нету sleep (чтобы можно было полюболваться на окошко 10 секунд). Что тут не так? Схема правильная, но надо еще научить транслятор ставить «тупиковые» ветки, берущие начало в цикле, в пределах цикла по-умолчанию. Сейчас код nk_end и малювання SDL оказываются за пределами тела цикла, буду это исправлять. Где-то там же находится ключ к полному налаживанию ветвления через if и switch.

Сам код:

https://pastebin.com/f5PDfi77

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



Последнее исправление: metaprog (всего исправлений: 15)

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

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

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

я толком то и не знаю что это за фигня

Самое смешное, что и в D, и в Rust «эта фигня» есть. И комитет по стандартизации C++ давно пытается её впихнуть в кресты, да вот никак не впихнёт. А в паскале работает уже четверть века.

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

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

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

D и rust у меня тоже нет желания изучать. я в первую очередь практик и мне лень бесконечно изучать новые ЯП на которых ничего не делается и которые нет возможности применить на практике. есть много более интересных дел. в планах на лето в частности подробное изучение ядра linux.

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

Я СКОЗАЛ

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

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

Бомбит? Не осилил!

Пробовал курс по языкам программирования на Coursera. Ох, как у меня бомбило задания, кажется, на второй неделе. Через некоторое время я сдался и пошёл на их форум за подсказками. Никогда не ходил на форумы за подсказками, но вот это задание меня довело. Пришёл на форум, и первое, что увидел в нужном разделе — тред от другого студента. Он там писал, что вроде не тупой. Что работает программистом, довольно успешно. Но на это (учебное!) задание убил уже больше восьми часов, то есть больше рабочего дня, но никак не может продвинуться. Меня это так впечатлило, что я даже ответы читать не стал.

В общем, да, от «не осилил» неиллюзорно так бомбит.

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

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

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

нахрен какой то курс, чем он лучше скачанной книги?

Тебе не нужен, не переживай.

что за задание, давай его сюда, будем пробовать решить.

Ты думаешь, я его помню? Это больше пяти лет назад было. Что-то базовое то ли про SML, то ли про Scala.

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

почему ты думаешь что именно мне не нужен

Потому что ты спрашиваешь, зачем он тебе нужен. Если спрашиваешь — не нужен. Либо всё нужное уже знаешь, либо просто ещё не настал момент, когда понимаешь, что пора учиться дальше.

зачем был нужен тебе

Не знаю. Но было интересно.

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

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

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

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

Препроцессор мощнее же, в fpc он кстати есть, лол...

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

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

Простейший пример: если ты в объектном паскале забудешь uses, компилятор выругается, как только дойдёт до первого неизвестного символа. То же, ЕМНИП, будет, если в Java забыть import.

Если же ты в крестах или сях забудешь #include — результат зависит от фазы Луны. Точнее, от того, как в версии используемой библиотеки организованы заголовочники. Если твоя программа должна собираться на 3-4 платформах, возможны очень весёлые сюрпризы. Да, это ошибка программиста, но это такая ошибка, которую компилятор вполне может находить.

Интересно, кстати, как модульность будет организована в метапроге, если дело до неё дойдёт, конечно. :)

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

Если же ты в крестах или сях забудешь #include — результат зависит от фазы Луны

ilya@www ~/tmp $ cat test.c 
int main(int argc, char **argv) {
	printf("Hello, world!\n");
	return 0;
}


ilya@www ~/tmp $ gcc test.c 
test.c: In function ‘main’:
test.c:2:2: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
  printf("Hello, world!\n");
  ^~~~~~
test.c:2:2: warning: incompatible implicit declaration of built-in function ‘printf’
test.c:2:2: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’
ilya@www ~/tmp $
iluha16
()
Ответ на: комментарий от iluha16

Угу.

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

А на другой целевой платформе стоит другая версия используемой библиотеки, в которой внутреннюю организацию заголовочников слегка поправили, без нарушения API. Всё, ошибка проявилась.

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

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

Ну да. Только эта платформа может появиться позднее первой.

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

И это сферический в вакууме случай проприетарной разработки. А если проект опенсорсный? С граблями придётся разбираться даже не программисту, а майнтейнеру, который захотел затащить проект в свой дистрибутив. У майнтейнера и без этого проблем хватает...

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

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

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

Прям по классике. Отрицание тупиковости затеи было. Гнев и посылание в жопу были. Торг в виде попыток получить помощь и донаты тоже был. Молчание наступило в виде депрессии. Ждем принятия, да.

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

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

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

Может таки решил последовать совету про карандаш и бумагу Metaprog: универсальная графическая среда программирования [в разработке] часть 7 (комментарий) , поэтому и молчит, а не впал в уныние и депрессию?

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

Вот зачем ты разжигаешь? Пусть ТС подумает, успокоится. А ты его сейчас просто загоняешь в коробочку «меняниктонепонимает».

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

Без жопной боли урок не будет усвоен. Впрочем да, уже достаточно, пожалуй.

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

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

Никто - это кто? Баба Ликсуся и прочие тролли? Догадайся на чем я вертел мнение тех, кого послал в жопу.

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

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

Догадайся на чем я вертел мнение тех, кого послал в жопу

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

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

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

Беру свои слова назад, пусть сидит в коробочке.

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

Кстати, необязательно прибегать к карандашу и бумаге. Можно взять какой-нибудь универсальный диаграммер вроде dia или даже LibreOffice Draw и расчертить всё в нём.

metaprog: О, кстати, идея ещё одного варианта отвязки от labview. Берёшь LO Draw, создаёшь в нём шаблоны простейших УГО для твоего языка (сумматор там какой-нибудь, та же жёсткая последовательность, и др.). Сохраняешь как шаблон. Делаешь энное количество тестовых диаграмм.

Потом берёшь компилятор Си, minizip и libxml2 и пишешь на этом парсер диаграмм (там, ЕМНИП, просто XML, обёрнутый в ZIP). На этом спокойно можно сделать кодогенератор, который пригодится и в настоящем Метапроге. Полученную связку уже можно распространять среди энтузиастов, наращивать примеры кода и уточнять синтаксис и семантику графического языка.

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

Короче, можно много всего интересного придумать, если чуточку отойти от губительной парадигмы " я д'Артаньян, все пидорасы"... Не выжигать поляну калёным железом, а заставить существующие опенсорсные инструменты работать на тебя.

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

Дополнение. Да, если для тебя кодогенератор на текстовом языке подвиг, то это проблема. Но если ты хочешь забороть мир текстового программирования, тебе ПРИДЁТСЯ его изучать намного серьёзнее, чем сейчас. Как боксёр изучает удары соперника перед выходом на ринг.

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

Никак не могу найти флаги линкера для компиляции с libevent. Можешь помочь?

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

Можно взять какой-нибудь универсальный диаграммер вроде dia

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

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

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

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

Я не понял, ты его даже не запускал, но сделал вывод о неудобстве? Ну и я не только dia называл.

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

То есть у тебя уже сейчас диаграммы сохраняются в свой формат?

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

Да, если для тебя кодогенератор на текстовом языке подвиг, то это проблема

Зачем мне кодогенератор на тексовом языке? У меня и так есть кодогенератор на Лабвью. На первых порах после выхода альфы Метапрога будет кодогенерация через Лабвью, а дальше уже сделаем кодогенератор на графическом Метапроге. А может быть даже сделаем что-то получше, чем трансляцию в Си.

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

Я не понял, ты его даже не запускал, но сделал вывод о неудобстве? Ну и я не только dia называл.

Я потыкал https://www.draw.io/ по совету rebforce. Гораздо менее удобно, чем Лабвью и даже лабвьюшный прототип Метапрога.

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

Я потыкал https://www.draw.io/ по совету rebforce.

Пфф, а это здесь при чём? Я тебе называл два опенсорсных продукта, которые можно приспособить под себя. Причём LO Draw, наверное, предпочтительнее — он более-менее активно разивается.

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

То есть у тебя уже сейчас диаграммы сохраняются в свой формат?

В Лабвью есть стандартная функция сериализации в бинарную строку и бинарный файл:

http://zone.ni.com/reference/en-XX/help/371361R-01/glang/flatten_to_string/

http://zone.ni.com/reference/en-XX/help/371361R-01/glang/unflatten_from_string/

К функции десериализации подключаешь свой тип - и он десериализируется, если нет ошибок.

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

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

В Лабвью есть стандартная функция сериализации в бинарную строку и бинарный файл:

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

2. Ты уверен, что записанное этой функцией сможешь считать полноценным Метапрогом?

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

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

Что проще: сделать это все с нуля на нуклеаре или накостылить на Libre Office Draw?

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

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

Да, с самой первой темы.

2. Ты уверен, что записанное этой функцией сможешь считать полноценным Метапрогом?

Я на Лабвью сделаю транслятор в метапроговский формат.

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