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)

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

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

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

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

Да, впечатляет, но автор половину написанных в этом посте слов не осилит, не говоря уж о PDF-ке насчёт STEPS, ибо с инглишем у него беда.

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

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

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

Да, впечатляет, но автор половину написанных в этом посте слов не осилит

Ахах, это система для детей, и она сделанна так что бы даже ребенок разобрался. Алан Кэй кстати очень похож на ОПа со своим smalltalk.

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

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

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

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

Haskell прекрасно с этим справляется.

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

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

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

Знаю я инглиш, может быть лучше тебя. Но все же влом врубаться в лонгриды, полные незнакомых понятий, да еще и не на русском/украинском. Даже русские тексты порой так понапишут, что только Ctrl+W поможет.

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

Ахахахах, аж съехал со стула.

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

Знаю я инглиш, может быть лучше тебя.

Then why did you have troubles with these words — «declarative», «imperative» and «functional»?

Впрочем, всему своё время. Сначала с Мегапрогой пациента срежем, а затем и по инглишу…

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

Then why did you have troubles with these words — «declarative», «imperative» and «functional»?

I just didn't give a fuck about «declarative», «imperative» and «functional». And was right.

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

Нет, знал я, конечно, отпетых гуманитариев, но впервые вижу, чтоб таковой лез в разработку сразу ПРИНЦИПИАЛЬНО НОВОЙ среды программирования. Причём абсолютно без понимания предметной области…

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

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

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

гуманитариев

Современные программисты это и есть гуманитарии. И ты скорее всего тоже.

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

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

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

Гуманитарии тут как раз мои оппоненты.

«Я — не Ваш опонент, я — Ваш вирок» © Зюзя

(для невладеющих мовой: «вирок» читается как «вырок» с ударением на первый слог и значит «приговор»)

Всякие там декларативности, императивности, изоморфности и прочие заумные греко-латинские словеса

Они заумны только для тебя, смирись.

и ни слова о байтах, битах, процессорах, транзисторах, железе.

Потому что программирование сдвинулось с этого уровня ещё лет так 20 назад (а в иных случаях и того раньше) и осталось на оном только там, где в этом есть реальная потребность.

А еще языки учить да учить, будто сишки мне не хватит в качестве бэкенда.

Что ж, адекватная оценка этому факту придёт только со временем. «Пилите, Шура, пилите!»

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

В гитхаб-репу с твоими наработками. Или сольёшься?

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

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

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

Смотри секцию «примеры»

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

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

Лабвью есть? Контрибутить будешь?

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

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

Ты скидывай, там разберемся.

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

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

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

metaprog
() автор топика

Анонимусов не одобряю но посмотреть на код metaprog'a было бы и в правду интересно.

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

Не надо закрывать. Это лулзогенератор похлеще Базиста (хотя до Дедала не дотягивает, но на безрыбье и Мегапрогер — Дедал…)

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

Скидывай донатик баксов так 100

расходимся, нас наебали. имеем дело с сбычной попрошайкой

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

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

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

Нахрена мне чего-то там скидывать, если контрибутить не будешь?

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

Скидывай донатик баксов так 100, а там разберемся.

В переходе клянчи денег, а не на приличном форуме.

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

Я бы даже и подал, но с вероятностью 98% там будет волшебное нишуя. Поэтому посмотрим, как пОциент зашевелится при наличии конкурирующей разработки, к тому же полностью открытой.

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

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

Лабвью есть? Контрибутить будешь?

Кого это волнует? Оценивают твою профпригодность

Меня волнует. Оценивай что хочешь как хочешь, мне по барабану.

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

Я бы даже и подал, но с вероятностью 98% там будет волшебное нишуя

Дык и я про тоже. Еще с первой темы было ясно.

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

фрисофтвеер же %)

У автора извращенное понимание. Он типа демиург, а остальные ему подношения должны делать for free. А код он только за 100 баксов покажет.

Пусть тогда тоже платит за консультации по Gtk, Си и основам информатики.

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