LINUX.ORG.RU

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

 , , ,


4

3

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

FAQ

1. Где скачать?

Релиза еще не было. Идет разработка, темы посвящены ей. Есть сделанный на LabVIEW прототип (его работа показана в примерах).

2. Почему не открыт код LabVIEW-прототипа Метапрога?

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

3. Почему не Дракон, MIT App Inventor, Unreal Blueprints?

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

4. Чем плохи LabVIEW или MyOpenLab?

LabVIEW пропиетарный, а MyOpenLab - хоть и опенсорсный, но какой-то недоделанный (пытался у себя запустить - выдало джава эксепшоны). Да-да, опенсорсный «клон» LabVIEW написанный на джаве! LabVIEW хотя бы на C++, а это все же меньшее зло. Обе эти системы даже не сделаны «сами на себе» в графике. Они даже не пытаются претендовать на универсальную замену всем текстовым языкам, хотя LabVIEW могло бы, если бы не тупость копирастов. Эти системы написаны на текстовых языках, их код (даже если б LabVIEW был опенсорсным) невозможно редактировать, ни разу не обращаясь к текстовым языкам. Метапрог изначально предполагает полный отрыв от текста и текстовых языков, за исключением Си как бэкенда. И то пользователям никогда не придется иметь дело с текстовым Си за исключением блоков сишных вставок (для особых случаев типа арифметических операций, ассемблерных вставок итп).

5. Почему как бэкенд выбран именно Си?

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

6. В Си указатели и ручное управление памятью. Это же так сложно!

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

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

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

8. Почему в Метапроге будут предпочитаться бинарные форматы и чем это лучше?

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

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/

Что-то подобное будет и в Метапроге. При открытом коде никаких сложностей с чтением бинарных файлов не будет.

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

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

Примеры

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

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

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

Прокручиваемая и выделяемая строка с автопереносом

https://i.postimg.cc/Gm6KMJBs/image.png

https://pastebin.com/SWJJwvvC

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

Скрины подфункций в следующем примере.

Тот же пример, но покрасивее

Что можно сделать для большего удобства? Убрать инициализацию, подвязку коллбэка на закрытие окна и главную петлю гтк в подддиаграму «главное окно»:

https://i.postimg.cc/vm5DYjsw/image.png

На сей раз не поленюсь сделать скрины и объяснить их суть.

В подфункциях есть три вида контейнеров с данными: константа (стала, constant), контроль и индикатор (сверху вниз):

https://i.postimg.cc/gJkfRVBd/image.png

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

Сама подфункция «главное окно»:

https://i.postimg.cc/fbsDKR61/image.png

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

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

Обратите внимание, что инициализация должна выполниться перед не только созданием окна, но и всем, что происходит перед подачей виджета на вписывание в окно (вторая последовательность от инициализации до терминала с указателем).

Подфункция для подцепки асинхронных функций:

https://i.postimg.cc/3r0rYVCS/image.png

Добавить объект в контейнер:

https://i.postimg.cc/SNGBhf51/image.png

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

https://i.postimg.cc/xjv7vP0j/image.png

Делаем лейбл (и любой другой нужный виджет) прокручиваемым:

https://i.postimg.cc/R0PtCmkd/image.png

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

https://pastebin.com/16bq1Jbs

Этот код делает ровно то же самое, что и предыдущий, а различия - чисто косметические, связанные с уборкой функции под капот и некоторыми доработками транслятора диаграмм в Си.

Каст типов и тактическая победа над нуль-терминированными строками

Оказывается в текстовых буферах гтк можно задавать текст не нуль-терминированной строкой. Этим грех не воспользоваться. Изменяю подфункцию, создающую текствью:

https://i.postimg.cc/s2hrDj6b/image.png

Беззнаковое 32-битное, означающее размер массива (темно-синий провод) кастуется в знаковое 32-битное (светло-синие провода и пустая константа, задающая тип). Функция gtk_text_buffer_set_text в качестве размера строки берет беззнаковое, а не знаковое, как принято - видимо, чтобы через "-1" говорить, что строка нуль-терминированная. Но из-за этого вместо 4 гб строки туда можно подать лишь 2 гб - аж в 2 раза меншье! Что за люди?

Тем не менее, с нуль-терминированными функциями в текстовых полях покончено - и это победа!

https://pastebin.com/hQRMSZ1s

Также там был изменен текст. В остальном пример соответствует скринам выше.

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

А так ты просто Дениска Попов, выдавший лабвью за свою поделку

Не согласен. Дениска Попов не был хамоватым попрошайкой и не гнобил всё, что не может осилить автор метапрога своим куриным мозгом.

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

Хотя да. Даже дениска выглядит сильно грамотнее поцыэнта. Этот скорее бабушкин, который антивирь на cmdшках пейсал

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

Осиль хотя бы как Лабвью выглядит для начала.

Может ты даже купил его, а не стырил? Я бы очень удивился.

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

Какая разница?

Просто смешно выглядят твои попытки обругать ворованный софт.

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

Так вы, батенька, не просто пи...бол, но ещё и вор?

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

Какая разница?
Какая разница?
Какая разница?

])

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

Софт не может быть ворованным. Это не физический объект. Разве что если ркчь идет о диске или другом материальном носителе.

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

Софт не может быть ворованным.
Это не физический объект.

Исходники выкладывай — они не физический объект, украсть их невозможно

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

Индустрию IT давно пора хорошенько встряхнуть. Думаю, я и без блата это сделаю.

А ты смешной. Пока хорошенько сотрясать у тебя выходит только воздух.

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

Ну чо же. Он ещё лужи хорошо газифицирует.

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

Софт не может быть ворованным. Это не физический объект. Разве что если ркчь идет о диске или другом материальном носителе.

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

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

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

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

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

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

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

Конечно, подождет. Он же твой форумный клон.

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

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

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

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

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

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

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

Конечно. Одно то, что ЛОР - это твоя единственная площадка, намекает на то, что ты унылый тролль.

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

платить за не физический объект?! :) ты ж не платишь, а «я чё лох» (с)

И кстати, откуда такая инфляция — сначала было $100, сейчас уже $500?

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

И кстати, откуда такая инфляция — сначала было $100, сейчас уже $500?

Ну а вдруг кто-нибудь купится.

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

Я поднял ставку. Могу еще поднять, если мало.

Поднимай. Это ничего не изменит. Продукта не будет, денег у тебя тоже.

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

а чем тебе исчо страдать по жизни? если бы допилял свой гсофт и припёрся и с ним на ЛОР, стал её навязывать — была бы немного другая история (и покороче).

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

JSON? А почему не бинарный формат?

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

Черное, белое, серое… Где какой тип? Ах да, тебе ж плевать какие у тебя там типы, «умный» компиль сам все сделает.

Мне не плевать, какие у меня там типы, но компиль действительно умнее. Умнее тебя уж точно.

Ждать ли визуализации кода ядра Линукс на твоей системе?

Поскольку твоя такое не осилит, а мне, как и всем нормальным людям, такого не надо (разве что за очень большое бабло), ответ, КМК, очевиден.

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

Я поднял ставку.

Хозяин-барин :)

Могу еще поднять, если мало.

Кому мало?! Тебе приходиться отбиваться от нескончаемых предложений по инвестированию в твой проект?

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

Поскольку твоя такое не осилит, а мне, как и всем нормальным людям, такого не надо (разве что за очень большое бабло), ответ, КМК, очевиден.

Кстати, любая программа сложнее хелловорлда на метапроге будет выглядеть, как вычислители для майнкрафта навроде этого:

https://i.redd.it/2wnj0a3vep611.png

Автор просто ничего сложнее 3-5 строчек на си не выдал своим генератором говнокода. Пусть НОК осилит или quicksort.

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

Ну тут ещё и тьюринг-полные структуры в Game of Life можно вспомнить, но, как сказал Доктор Дью, не надо путать искусство с говноляпством.

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

«ну эт не проблема» (с)

У афтора есть козыри — зум, панорама, цветовая градация. Кароче ваши карты доводы биты/

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

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

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

Я вообще удивляюсь, как среди немногочисленных тем про крутые опенсорсные проекты плавают, как дерьмо в проруби, целых 4 (!) темы про эту школьную поделку.

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

Особенность рунета. Ну а лично я соскучился по временам дедаловщины (2011-2012), когда такого же незамутнённого признаками интеллекта персонажа гоняли всем sql.ru.

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

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

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

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

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

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

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

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

Молодец. Ещё сотня-другая таких открытий и сможешь считать себя программистом.

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

Чтоб ты лучше понимал, какая опа тебя ждёт, постараюсь объяснить по пунктам.

  1. Ты сейчас пилишь Мегапрогу на лабвью в виде схем, которые тебе каким-то загадочным образом понятны. Окей. Допустим.
  2. Но! У тебя в планах «переписать метапрог на метапрог», что по факту означает переписать метапрог на автогенерируемый Си, чтобы он потом мог сам генерировать Си, и скомпилировать его.
  3. Ты в состоянии оценить объём работ, который тебе нужен для того, чтобы на этих медвежутких схемах запилить UI, хотя бы отдалённо похожий на лабвьюшный, чтоб опосля была возможность хотя бы рисовать в нём такие же медвежуткие схемы (уж молчу о выполнении всех низкоуровневых операций для того, чтобы твои нынешние лабвьюшные портянки для генерации кода нормально работали на твоём собственном решении)?
  4. Ты в состоянии оценить состояние генерируемого тобой кода и его стабильность, если компилятор уже сейчас на простейших примерах выдаёт кучу ворнингов?
rebforce ()
Ответ на: комментарий от metaprog

Чтоб от таких дураков как ты отбиться

«Кругом одни идиоты, только я гений!» :) угадал?

кто по приколу таки скинет 500 баксов

«по приколу»: куда кидать?

Спешите, скоро еще подниму ставку.

исчо :)

А после релиза альфы настоящего Метапрога («сам на себе») лабвьюшный код даже не просите, хотя, может, когда-то для истории открою

То есть, до «настоящего Метапрога» ещё 3-4 треда, а деньги тебе какую-то «хрень» (лабвьюшный код) платить? Н-да, человечество вышло на новый этап...

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

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

Мне тоже все в своих лабвью-диаграммах видно. Поставил пробу на проводке - и показывает значение в специальном окошке при проходе проводка: http://www.ni.com/tutorial/9385/en/

Расскажи мне после этого как удобно программировать и дебажить в тексте. Хотя данные бегают в бинарном виде.

Мне не плевать, какие у меня там типы, но компиль действительно умнее

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

Поскольку твоя такое не осилит, а мне, как и всем нормальным людям, такого не надо (разве что за очень большое бабло), ответ, КМК, очевиден.

Осилит ли моя еще посмотрим, но, по крайней мере, цель у меня такая поставлена (мета українською мовою означает цель). А ты даже пытаться не будешь. А жаль. Очень хотелось бы посмотреть на код ядра Линукс с динамической типизацией:)

Отдельного абзаца стоит фраза «за очень большое бабло» (визуализировать код ядра Линукс). Тебя, видимо, код ядра пугает как меня матан и талмуды по ООП. Что это значит? Что ты мне конкурент как лошадь самолету.

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

Какая интересная обезьянка. А какой ЧСВ! Не знает ни си ни свою лабвью, а хонору как у гориллы в период брачных игр

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

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

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

Тренирую свой libastral.so/ По-моему мнению ТС ответит:

  1. Схемы понятны, в отличии от текстового C
  2. Будет сделано
  3. «Ты не понимаешь» (с) — графическое программирование в разы легче, объём работ в разы меньше
  4. Состояние кода оценивать не надо — ворнинги проблема тупого компилятора. Вот бы графический gcc, чтоб сразу из диаграмм в бинарники (мечтательно жмурится)
anonymous ()
Ответ на: комментарий от anonymous

Вот бы графический gcc,

Кстати да. Почему метаплох геренит с а не сразу ir gcc. Он же СРАЗУ БИНАРНЫЙ!!!111

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

Хотя даже ir это полумеры. Надо сразу байт-код процессора

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

1, 2 - совершенно верно.

Ты в состоянии оценить объём работ, который тебе нужен для того, чтобы на этих медвежутких схемах запилить UI, хотя бы отдалённо похожий на лабвьюшный, чтоб опосля была возможность хотя бы рисовать в нём такие же медвежуткие схемы (уж молчу о выполнении всех низкоуровневых операций для того, чтобы твои нынешние лабвьюшные портянки для генерации кода нормально работали на твоём собственном решении)?

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

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

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

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

Кстати да. Микрокод же писали текстом перед сборкой. Не по канону. Нужно чтоб в графике

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

это полумеры. Надо сразу байт-код процессора

в байт-код всех процессоров (очевидноже)

anonymous ()
Ограничение на отправку комментариев: