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

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

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

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

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

Удваиваю. Я могу посмеяться, сходив в театр на «Ревизора» Гоголя, но в школе заставлять все это читать необязательно. Достойные книги и так читать будут, но насильное впихивание всякой ерунды в мозги школьников прививает только отвращение к чтению. Особенно «золотая осень» и прочие чисто художественно-пейзажные мотивы, типичные для диктантов или зубрежки на оценку.

При этом ужасает, что выпускники школ редко имеют представление о процессе производства микросхем, работе паровой машины, двигателя внутреннего сгорания, электровоза, турбины самолета, ракетного двигателя, что ІР-адрес - это всего лишь 4 байта или 32-битное знаковое число...

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

Фух, наконец-то создал репозиторий! https://github.com/arturianec100/skyvis

SkyVis - это моё видение визуального программирования. Пилю на C++/Qt. Сначала думал назвать Visual Script, но понял, что это буде тплохо гуглиться. Решил сократить Visual Script -> VisScri -> SciVis -> SkyVis.

Пока что там ничего толком нет - набросал грубый скелет гуя в Qt Designer и немного подумал над декомпозицией приложения на слои (создал несколько пустых папок и классов).

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

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

Кстати, пухленький зверь, посмотрел я этот твой Factor. Ну ты ж понимаешь, что компактный рантайм — это полтора мега в распакованном виде, а не 30 в запакованном? Щас для сравнения тот же эрланг себе на андроид (в Termux) поставил — пакет 33 МБ весит. Так что при прочих равных лучше уж его осваивать, чем вот это вот нечто.

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

что ІР-адрес - это всего лишь 4 байта или 32-битное знаковое число...

Ооо, далеко не все знают что такое байт! Но информатика это ужас! Полнейший! Даже я с трудом к середине урока понимал что именно нам сейчас объясняют, что за тема! А понимал только потому что знал уже все давно, и только благодаря этому! Без знаний я бы как и остальные, считал бы это все магией, и все уроки бы прошли для меня без получения новых знаний, так как я бы просто не понимал о чем речь! Да я бы их и так не получил, и не получал, в школе делается упор на запоминание каких то правил, а не на понимание, учеба ради учебы, бессмысленное занятие, я два года назад закончил 9 классов, и ушел, жаль что так поздно.

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

Ты не смотрел Factor, не ври. Ты посмотрел видимо на размер архива с компилятором, ide, библиотеками, примерами, ресурсами с картинками, звуками итд. Эх, сразу видно профессионала.

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

В Factor «компиляция» вообще очень гибко настраивается, можно выбрать что попадет в .exe, а что нет. Если удалить таблицу символов, VM, итд, то Hello World будет размером с тот же Hello World на ассемблере. Да и программы пожирнее тоже будут компактными, единственное что некоторые библиотеки используют фишки которые делают .exe жирным, ну он об этом скажет.

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

я два года назад закончил 9 классов, и ушел, жаль что так поздно.

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

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

Это я запакованный размер дистрибутива назвал. А так Factor.app + factor.image (собственно, образ VM-ки) в сумме весят 101.8 МБ, из которых сам образ, который от платформы не зависит, весит 100.9. Так что это ты не смотрел. Ну и вдобавок ещё добавляется полная невозможность запустить саму VM из голой консоли.

Пипец жЫрнота, короче. Ёрик перспективнее.

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

Это я запакованный размер дистрибутива назвал. А так Factor.app + factor.image (собственно, образ VM-ки) в сумме весят 101.8 МБ, из которых сам образ, который от платформы не зависит, весит 100.9. Так что это ты не смотрел. Ну и вдобавок ещё добавляется полная невозможность запустить саму VM из голой консоли.

Бред какой то, во первых из консоли все прекрасно запускается, даже под виндой, во вторых образ с названием factor содержит в себе функционал компилятор, ide и так далее, можно сделать свой образ с голым компилятором, просто для удобства сделали такой большой где все есть.

Это всё объясняет.

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

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

пол жизни

Жизнь — гермафродит, можно сказать. Определённого пола у неё нет.

просидел впустую

4.2.

зато можно всех обвинять в тупости

Небезосновательно же.

и кидать ссылку на ться.

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

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

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

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

Ахах, как подгорел сразу! Ты сядь, успокойся, дыши глубже! %) Можешь даже продолжить свой аутотренинг, главное чаще повторять себе что школа, она была не зря, ты многое получил, она тебе помогла в жизни, и так далее, а то еще крыша поедет...

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

твои аватары всё дурнее и дурнее

Написание metaprog'a

1. прежде всего разработать текстовое декларативное представление всех этих линий.

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

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

4. переписать транслятор на разработанном языке

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

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

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

Ооо, далеко не все знают что такое байт!

а ты знаешь? и почему в старых текстах RFC используется вместно него термин octet.

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

финальный этап - написание гуя для рисования всех этих линий уже на своём новом ЯП

В смысле XMLки в которых схемы представляются руками набрать? Или что?)

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

Знаю. Правда если будешь так выпендриваться тебе 2 поставят, нечева от программы отходить, а по ней байт он всегда как на x86.

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

ну если представлением этого метапрога является XML тогда да. я же не в курсе что вы там напрограммировали.

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

как можно компилировать C в XML если XML вообще не ЯП

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

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

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

мне не очень понятно что будет представлять из себя XML полученный из C кода. тот же текст обёрнутый в XML тэги или что? ты бы ещё в csv скомпилировал.

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

Школа, дорогой мой неуч, как минимум научила меня тому, что люди — хурма на блюде, и помогла развить приемлемый уровень социопатии. Поэтому смешно наблюдать, как ты думаешь, что у меня что-то подгорело. Это за 14-летний стаж троллинга всяких МД вроде тебя. Кстати, как и «школота», МД — это тоже не про возраст. Есть на мобильных ресурсах всяких один мажор из Перми уже вроде в возрасте, но по умственному развитию — типичный МД.

А въезжалово в неорганическую химию, языки и географию посёлка Чепушиловы в виде этого земного шарика — это уже так, побочные эффекты.

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

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

Ахах, ну ты и шиз, какой лес, какая социопатия? Блин, я минут 10 проигрывал! Хотя тут и негатив есть, ты же хороший пример того во что человека может превратить школа, плохое общество, теперь ты абсолютно поехавший, очень глупый, и перманентно злой.

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

Уже и так.

The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.

balsoft ()

Количество шизы в треде зашкалило, сижу и угораю, спасибо за веселую субботу!

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

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

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

так если социопат ты почему в лес нам?

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

То есть, завязанности на именно текстовую форму нет и графического представления алгоритмов GPL касается с таким же успехом?

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

Представление блок-диаграмм Метапрога хранится в бинарном формате.

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

это зря. усложняешь себе работу. так бы мог на своём же метапроге написать viewer/editor для своих диаграмм если уж твой ЯП так хорош.

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

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

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

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

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

а вообще что бы разработать полезный ЯП думаю надо неплохо знать несколько существующих что бы понимать их преимущества и недостатки. Как писал разработчик ruby:

I knew many languages before I created Ruby, but I was never fully satisfied with them. They were uglier, tougher, more complex, or more simple than I expected. I wanted to create my own language that satisfied me, as a programmer. I knew a lot about the language's target audience: myself. To my surprise, many programmers all over the world feel very much like I do. They feel happy when they discover and program in Ruby.

Throughout the development of the Ruby language, I've focused my energies on making programming faster and easier. All features in Ruby, including object-oriented features, are designed to work as ordinary programmers (e.g., me) expect them to work. Most programmers feel it is elegant, easy to use, and a pleasure to program.

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

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

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

В целом цитата соответствует моему случаю, только Руби заменить на Метапрог.

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

живой пример деградации человечества о котором я неоднократно писал. а кто то ещё не верил что афтар простой играман.

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

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

Эммм… Так. Одного эталонного малолетнего обалдуя из Палаты мер и весов выгнали из девятого класса, с этим уже разобрались. А тебя из какого?

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

Во. Если уж рантайм жирный себе позволить можно, то лучше уж в эликсир въезжать, а то факторы всякие…

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

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

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

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

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

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

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