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)

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

пытается написать BABA is YOU

И это у него не получается.

Вот как легко и просто и «жопы» получить «вечность» на текстовых языках:

set a 118;set b -399;set c 467;set d -128;set e -229;set f 260;set g -111;set h 18;set q [scan "жопажопа" %c%c%c%c%c%c%c%c];set r {};foreach x $q {append r [format %c [incr x [incr a [incr b [incr c [incr d [incr e [incr f [incr g $h]]]]]]]]]};puts $r

На автор не приемлет текстового программирования.

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

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

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

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

Спорно. И к тебе идёт точно такое же отношение, пока ты посылаешь в жопу вместо ответов на каверзные вопросы.

«это лабвью, все брехня, ко-ко-ко», хотя сами в жизни ни разу не видели Лабвью и мои скрины и видео на него совсем не похожи

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

Подозреваю, что за то время, которое ты барахтаешься на привязи к Лабвью, вы с Котечкой уже могли бы написать на GTK+GDK рабочий и готовый для опенсорса (пусть даже глючный, это поправимо) прототип такого редактора. Да, на Си. Да, самый-самый начальный. Но его можно было бы уже выложить в открытый доступ и обсудить. И он бы мог оказаться полезен даже вне зависимости от того, будет ли достигнута цель-максимум. (Взлетит ли визуальное программирование «для всего», пока не ясно, а вот опенсорсный заменитель Лабвью в тех сферах, где Лабвью уже признан, вполне может взлететь. Прижать скупердяев из NI это ж тоже то, что ты хотел.)

А сейчас ты сам себя загоняешь в ловушку. Поделиться исходниками прототипа проблематично. Распараллелить работу тоже проблематично, ибо внутренний формат мало того, что двоичный, так ещё и нигде не описан. Был бы он текстовым и описанным — можно было разделиться «один пишет кодогенератор, другой IDE». А так тебе самому придётся писать и кодогенератор, и IDE, и ещё собственный git с вебинтерфейсом впридачу. Дурной работы на много лет вперёд.

Сделал неанонимные структуры

Ну хоть что-то.

А ты сам протестил последний пример?

Пока руки не дошли. Дойдут - посмотрю, но боюсь, что это не раньше конца недели.

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

Надеюсь, с графического, а не со старомодного текстового?

Высунул язык, скосил глаза. Форма есть, цвет есть. Наверное, графический. :)

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

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

Да, именно так. Сделал прототип с редактором.

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

Именно. Переносить и отвязывать скорее всего буду по частям.

Взлетит ли визуальное программирование «для всего», пока не ясно

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

можно было разделиться «один пишет кодогенератор, другой IDE». А так тебе самому придётся писать и кодогенератор, и IDE, и ещё собственный git с вебинтерфейсом впридачу

Сделаю простой редактор Метапрога «сам на себе» и можно будет пригласить других к участию в разработке.

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

пока ты посылаешь в жопу вместо ответов на каверзные вопросы

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

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

А что тут не так?

А что тут может пойти так?

  1. На кой член пытаться транслитерировать названия библиотек в кириллицу?
  2. Тебя правилам транслитерации в твоём шпалоукладочном не учили? Кстати, чтение штата Texas как «Техас» — это не транслитерация с английского, а устоявшаяся в русском и т.д. транслитерация с испанского ещё тех времён, когда сей штат не был в составе США и писался как Tejas. В английском он же читается не иначе как «Тэксэс». Откуда у тебя там Х возникла вообще? Или это твоя любимая буква, судя по отсылкам к Пушкину?
rebforce
()
Ответ на: комментарий от rebforce

Я его транслитил как видел. По-своему. Это всего лишь элемент интерфейса, который можно переделать при желании, но зачем, если меня он устраивает?

А кириллица чтобы латиницы не было в интерфейсе, я ж не англичанин.

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

Либо девисе, если б русского/украинского слова «устройство»/«пристрій» не было.

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

В медицине без знания анатомии, биохимии итп никуда, а в программировании что надо знать такого чтобы программировать?

Математику.

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

Да перевел бы, но CastXML (и вообще XML) - легаси, которое будет отброшено когда перейдем на Clang AST или еще что-то бинарное.

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

Смотря что кодишь. Не везде математика нужна.

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

Да. Но транслит все же лучше чем чистый английский.

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

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

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

Слишком сложно. Бинарные форматы проще, особенно версионированные. См. п.8 FAQ.

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

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

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

Это не то чтобы какая-то проверка для тебя. Просто хочу посмотреть, что вообще можно сделать на этом labVIEW. Но было бы интересно посмотреть именно на твои работы. Это же ты тут планируешь революцию в программировании устраивать.

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

где генерация - отступов нет

Там отступов нет как раз в малозначимом коде в духе объявлений переменных.

Ты мне тут условия ставишь?

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

Не многовато ли на себя берешь?

Вполне норм.

Из завсегдатаев

Эк ты лихо тех, кто тебя критикует, записал в согласных. Посмотрим, что сами они скажут. Отмечу только, что котечку в умные ты явно записывать поторопился)

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

Ясно. Взлетит.

Потрясающая незамутненность сознания.

Сделаю простой редактор Метапрога «сам на себе»

Объем работы представляешь?

Смотря с какой целью эти вопросы задают

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

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

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

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

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

Так можно и диграфы в строках использовать.

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

самое крутое и самое сложное, что когда-либо написал на labVIEW

Метапрог, а точнее его лабвьюшный прототип. Кстати, видео посмотрел?

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

«Неанонимные структуры» в шапке этой темы.

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

Кстати, видео посмотрел?

Да, посмотрел.

Метапрог, а точнее его лабвьюшный прототип.

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

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

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

Отвечу сейчас, но по памяти, потом напишу подробнее, не сейчас. Но советую почитать nuklear.h, там много комментариев которые документация по сути, находишь nk_edit_string первый к примеру, и читаешь что о нем написанно.

1. На каком участке кода нуклеаровского примера с диаграммами происходит открытие меню где есть кнопка для новой ноды?

https://github.com/vurtun/nuklear/blob/master/demo/node_editor.c#L320

2. Как сделать в нуклеаре кнопку и как сделать ее с картинкой?

Загрузить картинку и вызывать nk_button_image, примеры: https://github.com/vurtun/nuklear/search?q=nk_button_image&unscoped_q=nk_...

3. Как сделать аналог гткшного текствью с прокруткой?

Оно само добавляет прокрутку если надо. Поэтому создаешь nk_layout_row или как то так (смотри примеры), и просто добавляешь в него nk_label.

4. Как сделать аналог GtkEntry и обрабатывать нажатие ентера и прочих кнопок с него?

Посмотри nk_edit_string.

Вот еще документация общая: https://rawgit.com/vurtun/nuklear/master/doc/nuklear.html#

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

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

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

1. Это получается функция nk_contextual_begin реагирует на клик правой кнопкой мыши? nk_vec2(100, 220) - это размер контекстного меню, а nk_window_get_bounds(ctx) - это чтобы во всем окошке так реагировать на правый клик - я правильно понимаю? Если это так просто, то я в восторге от нуклеара!

А что с флагами nk_contextual_begin (второй параметр)?

2. Ок, вернемся к этому вопросу позже.

3, 4. Вроде понятно, но желательно ткнуть пальцем на места в коде примеров.

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

Как-то не очень впечатляет, это ведь простой конструктор

Конструктор плюс транслятор плюс еще парсер кастхмл для импорта сишных инклюдов.

Швах настанет, когда выяснится, что реальное программирование мало похоже на то, что ты делал в лабвью, но не из-за текста, а из-за необходимости описывать объёмную логику для примитивов

Что ты понимаешь под «объемной логикой для примитивов»?

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

я правильно понимаю?

Да.

А что с флагами nk_contextual_begin (второй параметр)?

Те же флаги что и ставятся для nk_begin, для параметров «окна» (контекстного меню).

3, 4. Вроде понятно, но желательно ткнуть пальцем на места в коде примеров.

3 поймешь по общей документации, смотри там секцию layouts. А 4 посмотри в https://github.com/vurtun/nuklear/blob/master/example/extended.c#L199

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

Конструктор плюс транслятор плюс еще парсер кастхмл для импорта сишных инклюдов.

И все вероятно из готовых кирпичиков. Все равно не впечатляет. Я бы впечатлился, если бы ты все это на чистых Сях написал, но увы.

Что ты понимаешь под «объемной логикой для примитивов»?

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

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

Это в десять раз сложнее, чем то, что ты сделал на лабвью.

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

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

И все вероятно из готовых кирпичиков. Все равно не впечатляет. Я бы впечатлился, если бы ты все это на чистых Сях написал, но увы.

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

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

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

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

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

существовать текущий прототип¹

¹ Существование не доказано

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

Но Лабвью хорошо тем, что базовые блоки довольно примитивные и низкоуровневые

На самом деле нет.

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

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

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

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

Так что не думаю, что с нуклеаром будет намного сложнее

В это основная проблема. Ты не имеешь опыта разработки, поэтому не в состоянии оценить объем работы.

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