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

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

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

спецификации, стандарты, маны — тексты — Н-Е-Н-У-Ж-Н-О!!!

В графике и так всё понятно. А кому не понятно — сможет легко свою программу-схему нарисовать. А вы со своими текстами только прогресс тормозите.

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

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

Что-то мне это конкретно напоминает

А что бы ты хотел видеть в такой системе?

Как минимум мультипарадигменность.

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

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

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

Что-то мне это конкретно напоминает…

Дениска, пожалуй, в некоторых вопросах был реалистичнее:

Но мне нужно доказать своё преимущество.

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

При чем здесь Денис Попов? Меня кто-то уличил в плагиате?

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

Я не про это. У человека были наполеоновские планы: свой компилятор, потом своё ядро... Даже Линусу писал. В этом сходство. :) Да ты по ссылке сходи.

А история с плагиатом, похоже, вообще недоразумение: его неграмотные люди начали пиарить, а у него не хватило духу резко заявить «нет, система не я, я только нескучные обои приделал». Да, виноват, что не хватило духу, но как я уже писал — у меня нет ни малейшей уверенности, что большинство местных мамкиных обличителей в 15-16 лет сумели бы поставить себя по-другому.

Ну и закономерная расплата. Не вляпался бы — до сих пор радовал бы людей своими перлами, возможно, и на ЛОРе.

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

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

P.S. Пардон, только отошёл от культурного шока на предмет того, что автор среды разработки не знает о том, что такое мультипарадигменность.

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

Императивный, декларативный, функциональный. Lingua Latina non penis canina.

Да-да, я прекрасно программирую на Лабвью, не зная значения всех этих заумных словес. Какой стиль в Си? Императивный походу. А что такое декларативный? По функциональному мне пытались объяснять - понял, что сферический матан в вакууме для не менее чем кандидатов наук.

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

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

прекрасно программирую на Лабвью

Ты себе льстишь. ты рисуешь примитивные схемки для какого-то сильно простого процесса.

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

P.S. Пардон, только отошёл от культурного шока на предмет того, что автор среды разработки не знает о том, что такое мультипарадигменность.

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

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

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

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

Кому-то уже удалось сделать язык, на котором одинаково хорошо получаются императивщина и ФП?

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

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

Дениска, пожалуй, в некоторых вопросах был реалистичнее

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

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

А, и да, за культурным шоком ещё затерялось вот это:

Где ты видел синтаксический сахар на моих диаграммах? Там вообще синтаксиса как такового нет!

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

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

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

Кому-то уже удалось сделать язык, на котором одинаково хорошо получаются императивщина и ФП?

REBOL, Red, Lisp, JS (ES6 и выше). Это был мой первый и последний коммент в этом треде по этому поводу. Если хошь подискутировать, можешь запилить другой тред.

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

Товарищ разработчик сред разработки мало того, что не знал

этот «разработчик» вообще ничего не знает. даже круг нарисовать не сможет

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

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

Хм, да и сам устаканенный набор блоков тоже.

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

Императивный, декларативный, функциональный. Lingua Latina non penis canina.

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

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

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

Какой стиль в Си? Императивный походу.

Императивный, процедурный, структурный.

А что такое декларативный?

Это как раз стиль программирования твоего лабвью, если на нём не страдать извращениями. Внезапно, да?

По функциональному мне пытались объяснять - понял, что сферический матан в вакууме для не менее чем кандидатов наук.

Значит, эти объяснявшие сами не до конца понимали сути ФП. А она капитально проста: всё (в идеале) можно выразить функциями и константами. Переменные существуют только в качестве аргументов к функциям и в идеале не могут изменяться. И в этом стиле на самом деле можно писать на очень многом количестве языков.

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

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

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

Переменные существуют только в качестве аргументов к функциям и в идеале не могут изменяться. И в этом стиле на самом деле можно писать на очень многом количестве языков.

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

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

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

Это как раз стиль программирования твоего лабвью, если на нём не страдать извращениями. Внезапно, да?

В чем суть декларативного подхода?

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

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

В Испании или Южной Америке живешь что ли?

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

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

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

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

Можно, и «циклов» вообще в ФП нету, вместо них рекурсия.

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

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

Я не боюсь «опозориться», прослыть что-то незнающим. Мне по барабану. Что не знаю - прямо спрашиваю, может хоть так что-то пойму.

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

А как оно по издержкам памяти и все такое? Или уже компилятор превращает рекурсии в циклы?

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

Вот и ТС примерно так же. Сразу после сишечки — метапрог.

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

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

Я тоже (тащемта, в некоторых областях (вроде квалкоммовских протоколов) сам такой), но в данном случае таки s/упорством/упоротостью.

Но — всё хорошо в меру. Когда стремление сохранить своё видение переходит в агрессивное нежелание учиться и перенимать лучшее, вечер перестаёт быть томным.

Вот да, Эффект Даннинга — Крюгера во все поля.

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

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

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

что ты несешь, что ты несешь...

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

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

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

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

Чем ты ещё занимаешься в LabVIEW, кроме как мегапрогу ваяешь?

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

Это как? Делать сам алгоритм, не вдаваясь в мелкие нюансы?

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

Нет, никаких алгоритмов, описываешь только то что должно сделаться! А программа там сама как то алгоритм составляет.

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

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

А по изначальному назначению LabVIEW - симуляция работы электронных схем и приборов - пользуешься?

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

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

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

Хотя че там по мелочи. Метапрог ого-го какая мелочь, и с каждым днем муха все больше превращается в слона:)

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

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

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

Нет.

Поехавшего ответ ©

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

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

Это ж не шарашкина контора и не один разработчик, работающий в свободное время - могли бы допилить до универсального ИДЕ на все случаи жизни, после чего отбросить джаву за ненадобностью. Но не стали. Что за люди?

ну например в проекте FoNC/STEP стали: отчёт

это — система, работающая на голом железе. включающая в себя текстовый процессор, эксель, свой собственный FRP GUI Фреймворк и 2D библиотеку, прочее. написана на себе самой, как набор расширяемых DSL. каждая отдельная часть компактна, наглядна и обозрима.

по назначению это похоже на SmallTalk (см. например ниже про Etoys и Morphic). но если смоллток это вещь в себе, то тут набор DSL и свой лисп (Pepsi, k), ОО система (COLA), ОО парсер (OMeta), Си ядро.

система уже работает, хотя в ней еще можно найти следы использования Си. Система воспроизводит основную функциональность персонального компьютинга (браузинг веба, производство текстовых документов, спредшитов, слайдовых презентаций, работу с языками программирования, воспроизведение аудио и видео), но умещается в 20тыс. строк кода на голом железе — вместе со всеми необходимыми для реальной работы оптимизациями.

Nile, Gezira — 2D библиотеки, написанные как dataflow DSL для вычисления геометрии. разработаны в рамках этого проекта STEP.

So when we say we can produce virtually all of 2.5D anti‑aliased alphaed personal computer graphics in 457 lines of program, we can let that stand on its own as being “very small”—at least 100 times smaller than other extant systems.

А. И. Левенчук про это. обновлённые ссылки: writings видео

первый отчёт, концепция проекта; ещё отчёт концепция

Товарищи! Революция, о которой так долго и невнятно говорил Троцкий тов. Алан Кей, ещё не произошла

etoys для пятиклассников.

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

Есть ли декларативный язык программирования на все случаи жизни?:)

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