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

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

Ну и иди отсюда. Тебе уже никто помогать не собирается (всех распугал своей неадекватностью). А если собирается, то скажи их имена. Остальные просто потешаются над юродивым.

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

почти нет переменных, только константы и функции

(подавился попкорном, закашлялся)

без переменных нельзя

(луч надежды?)

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

Подавай сначала. Наберется приличная сумма доната - выложу. А так, любі друзі, придется ждать релиза. И активно способствовать релизу подсказками по гтк, виджетам и прочему, чего я не знаю. Опенсорс мне интересен если будут контрибутить. В «настоящий», сделанный сам на себе Метапрог, контрибутить будут. А в лабвьюшный прототип - извольте сначала доказать серьезность своих намерений участвовать в разработке.

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

Причем все что ему рассказали, он мог освоить самостоятельно. Но ему же вломы всякие «греческо-латинские словеса» расшифровывать...

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

звольте сначала доказать серьезность своих намерений участвовать в разработке.

Изволь сначала доказать свою серьезность в отношении разработки. Код отлично ее докажет. А иначе «нет ножек - нет подарков»

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

Подавай сначала. Наберется приличная сумма доната - выложу. А так, любі друзі, придется ждать релиза. И активно способствовать релизу подсказками по гтк, виджетам и прочему, чего я не знаю. Опенсорс мне интересен если будут контрибутить. В «настоящий», сделанный сам на себе Метапрог, контрибутить будут. А в лабвьюшный прототип - извольте сначала доказать серьезность своих намерений участвовать в разработке.

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

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

Просить за это деньги, тем более 100 баксов, это как в дупу долбиться. Не позорься, автор.

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

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

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

Ты не достоин чести что-либо тебе доказывать.

А кто достоин? Покажи ему, а он нам расскажет, что к чему. А пока ты просто деревенский форумный балабол, мечтающий на чужих наработках иметь пассивный доход и лежать на печи.

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

А консультации по GTK, Си ты оплатишь? Нет? А какого хрена тебе тут кто-то что-то должен тогда?

Ему помогали hobbit, котечка, анонимус Владимир, balsoft, да кто только ни помогал. Всех распугал. Ну может кроме котечки.

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

А консультации по GTK, Си ты оплатишь? Нет? А какого хрена тебе тут кто-то что-то должен тогда?

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

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

Всех распугал.

Да это был лишь вопрос времени, насколько у него хватит терпения.

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

Феерической звездаболине посвящается

Твоё счастье, любий друзь, что я ни разу не гуру в реде, чтобы запилить на нём самобутстрапящийся визуальный ЯП за неделю, и за неделю у меня появится только унылый концепт. Но я на 99% уверен, что с таким подходом твой «сделанный сам на себе Метапрог» появится явно позже «сделанного самого на себе» AMP. Если вообще появится с такой непроходимой дремучестью автора…

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

как зашевелится? известно как: срисует код и будет говорить что он его придумал.

Он уже quicksort для labview стырил из картинок в гугле. Это какой-то позор.

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

как зашевелится? известно как: срисует код и будет говорить что он его придумал.

Кстати, это одна из причин, по которой конкурирующая разработка будет пилиться на реде: у поциента просто не хватит IQ его содрать.

А так да, чувствую, что надо уже заказывать в кузнице ещё один орден имени Д. Попова.

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

Я б тебя при желании научил юзать лабвью и показал вводную по моему проекту, однако в лабвью нет даже встроенной интерактивной обучалки и возможности ее вкрутить! Нет возможности устроить интерактивную «экскурсию» по коду. Думаю что альфа-версия Метапрога поначалу будет просто «экскурсионной», чисто для просмотра кода, а потом уже и редактирование прикручу.

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

Я б тебя при желании научил юзать лабвью и показал вводную по моему проекту, однако в лабвью нет даже встроенной интерактивной обучалки и возможности ее вкрутить! Нет возможности устроить интерактивную «экскурсию» по коду. Думаю что альфа-версия Метапрога поначалу будет просто «экскурсионной», чисто для просмотра кода, а потом уже и редактирование прикручу.

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

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

Не в обучении дело, то что делается на С в одну строчку в лабьвью мне придется делать в несколько, я слишком ленив для этого %).

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

Тебе я точно ничего не должен. Вообще.

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

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

Тебе я точно ничего не должен. Вообще.

Испугался-то как. Только попросили тебя код показать и сразу под шконку прятаться.

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

Да ему помогали-то, ради угара.

Вот же блин, а он наверно думал, что у него уже человек 5 мейнтейнеров. А оказывается, что он никакой не Торвальдс.

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

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

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

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

Не отказал, а за 100 баксов готов был всему форуму лизнуть. Позорище.

Дуля тебе, а не помощь. Много тебе подсказали за последнее время или помощь эфиопским программистам поиссякла?

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

Человек оскорбляет, пишет не по теме, просит постоянно ему заплатить и прочее.

И врёт. Просил заплатить наш горе-автор-попрошайка. 100 баксов.

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

Не, чувак, тебя бы даже Базист щас раскатал трёхмиллиметровым слоем. Риторика у него была очень похожей (вплоть до «анонимусам - дуля, а не код» и «матан - ничто, практика - всё»), идеи порой были не менее шизанутыми, но он хотя бы знал, что такое парадигмы программирования. У него был какой-то реальный опыт разработки всякой дичи. И у него было реальное видение того, чем он занимался, хоть и занимался он по большей части откровенной хурмой.

Ты же представляешь собой какую-то адскую смесь Санёцка, Дедала, Бабушкина и потенциально Попова. От Санёцка и Дедала - ЧСВ и ламеризм, от Бабушкина - упор на бабло и готовность ради него проявить опасную для жизни окружающих халатность, от Попова - стыренные с гугла картинки, судя по репортам анонимусов. На какую помощь ты после всего смороженного в 4 тредах рассчитываешь вообще? (и это я не всё вычитал, кстати…)

Не обижайся, но время одуматься ещё есть.

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

Зато он стукачок!

А вообще это наверно сам метапрог и есть.

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

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

пффф... в план 9 их около 15. есть курс в районе Plan B про «добавление своего сисколла в ядро».

пример с линуксом показателен — да, оно появилось в 1991. но было очень сырое, даже по сравнению с миниксом. года до 1994 этим пользоваться было невозможно (я честно пробовал. плюнул, и ушёл на FreeBSD тогда с амиги. где-то в районе 1998 вернулся назад на линакс, ну и ещё скакал туда-сюда). популярно оно стало тогда, когда ядро допилили достаточно, чтобы тот же апач перенести.

а до того, 1992..1996 — это было ещё сырое глюкалово.

программист пришёл с работы с приступом ужасной рвоты c больших машин с «открытыми системами» — солярой, труЪ 64, аиксом и прочим ириксом. и сконпелировал какой-то код, который тогда нещадно глючил и требовал костылей в config.sub и конфигуре. году где-то так в 1996 стало почти совсем хорошо. и A patchy httpd server почти не требовалось дорабатывать напильником. где-то тогда и взлетели все эти ваши инторнеты, когда внезапно оказалось, что сервер можно с помойки собрать, нахлобучить туда линакс — и гляди ж ты, работает.

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

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

дык, когда же твоё поделие дойдёт до этой стадии? где-то так к десятому топику? ты ж не линус чтобы джва года ждать

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

очень увлекательно, ога. почти как вчитываться в логи ./configure && make && make install

например про реализацию старых смолтоков Smalltalk-72 (восстановленое).

если почитать PDF с FoNC/STEP, там пишут что 4-6 кб микрокода + остальное всё переносимо. надо просто повторить базовые примитивы виртуальной машины. и всё сразу заработает.

и не надо вчитываться в логи скринсейвера configure.sh. и сисколы реализовывать методом тыка.

Кстати, Линукс 0.01 не умел даже компилировать сам себя (чего-то не хватало для полноценной работы gcc), эта возможность добавилась чуть позже.

всё равно ядро получилось избыточно сложным. тот же Plan 9 собирает сам себя за три секунды, а ядро+компилятор+все команды секунд за 15.

секунд, Карл.

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

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

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

стыренные с гугла картинки

Где именно? Все метапроговские схемы и большинство лабвьюшных скринов - мои.

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

Где именно? Все метапроговские схемы и большинство лабвьюшных скринов - мои.

Ты прочесть сообщение целиком в состоянии?

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

тот же Plan 9 собирает сам себя за три секунды, а ядро+компилятор+все команды секунд за 15.

И ничего при этом не умеет.

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

Нафига?!! Почему бы не транслировать в более высокоуровневый и кроссплатформенный язык, не прибитый гвоздями к конкретным тулкитам?

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

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

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

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

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

я вот тоже честно, хоть убей — не понимаю

Что бы были библиотеки, ничего не тормозило, не было ограничений.

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

я говорю - идея кул

нет

нужно сделать расширение блоков, остальное запилит сообщество

нет

будет прекрасно.

нет

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

он по большому счёту не умеет только одно: динамическую линковку. в итоге всё с++-стайл bloatware идёт лесом. что не баг, а фича, я щитаю.

в остальном, если переписать на архитектуру файлсерверов некоторых объектов-компонентов. вполне себе годный юникс.

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

и запускается на lego mindstorm, например.

в отличие от этого вашего линакса.

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