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

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

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

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

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

Кстати, как насчёт выложить исходники на bitbuket.org? Там есть приватные бесплатные репозитории

Они теперь есть и на гитхабе, после прихода MS.

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

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

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

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

Да и вообще, исключения для исключительных ситуаций %) Это не про обычную обработку ошибок.

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

Дак обычную проверку ошибок + зависимые типы, исключения можно сделать средствами С.

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

Про зависимые типы и теоретическое предсказание значения переменной на проводке мы уже говорили. А проверка ошибок, думаю, будет через простые if+else/switch+case (то есть, их графические аналоги).

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

Ну я к тому что зависимые типы сразу же отметают кучу ошибок! А остальное можно и с помощью if, switch проверить.

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

Только самая главная моя претензия к ООП - сложность в освоении - никуда не девается. Читай что-то да учись все время, ведь даже сам Страуструпп оценивает свое знание С++ на 8/10. ООП - хороший выбор для любителей вечно учиться да читать, но я не из таких.

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

Ну так и без ООП можно поменять функцию транспонирования. И структуру можно поменять.

лень расписывать, почитай всё же книжку то. автор её бесплатно выложил https://archive.org/details/TICPP2ndEdVolOne он тебе лучше объяснит чем я. я её классе в 10 когда учился прочитал так что сложностей в освоении особых не думаю что она у тебя вызовет.

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

да, а ещё это всё можно сделать средстами языка ассемблера.

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

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

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

ну и как это поможет? приведи пример кода с обработкой ошибок.

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

Они теперь есть и на гитхабе, после прихода MS.

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

Ах, ну да, ТС же не хочет с детищем Microsoft иметь дело... Точно, он говорил об этом. А Atalssian — поцаны обычные, они в своё время заняли $10k и принялись за работу. Сейчас их поделие ценят уже в $20M, если не ошибаюсь. Т.е. идеологических причин отказа быть не должно.

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

Библиотеку типа .so, .ko и .dll? Думаю будет несложно... когда руки дойдут до этого, но это уже будет после раскрутки Метапрога.

Проблема в разрешении имён. В Си же символ зовётся так как он зовётся. Т.е. например использование функции malloc — это использование кода по адресу в .dynsym с именем malloc.

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

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

Что ж, не поленюсь заглянуть.

A program is a bunch of objects telling each other what to do by sending messages

Кое-где мы это уже проходили:

The alternative is a microkernel-based system, in which most of the OS runs as separate processes, mostly outside the kernel. They communicate by message passing

https://groups.google.com/forum/#!topic/comp.os.minix/wlhw16QWltI[1-25]

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

так пример кода так трудно разве привести? я же привёл пример классической обработки ошибок в C коде. а вы вроде как транслятор в C хотите сделать значит можно показать код на том же C.

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

здаётся мне ты просто не писал ничего на C значительно длиннее helloworldа. точно помню мне тоже поначалу C++ показался фигнёй какой то непонятной. ты молодец что начал C изучать а не паскали какие нибудь и прочее говнище. сам или учитель по информатике подсказал?

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

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

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

Будет возможность поставить в нужном месте маркер «недопустимого состояния» и функцию-обработчик ошибки

это как раз и есть тот самый if для обработки ошибок засоряющий код и заставляющий C программистов выполнять огромное количество нудной монотонной механической писанины.

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

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

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

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

В графических диаграммах «писанины» будет существенно меньше.

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

Стоп, как это «писанины будет меньше»? Писанины вообще не будет! И телодвижений в целом надо будет куда меньше, даже без ввода каких-либо новых абстракций.

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

много воды, напоминает реферат по информатике какого нибудь школьника, по сути очень мало. ну и как тебя всё это спасает в ситуации с opendir приведённой выше в случае если каталога не существует или доступа к нему нет совершенно непонятно.

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

какой только хренотени не придумано. даже абсурдная идея автора уже не нова как выясняется.

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

проще и понятнее

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

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

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

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

Совершенно верно. А для тебя какие критерии ключевые? Чем больше книжек по паттернам ООП прочитал - тем больше ЧСВ?))

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

А, и если книжки на английском, а не русском/украинском - умножаем ЧСВ на 100500.

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

Вам возможно покажется странным, но книги читают в основном не за тем, чтобы поднять ЧСВ. А просто потому, что жизнь коротка, а проблем хочется решить как можно больше. И вот тут неожиданно выясняется, что многие проблемы были уже кем то решены. И описание этого вполне можно найти в литературе. И использовать.

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

Причем данный подход актуален абсолютно во всех областях созидательной деятельности. Для меня программирование - хобби. Решаю для себя и для друзей(в том числе админов) разнообразные задачи мелкой автоматизации. А сам я инженер-энергетик. И в моей области крайне критично использовать опыт и знания накопленные другими людьми до меня. Ибо от этого жизни могут зависеть.

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

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

какой только хренотени не придумано. даже абсурдная идея автора уже не нова как выясняется.

Ну там в «целевая аудитория» прямо написано, что для макак их дрессировщиков.

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

даже абсурдная идея автора уже не нова как выясняется

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

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

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

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

Стоп, как это «писанины будет меньше»? Писанины вообще не будет! И телодвижений в целом надо будет куда меньше, даже без ввода каких-либо новых абстракций.

а вот в будущем когда УГСП метапрог станет повсеместным де факто стандартом во всех областях программирования как будет правильно сказать? не «написал программу» а получается «накликал программу» или «нарисовал программу».

представляю заголовки «финский студент накликал ядро операционной системы linux» или вот ещё «украiнский школьнiк наклiкал революционное УГСП».

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

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

Всхохотамши под лавкою!

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

не «написал программу» а получается «накликал программу» или «нарисовал программу».

«Начертил». По смыслу близко к работе конструктора, который чертит свою продукцию во всяких автокадах...

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

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

Вот мечта идиота: когда конструктор чертит свою продукцию, а эта продукция уже готова к обработке какими-либо утилитами, в итоге, то, что эти утилиты сделали, попадает к специалисту/программисту. Тогда макак вообще не нужно! Но и опять мы возвращаемся к работе с текстом, а не мышевозюканию.

И лет через ...надцать мы к этому придем. АСУ ТП — это очень консервативная область IT.

Ну и поскольку ответы на свои вопросы от ТСа я не получил, он просто не сумел/не захотел адекватно (а не лозунгами) ответить, получается, что метапрога в нашей отрасли пролетает, как фанера над парижем. А значит, это ни хрена не универсальная среда программирования.

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

Хороший вопрос.

https://i.postimg.cc/RFyhQn8x/image.png

Эта функция будет превращать нуль-терминированную строку в нормальный массив с известным размером.

Рисовать циклы уже умею, а вот с трансляцией в Си пока мудрую. Однозначно это будет цикл do... while. Кстати, лабвьюшная «While loop» тоже эквивалентна сишному do... while. По схеме ж очевидно какие элементы должны повторяться в цикле, а какие выполняться только один раз?

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

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

Ты совершенно напрасно сравниваешь себя с Торвальдсом, он, в отличие от тебя, выкатил сообществу что-то работающее и попросил помочь. И не клянчил при этом донаты.

Когда у тебя будет что-то, что можно будет пощупать? Может тогда и будет помощь и в коде и в донатах?

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

автор, не трать время, учи лучше C++ и Java. у тебя ничего не выйдет полезного.

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