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

Все я в состоянии оценить, думаю за месяц-другой управиться.

Подумай (если есть чем) ещё раз. Тебе нужно по сути написать с нуля лабвью-подобную среду на GTK. Да, визуально транслируемом, но всё том же GTK. Ты точно уверен том, что управишься за месяц-другой?

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

Стопэ… У тебя сейчас даже UTF-8 нет?! Держите меня семеро… А его - в соседнюю с Наполеоном палату. 2019, мать его за ногу.

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

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

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

Поцыэнт, пройдите на клизму с галоперидолом

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

Да будет тебе известно, Буратин Бонапартыч, что во всех нормальных ЯП строки уже в UTF-8. И о многоязычности в цивилизованном мире уже давно не парятся.

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

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

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

нифигасе! такого совпадения я не ожидал, думал % поменьше будет... ладно, теперь хоть понятно — направление верное, нужно только верифицировать веса критериев...

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

А то! Есть германская группа, романская, семитская. а есть utf8 группа. Самая древняя

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

Поздравляю, ты открыл для себя локализацию. Надеюсь, хватит соображалки использовать встроенные средства GTK для этого или будешь, как обычно, велосипедить?

rebforce
()

Цуко шож вы делаете. Я уже ржать не могу. Этот кадр определенно должен занять свое место в галерее поповых, бабушкиных и других «героев-новаторов».

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

я тоже падсталом// ребята сделайте перерыв в шоу, это не гуманно по отношению к читателям-зрителям :)

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

Кстати, да, однако помимо местных «героев» - @gromes, @Maxikkk, @sanyock - я помню ещё и товарищей с конкурирующего ресурса: Дедал (он же JErik) и Базист (он же RStudio). Если взять эту пятёрку за эталон, то сей кадр получается примерно в этом русле:

  • Наглость - 338.9 Поповых;
  • ЧСВ - 5.65 Дедалов;
  • Незамутнённость интеллектом - 9.81 Санёцков;
  • Профессионализм - 0.0002 Базиста;
  • Упоротость - 1.33 Maxikk-а.
rebforce
()
Ответ на: комментарий от metaprog

Так как начет встроенных средств гтк по локализации и многоязычным строкам?

Деньги вперед. Или сам ищи.

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

Прогрессивный мир использует UPopF-8 вместо UTF-8.

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

Возможно, своя реализация будет лучше всего. Еще подожду вердикта Котечки.

Он сейчас вне зоны доступа? Или сам активируется, как у героя фильма Сплит?

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

они хоть в схемах-диаграммах?

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

Скоро для анонимусов эта тема закроется, а новую открою только когда надо будет обновить заголовок, если тут не смогу.

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

Пс, короче есть идея, бро. Открываем фирму «Софтвере Про» все дела. Рассказываем ТС, что работать там — круче чем в Гугол, что даже Линус туда просился, но его подвинули. И вот, хедхантер, глядя на незаурядный талант, амбициозность, и свежие идеи ТС, хочет его нанять. Но пока на испыталовку. Будем скидывать задания с фриланс бирж. Деньги пополам, ну и ТС немного. Ах да, и всячески нахваливать.

Не проподать же дормовой энергии. Да и выручать парнишку надо. Пропадёт он без нас. Совсем пропадёт.

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

Скоро для анонимусов эта тема закроется

Бука.

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

Ты же нас не бросишь? Правда?

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

Зачем ты эти темы здесь вообще создаёшь, если игнорируешь 95% того, что тебе здесь пишут, или же отвечаешь «нет, я лучше знаю»?

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

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

Скоро для анонимусов эта тема закроется, а новую открою только когда надо будет обновить заголовок, если тут не смогу.

А как же котечка?

anonymous
()

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

if (condition) {
    // true branch
} else {
    // false branch
}

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

Клоуны — они такие: один тут всем свой мега-гуй показывает, другой слаку демонстрирует…

anonymous
()

Кстати, если серьёзно. Если выкинуть 90% всей понаписанной аффтором маниловщины про мировое господство и потрясание устоев IT, оставить базовую идею, то в принципе могла бы получиться рабочая система обучения детей млашего школьного возраста основам программирования.

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

Мы с длугом мечтаем, что когда выластем, будем плогламиловать в глафике и показываем всем свои слаки!

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

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

Ну и опять же, не логой единой живет дошколенок. Конкуренция, разнообразие, и так далее.

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

Я вообще впервые вижу этот графвиз. Но подойдет ли он для Метапрога? Я сомневаюсь.

Я тоже сомневаюсь. В любом диаграммере (к которым относится и Метапрог) нужна интерактивность, а графвиз немного про другое, у него результат работы картинка.

(Хотя если ошибаюсь — анонимусы, свистните. Будет любопытно.)

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

То есть, до «настоящего Метапрога» ещё 3-4 треда, а деньги тебе какую-то «хрень» (лабвьюшный код) платить? Н-да, человечество вышло на новый этап...

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

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

Внимательнее читай ворнинги. Они все одного типа

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

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

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

Быть может автор 100 или 500 баксов заплатит за консультацию?

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

Скоро для анонимусов эта тема закроется, а новую открою только когда надо будет обновить заголовок, если тут не смогу.

Открывай.

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

Кстати, да, однако помимо местных «героев» ... я помню ещё и товарищей с конкурирующего ресурса

А слабо всем перечисленным объединиться и создать команду супергероев? Всяко сочетание будет не хуже, чем Тор с Человеком-пауком...

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

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

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

Несовместимый поинтер? Анонимная структура? И note о том же? Что еще?

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

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

Тебя я предпочту просто послать. Сказал бы куда, да правила запрещают слово из трех букв, начинающееся на «х».

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