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

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

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

Предлагаю застолбить для автора домен metaprog.xxx, ибо такую порнографию ещё поискать надо.

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

Чтобы зарегистрировать metaprog.ua, нужно быть юрлицом с уже зарегистрированной торговой маркой.

Ох, ё. Я в своё время zvyozdochkin.ru регал как физик без каких-либо проблем (правда, пришлось появиться в Нерезиновой с паспортом). Это какие-то новшества международного масштаба или сугубо украинская специфика?

Ну и я бы, конечно, для такого проекта остановился на .org (классика ведь).

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

Да может я вообще обойдусь хабром и каким-то sourceforge (не гитхаб/гитлаб, так как ресурсы M$). Метапрога самого по себе должно хватать чтобы и документацию смотреть, и к своему аналогу гитхаба подключаться, и на прочие плюшки.

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

Сугубо украинская. Как у Жванецкого/Карцева: там маленькие, но по 3, а там большие, но по 5. Там .ua, но с торговой маркой, а там .укр - без торговой марки, но полностью кириллицей.

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

А аналог гитхаба будет со статическим IP или P2P? Или всё-таки нужен домен?

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

Да подожди, до доменов еще далеко.

Когда будет недалеко, найдётся регистратор-джан с менее добрыми намерениями, чем balsoft.

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

Да это неважно, главное — застолбить. Вон, Лебедев до сих пор pelevin.ru держит. Уже лет 10, если не 15 ждёт.

hobbit ★★★★★ ()
Последнее исправление: hobbit (всего исправлений: 4)
Ответ на: комментарий от balsoft

Он же вроде собирался его пускать в [кердыперды].onion. Так удобно и практично же…

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

Скрытый сервис в onion (tor). Еще будут зеркала со статическими айпи если тор не будет устраивать ощутимую часть аудитории. Но тор в плане хостинга удобнее всего на свете.

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

Но тор в плане хостинга удобнее всего на свете.

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

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

К тор браузеру будет вязаться автоматически по умолчанию.

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

Здрасьте, там сквозное шифрование клиент-сервер по-умолчанию.

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

апачу и прочей полной уязвимостей ерунде не доверяю

Эта цитата достойна занесения в лурк! ТС не только хочет изменить способы программирования, но и запилить свой веб-сервер СБИШ. Хотя, после «своей соцсети, своего чата» это не сильно удивляет.

ТС, если что, примитивнейший веб-сервер пишется за день (если брать всё готовое). Готовый для бизнеса - годы.

Ждём заявлений в стиле «линукс дырявый, вот сделаю метапрог, сконвертирую код линукса в диаграммы и буду развивать свой форк линукса, устраню все уязвимости и все корпорации будут активно мне донатить и умолять развивать дальше мой „Линукс Метапрог Видання“» («видання» - это «издание» с украинского, типа «Linux Metaprog Edition»)

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

А насчет медленный - диаграммы весят немного, тора хватит.

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

Ждём заявлений в стиле «линукс дырявый, вот сделаю метапрог, сконвертирую код линукса в диаграммы и буду развивать свой форк линукса, устраню все уязвимости и все корпорации будут активно мне донатить и умолять развивать дальше мой „Линукс Метапрог Видання“» («видання» - это «издание» с украинского, типа «Linux Metaprog Edition»)

А зачем ждать? Просто почитайте предыдущие треды.

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

Эта цитата достойна занесения в лурк!

Так реально дырявый, еще и дудосу легко поддается ж.

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

И процессоры интел.

Для всего лишь веб-сервера это непозволительно много.

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

Я не отрицаю наличие кучи уязвимостей в апаче, просто гораздо проще обойти эти дыры в своём сайте, чем писать свой http-сервер. Разница в объёме работ колоссальная. Плюс большиснтво взломов эксплуатируют дыры в старых версия цмс (вордпресс, друпал и т.д.), а не апачевские.

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

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

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

Плюс большиснтво взломов эксплуатируют дыры в старых версия цмс

Потому что это проще. Но если захотят взломать, что помешает?

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

Но если захотят взломать, что помешает?

apt-get purge apache

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

Вот по-вашему, если бы гипотетически метапрог писался бы сначала на текстовом ЯП и эта версия ide'шки стала бы опенсорсной, кому, кроме ТСа это было бы полезно? Для большинства фанбоев визуального программирования с головой хватает опенсорсных реализаций ДРАКОНа. Это у ТСа так много своеобразных требований к среде визуального программирования.

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

Да если по всем 4 топикам пробежаться, можно цитатник не хуже дедаловского собрать. И оставить в назидание потомкам.

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

Хороший повод отказаться от этого зоопарка и сделать с нуля свой простенький сервер.

Есть кстати 64-битная ОС на асме! 16 кб занимает вся. Драйвера бы написать для сетевой карты сервера, и юзабельно вполне. тисипи-айпи стек уже есть. Драйвера вообще можно у колибри-ос спереть, там простой формат %)

https://github.com/ReturnInfinity/BareMetal-OS
https://www.youtube.com/watch?v=ccLef8GLl6g
(реально конечно такое применять сомнительным кажется, но звучит интересно...)

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

Вот по-вашему, если бы гипотетически метапрог писался бы сначала на текстовом ЯП и эта версия ide'шки стала бы опенсорсной, кому, кроме ТСа это было бы полезно?

Для мигрантов с Лабвью, например.

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

В отрыве от ЛОра читается как какая-то шиза.

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

Не более, чем вот это, например. А один регистрант, не помню, кто, ещё выкладывал на гитхаб свои комментарии к пользователям ЛОРа...

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

А один регистрант, не помню, кто, ещё выкладывал на гитхаб свои комментарии к пользователям ЛОРа...

intelfx врод как

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

с тем же LabView не срабатывает, почему с метапрогом должно сработать?

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

У ТС сейчас случится визуальный оргазм, не надо так.

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

Да может я вообще обойдусь хабром и каким-то sourceforge (не гитхаб/гитлаб, так как ресурсы M$). Метапрога самого по себе должно хватать чтобы и документацию смотреть, и к своему аналогу гитхаба подключаться, и на прочие плюшки.

Нах, если не ГитХаб, то Битбакет. Сорцфордж — для садо-мазо. Битбакет неплох. Атлассиан вообще поцаны простые, с низов поднялись, не Билл Гейтс и не Торвальдс. Самое то, для Метапроги место.

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

Вася - http, Петя - json, Вова - тор, и так далее, все делают свою часть работы в своём файле, а не общем.

Кто мешает вынести Петь и Вась в отдельные функции из отдельных модулей? А вызывать их будет тимлид.

Вызов функции parseJson() гораздо понятнее, чем p->parse() из непонятно какого наследника от AbstractParser

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

Весь код твой

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

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

Unreal Engine делали любители текстового программирования. Во первых части там не разбиты на скриншоте, во вторых если представить тестовую программу в виде текста но схем - будет так же. Надо просто нормально продумывать!

VarfolomeyKote4ka ()

Автор, вы делаете великое дело. Вот только, на мой взгляд, Си - не самый лучший выбор для промежуточного языка, поскольку он вызывает слишком много стресса и депрессии своей переусложненностью. Вам бы скооперироваться с автором языка Д (не D, это не то же самое), и вместе вы сможете перевернуть индустрию IT. Смотрите тут: http://okante.narod.ru/D/

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

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

У вас неправильные программисты. Я программирую на обычных языках с удовольствием и творческим подъёмом. Стресс и депрессия появляются, когда начинаешь какой-нибудь сраной бумажкой заниматься.

А если кто-то от программирования испытывает стресс и депрессию — он ошибся с выбором профессии. Пусть идёт в брокеры, риэлторы, мерчендайзеры, наконец.

Это уж не говоря о том, что у меня сама формулировка «программист на языке N» вызывает очень нехорошие чувства. Язык — инструмент, программист — мастер. У вас получается «мастер на отвёртке»?

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

Пусть идёт в брокеры, риэлторы, мерчендайзеры, наконец.

Это же путь к *роскомнадзору* будет! %)

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

Это «работа» ради «работы», программирование нужно для создания программ.

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

У вас неправильные программисты

У вас получается «мастер на отвёртке»?

Только эцсамое, не надо мне авторство-то приписывать. Я просто разместил объяву.

И вообще, где лоркод для тега irony?

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