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

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



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

Ответ один

Ну в случае с ассемблером-то есть и второй. Ассемблер прибит гвоздями к архитектуре процессора. И если я пишу библиотеку для десктопа и андроида, мне уже этих архитектур нужно КАК МИНИМУМ две.

А вот ответ на вопрос «Нужна ли Java программисту, который уже знает Си и умеет на нём писать» не так очевиден. Это, конечно, не про ТСа, это про человека, который на Си действительно пишет постоянно. (Хотя наличие в яве библиотек на каждый чих может быть серьёзным аргументом в её пользу — но тут я не копенгаген, а такой аргумент надо подкреплять конкретными прмиерами.)

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

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

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

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

Метапрог анонсирован только в марте 2019. 8 лет еще не прошло, в отличие от реда. Где реальные проекты на реде?

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

Что-то последние две страницы дискуссия опять скатилась на уровень «Нет ты». Может, всё-таки разойдётесь по своим IDE и сюда будете постить то, на что интересно посмотреть? (Я в свою очередь обещаю: если увижу то, что смогу собрать своим gcc и потестить - потещу.)

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

Метапрог анонсирован

Вот когда выйдет тогда и можно будет сравнивать.

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

«Нет ты»

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

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

Оно означает абсолютно новый подход ко всему вышеперечисленному.

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

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

Конечно, когда появится что то лучше.

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

Ядро продолжают писать на С

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

могли бы давно интерфейс сделать для какого нибудь язычка, как NetBSD сделали для lua

Lua в NetBSD сделали для модулей ядра, но намерения переписывать всё ядро на Lua у них нет. Сразу видно, что ты не имеешь отношения ни к одной серьёзной разработке.

возьмем к примеру systemd, старенький слишком?

Да, первый релиз был аж в 2010. Rust и Red тогда только анонсировали, Go уже был, но в нестабильном состоянии. Сразу видно, что ты не имеешь отношения ни к одной серьёзной разработке.

Ну тогда pipewire. Кодеки на чем пишут? Там вообще ассемблер есть.

На чём можно, на том и пишут. Ассемблер – тоже не панацея и опять же, убийца кроссархитектурности. Сразу видно, что ты не имеешь отношения ни к одной серьёзной разработке.

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

Вот зачем ты 5 раз повторил «Сразу видно, что ты не имеешь отношения ни к одной серьёзной разработке»? Думаешь, убедительнее будет? Нет. Оставил бы только технические аргументы, ТС бы попрыгал по граблям, глядишь, и захотел бы перечитать.

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

Вот зачем ты 5 раз повторил «Сразу видно, что ты не имеешь отношения ни к одной серьёзной разработке»? Думаешь, убедительнее будет?

ЧСВ свое тешит

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

Большие проекты нельзя так просто взять и переписать.

Логично, к чему ты это?

Потому что зачем пропадать уже налаженной инфраструктуре и терять уйму человекочасов?

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

но намерения переписывать всё ядро на Lua у них нет

А зачем это нужно? В мат.библиотеках (C, Python, C++) использует fortran библиотеки, и никто их не переписывают, они уже работают.

Да, первый релиз был аж в 2010.

А читать ты умеешь? Я специально что бы ты не ныл про PipeWire рассказал.

Ассемблер – тоже не панацея и опять же, убийца кроссархитектурности.

К чему ты это пишешь вообще? Учитывая то что ты повторяешь одну и ту же фразу, я начинаю беспокоиться о твоем псих.здоровье.

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

Большие проекты нельзя так просто взять и переписать

В Метапроге планирую сделать автоконверсию сишного кода в метапрог-диаграммы. За несколько кликов мышкой так можно будет конвертировать сишный проект любой сложности.

Потому что зачем пропадать уже налаженной инфраструктуре и терять уйму человекочасов?

Это основная причина выбора Си как бекенда.

На чём можно, на том и пишут. Ассемблер – тоже не панацея и опять же, убийца кроссархитектурности

Кодеки, оптимизированные под конкретную архитектуру, работают быстрее.

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

Кстати, ты все еще не показал твои серьезные разработки. Брейнфаки не в счет.

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

Выбрал в меню настроек «использовать http» - будет http, выбрал json - будет json, выбрал тор - будет тор. В ООП - это паттерн «Стратегия», в сишке - аккуратно повозиться с указателями на функции.

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

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

Тебе шестой раз повторить, неосилятор операторов сравнения? Нет, это и правда круче вопроса на 4PDA «будут ли приниматься вызовы с открытой слайд-крышкой».

P.S. Я что-то пропустил или в GCC уже typeof отменили, что ТС не может взять и проверить очевидные вещи?

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

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

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

Я бы на месте автора сначала бы сконцентрировался на создании полностью открытого аналога лабвью (раз уж она ему так нравится), тем более, что прототип в виде MyOpenLab имеется. Чтобы работала, логику рисовала, и без эксепшонов.

У меня MyOpenLab работает почему-то без всяких экзепшонов.

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

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

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

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

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

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

Метапрог - самый серьезный из моих проектов, я этого даже не скрываю. А самая серьезная из твоих серьезных разработок - твои брейнфаки.

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

Ему, видите ли, не нравится, что я донат-адрес выложил. Кстати, поднимаю ставку: выложу исходники лабвьюшного прототипа за 10 тысяч долларов. Халява за 100 или 500 баксов закончилась.

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

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

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

то докажет, что будут реально контрибутить в лабвьюшный прототип

Следует читать как «если вы напишите его за меня»

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

Но время на код я потрачу, и далеко не факт что ты этот код не присвоишь себе потом, в коммерческих целях. Как ни крути, отовсюду прет кидаловом. ДУмаю это и есть единственная твоя цель. И да - опенсорс строится на доверии, а ты даже исходники зажал. О каком доверии тут речь?

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

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

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

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

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

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

Для меня все мои проекты делятся на 2 типа: те, которые лучше вообще никому не показывать, так как они дают мне преимущество над остальным человечеством и те, которые может кто поможет дописать как достояние человечества. Брать деньги за код, особенно в России, по мне так бессмысленно. Если найдется богатый буратина, который купит, так может и на торренты потом выложить по доброте душевной.

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

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

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

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

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

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

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

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

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

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

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

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

А, типа кикстартера? Тогда ок. Но все равно, по-моему проект должен проходить 2 стадии - «автор упоролся» и «я же говорил». На первом этапе денег никто не даст. На втором можно тупо продать разработку кому-то вроде гугла.

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

Бугогогогогогогогога-а-а-а-а-а-а… За волшебное нишуя?

Ты правда думаешь, что кто-то на это поведётся?

Исходники твоей писанины никому, кроме тебя, не нужны, да и тебе тоже, ибо их тупо нет. Были бы - давно бы уже выложил безо всяких дебилоидных условий.

P.S. Разбаньте @Isobutane, он таких штабелями на место ставил.

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

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

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

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

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