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

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

Тот пост я писал. Справедливости ради, Red только частично написан сам на себе на данный момент. Ядро всё ещё собирается через второй ребол. Ненад уверяет, что «мы работаем над этим». Но в данном контексте это не так важно.

осталось только понять что и во что компелировать. с примерами расписать юзкейзы, графический синтаксис нарисовать инструкциями того же Red или PostScript. а тут как раз и непонятки.

ну а аффтар умиляется тем, что гцц компелирует (с 500 вонингами, ога). потом выяснится что нужно ещё 10500 библиотек написать, хедеров и врапперов. то есть, нарисовать, конечно же. наскальной живописью.

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

то есть, когда оно таки взлетит и в каком именно составе — непонятки полные.

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

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

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

Люди любят цирк с клоунами. Продолжай отжигать.

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

Оно не умеет в драйвера, файловые системы, оптимизации, сомневаюсь что умеет модули которые zram, fuse, etc. Не умеет в современные браузеры, игры, виртуализацию.

Возможно я ошибаюсь, поправь. Но сейчас я смотрю на это, и вижу что то несерьезное, как ОС Алана.

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

Это весело, читать все что вы с Котечкой тут пишете.

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

ДЕТОЧКА, только не нервничайте, Вам же вредно...

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

ДЕТОЧКА, только не нервничайте, Вам же вредно...

Он всё ещё грезит 100-долларовой купюрой. Попрошайкой тоже надо уметь работать.

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

Все возможные типы и структуры разбиваются до самой элементарщины.

но зачем? и что там происходит с выравниванием структур?

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

Не поверишь, но далеко не везде нужно всё вышеперечисленное.

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

Он всё ещё грезит 100-долларовой купюрой. Попрошайкой тоже надо уметь работать.

Я думаю, это его основная цель здесь. Найти лоха, который ему денег зашлет. Здесь таких нет.

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

выравнивание нинужно, потому что нипанятна (с) аффтар метаговна

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

А если нарисовать ему эти $100 (типа как сувенирные)? Логично же за нарисованный код рисованную купюру...

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

Тот пост я писал. Справедливости ради, Red только частично написан сам на себе на данный момент. Ядро всё ещё собирается через второй ребол. Ненад уверяет, что «мы работаем над этим». Но в данном контексте это не так важно.

О, здрасьте. И мне еще недоделанный Red предлагают вместо проверенного 36 годами Си, на котором все системные вызовы, куча готовых библиотек и прочие плюшки. А Red, судя по всему, ничем не лучше Си. Краткостью синтаксиса? Это для меня не аргумент. Еще какие есть преимущества перед Си?

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

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

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

А мой Ericsson SH888 заставит тебя поверить. Там ненужно совершенно ничего из тобой перечисленного. А embedded OS имеется. Не буду врать, но не исключено даже, что на базе Plan 9.

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

Не так прочел, мне показалось там написанно «нинужно». Ну все равно не ясно где можно применять этот plan.

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

не ну, первые (11?) годы она формировалась, росла и только потом прошла проверку (кем и чем?)

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

А, я аж на 10 лет ее «омолодил»:)

Ты просто не только читать не умеешь, но и считать тоже.

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

Ну C18 получается совсем новый, и проверку еще не прошел?)

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

недоделанный Red

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

А Red, судя по всему, ничем не лучше Си. Краткостью синтаксиса? Это для меня не аргумент. Еще какие есть преимущества перед Си?

Для тебя это всё равно будут непонятные буковки, но хотя бы «безопасность при работе с памятью» тебе понятна?

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

47 лет сишке, а она еще актуальна! Напомнило наш подвижной состав на железной дороге https://ru.wikipedia.org/wiki/ВЛ8 https://ru.wikipedia.org/wiki/ЭР1 у нас еще катаются такие, а вот новомодные «электронные» электровозы многие уже стоят под забором https://ru.wikipedia.org/wiki/ДЭ1 https://ru.wikipedia.org/wiki/ДС3

Даже электровозы нормально делать разучились, а софт - так тем более.

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

Ты просто не только читать не умеешь, но и считать тоже.

Просто в картинках надо. И всё разматывая.

Сишке ||||||||||||||||||||||||||||||||||||||||||||||| — вот столько лет.

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

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

Ну так Метапрог я делаю лишь несколько месяцев и то в одиночку. Написано: «в разработке». И, кстати, через месяц-другой Метапрог уже перейдет на самообеспечение.

И на кой черт мне сдался REBOL, если есть Лабвью, лабвьюшный прототип Метапрога и Си?

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

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

что-то похожее есть в проекте SHEETS на Java, который Gwydion,описание, но старое и недопиленное (JDK 1.1.7 как бы намекает. а вообще, я так понимаю, хотели на Dylan написать, Gwydion Dylan это оттуда.

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

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

опять же, эти иерархии/холархии абстракций где-то должны же храниться? чтобы было из чего выбирать при переходе.

значит, нужен какой-то язык описания подсистем. опять получается нечто вроде literate programming в духе noweb или org-mode babel, с «блоками кода» и «блоками данных».

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

И, кстати, через месяц-другой Метапрог уже перейдет на самообеспечение.

Не надейся. Только если ты воровать начнешь или мошенничать.

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

А показать нечего. Всё какие-то отмазки лепишь... Трус.

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

И, кстати, через месяц-другой Метапрог уже перейдет на самообеспечение.

Заскриншотил этот пост. Как раз вернусь к тому времени из командировки и проверю сей факт.

И на кой черт мне сдался REBOL, если есть Лабвью, лабвьюшный прототип Метапрога и Си?

На кой чёрт мне сдался мультитул, если есть старые колготы, скотч и напильник?

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

Даже электровозы нормально делать разучились, а софт - так тем более.

Взаимосвязано, Вы не находите? Деградация вместо прогресса.

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

Rebol, red неюзабельные, там ничего нет. В С сразу, подключил либу и погнал, для твои язычков придется еще библиотеки писать.

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

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

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

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

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

Пока все очень предсказуемо...

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

Заскриншотил этот пост

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

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

Rebol, red неюзабельные, там ничего нет

Брехня, юзабельные. Если подключить сишные же библиотеки)))))

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

ЩИТО, простите?

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

Ловите наркомана!

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

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

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

Драйвер заодно напиши на этом реболе, модуль для ядра какой нибудь. Ну или Fuse драйвер.

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

Драйвер заодно напиши на этом реболе, модуль для ядра какой нибудь. Ну или Fuse драйвер.

За это не платят.

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

Rebol, red неюзабельные, там ничего нет
придется еще библиотеки писать.

Вот оно чё... А программисты мужики-то не знают

«Пользоваться ЯП без библиотек нельзя.» Правда что ли? В той же Сишечке библиотеки появились после её реального применения.

anonymous ()
Футуристичный взор,
Необузданной идеи в небе метеор,
Мессия техно,
Вот кто он.

"Этот мир -- полон мрака и невежд"
"Это было видно сразу - без надежд."
Вот так, без задних мыслей, и без промедленья,
Предстал пред нами ОН - с позой просветленья.

"Вот что, люди! свет в конце тунеля видел я!"
"Там Си структуры порождают схемы,"
"Для ничтоженья необъятного простора зол"
"На которых бродит дьявол,"
"(Из человечьих языков что он)."

Прогнившими он видел:
Стены мира,
Аргументы были вточь,
(Как ночью в человечью дочь.)

Но закрАлась в тОлчу зала 
Рокового подозренья нота,
Может полон мрака был не мир?
И кто из нас невеждой то прослыл? 

И вдруг: "Доната дай!"
Вскричал маэстро
Куда ж ты с ним пойдешь, 
Нон-грата хренов Тесла?

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

И зал рапортавал:
"У поцента ЧСВшный доширака мозг"
И что в конце концов он заслужил?
Вердикт: разупорин и кучу розг.

---

А ты чего уныл, анон?
Помог, направил, подсказал?
А Метапрог чего?
А что ты ждал?
Не первый раз он дупу показал.
anonymous ()
Ответ на: комментарий от anonymous

Ага, и вообще это нинужно в мире Rebol. За него кстати платят?

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

Положил в «Закладки». Ждём-с часа X M

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

Ооо...народный фольклор подъехал. Эпик-треду быть!

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

Окей, простая задача, программа парсит прокси с сайтов, проверяет их скорость, формирует список (gui)

Вообще фигня вопрос.

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

Это на какой системе такая маздайщина происходит?

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

Мои не смогут (они у меня эзотерические, все 4), Red сможет. Но на…зачем? Mirrorsort поставить влом?

Драйвер заодно напиши на этом реболе, модуль для ядра какой нибудь. Ну или Fuse драйвер.

Это пишется на Red/System, ага. Но мне что с этого?

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

А Линус тоже под псевдонимом писал софт? Ты бы представился хоть, Мыкола.

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