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

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

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

Я лично за трезвость.

А если судить по содержимому тредов, то что-то слабо на то похоже…

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

Я лично за трезвость.

Ну я тоже. Ну и за метапрог. Ну и за антиметапрог. Ну и за скприптовый метапрог. В общем за все хорошее.

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

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

А что ты выпил перед тем, как бросить мне вызов с «антиметапрогом» на реде, который с треском провалил? Dr Pepper или все же что-то алкогольное? А еще где-то был «МетаЛол» - как оно там? Линус Торвальдс, например, может по приколу взять да запилить что-то стоящее, но среди критиков моего проекта таких вот способных «приколистов» не особо видно.

metaprog ()

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

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

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

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

«Мета» с украинского «цель».

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

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

на 2000 сообщениях тема закроется для еще большего числа комментаторов

Так ты попроси модеров почистить от мусора про водку и прочее. Еще продержиться.

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

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

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

А ты не наблюдай, а своё делай. А то с таким СДВГ тебе опасно отвлекаться.

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

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

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

2019 год на дворе. Только отсталые пещерные люди не знают что такое компьютерные игры.

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

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

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

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

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

ты кстати массово оскорбил всех школьников приравняв школьника к оскорблению

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

Простое подходит на простых проектах.

Как только проект становится сложным, то без ООП тяжело. Можешь не называть его ООП, можешь называть его ADT, как Вирт. Суть-то в общем, одна.

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

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

Пожалуй, плюсану.

Зачем такие эмоции?

Это же Илюха, у него коэффициент категоричности ещё выше, чем у ТСа.

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

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

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

Скорее программирование, ориентированное на данные, на типы, а не «объекты».

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

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

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

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

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

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

В этом я с тобой соглашусь.

никакого графического программирования не существует

Лабвью есть, оно не стало мейнстримом только по причине е чёкнутой копирастии.

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

оно не стало мейнстримом по причине того что может заинтересовать исключительно игроманов пытающихся освоить программирование а не настоящих программистов

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

Задавал ли я тебе вопрос на чем сам программируешь, если ты такой настоящий прогарммист?:)

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

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

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

Ну, в сложных проектах на объектную модель и вправду много чего хорошо мапится (не зря вторая буковка в DOM — именно O), но не меньшее количество приходится, откровенно говоря, притягивать за уши, плодя лишние сущности там, где можно обойтись банальным «модуль-вызов», ибо REST-модель сферического микросервиса в вакууме как раз хорошо ложится именно на такую структуру, а не на «абстрактный класс-класс-объект-метод». Таким у нас джависты страдать любят, но там вообще страдание - их удел, судя по тем фреймворкам, что я у них видел.

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

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

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

но не меньшее количество приходится, откровенно говоря, притягивать за уши

Для этого и делают ЯП мультипарадигменными. Если создатели ЯП не считают какую-то парадигму серебрянной пулей.

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

Из-за большой связанности гораздо сложнее рефакторить - тех. долг.

И ещё: перед тем, как создавать репозиторий для «скриптового ВП» не могу определиться с лицензией: BSD или GPL. Просто программные системы, где внедряют визуальное программирование, обычно бегут от gpl как от чумы. Хотя, если указать в репозитории, что среда gpl, но можно использовать в продуктах с закрытым кодом, думаю, пойдёт.

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

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

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

Это уже проблема из области человеческой психологии. Как же показать «тусовке», что ты труъ, если применяешь ООП паттерны где это нужно, а не на каждый чих?

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

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

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

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

MS как то украл код на GPL, пока не обнаружили, МS код программки не открывала %)

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

Согласен. Изменения среды не должны порождать проприетарный форк. А вот создание проприетарных продуктов в среде - норм. Даже Столлман позволяет пилить проприетарщину в емаксе. Не рекомендует, но и не запрещает.

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

Кстати, будет ли GPL дейстивительна для графического представления алгоритмов с тем же успехом, что и для текстовго кода? Или лучше «форкнуть» GPL?

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

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

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

GPL - это просто защита от копирастов из стран, где законы работают. А там, где законы не очень работают, с копирастами (хотя бы на бытовом уровне) борется торрент.

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

Если лицензию совсем не указывать то по идее она может быть какой угодно, и никто никого не украдет %)

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

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

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

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

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

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

Собственно, основной массив накопленной человечеством информации — тексты. Потому без навыка их быстрого поглощения образованным не стать.

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

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

назови задачу и я назову ЯП который считаю разумным для неё использовать

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

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

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

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

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

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