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

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

Кстати, где balsoft? Слился?))

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

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

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

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

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

А на вопрос ответить слабо? Зачем тебе это всё, если ты всё равно никого не слушаешь? Почему бы тебе на собственный блог не переехать и не графоманить в гордом одиночестве?

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

Ну от некоторых толк по делу есть. Откуда бы я узнал как пользоваться гтк и что вообще лучше брать гтк, а не Xlib?

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

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

Лучше бери дракон за основу и прикручивай ред к нему, раз так хочется.

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

у от некоторых толк по делу есть. Откуда бы я узнал как пользоваться гтк и что вообще лучше брать гтк, а не Xlib?

Лолшто? А почему не SDL2 в таком случае? Более портируем ведь. Его можно хоть в голом фреймбуфере запускать. Без графических подсистем. И всё уже включено - графон, аудио, многопоточность, ввод, таймеры, работа с ФС и т.д.

Поржать над твоей экспрессией, бугуртом

Ржут здесь только над тобой, буратинка.

потугами пародировать Метапрог

Как можно спародировать то, чего нет?

мне льстит, что целых три мои темы в топе ЛОРа

Почему так - можешь почитать в удалённых, бугога.

Намекну: это не от большого твоего ума они в топе.

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

А почему не SDL2 в таком случае?

Хммм, интересно. Котечка, что скажешь? Проще или сложнее?

Как можно спародировать то, чего нет?

Ты вроде называл свою систему Антиметапрог? Или уже передумал?

Почему так - можешь почитать в удалённых, бугога.

А почему они удаленные?

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

Ты вроде называл свою систему Антиметапрог?

Да, но пародией она не является, так как нельзя спародировать то, чего нет.

А почему они удаленные?

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

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

Ну почему ты нас с котечкой дураками считаешь? Потому что я убежден в необходимости строгой типизации? Или потому что указатели тебя пугают, как меня талмуды по ООП, а я их не боюсь?))

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

Ты понимаешь, что такими высказываниями ты просто хоронишь свою карьеру?

Строгая и статическая типизация - понятия совершенно несвязанные. Например, в Питоне типизация строгая, но динамическая.

P.S. Как таких безграмотных вообще на ЛОР пускают…

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

Ну пускай статическая. Черт побери, мне вообще по барабану как что называется с точки зрения сферических теоретиков в вакууме. Главное чтобы было наглядно и видно какие где типы. Чтобы каждый тип со своим цветом. Чтобы подключить неподходящий тип было невозможно. У тебя будет защита от подключения неподходящих типов?

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

У тебя будет защита от подключения неподходящих типов?

Да, такие типы, как ты, точно подключиться не смогут.

Для особо одарённых детей природы поясняю: в нормальных компилируемых языках вроде Red и Kotlin функции можно объявлять как с ожиданием определённого типа параметров, так и без оного. Соответственно, если функция объявлена, например, с типом параметра file!, а туда идёт string!, такой код не соберётся. Если тип для параметра не указан, то соберётся.

Чтобы каждый тип со своим цветом.

У меня их 45 только в базовом языке. Придумаешь столько цветов? Глаза не разъедутся различать?

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

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

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

Вообще интересует другое, можно ли проверить тип объектов? А то ошибусь в имени поля, и все... Свалиться программа.

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

Что скажешь по поводу:

1. SDL2

2. Встроенного функционала в гтк для многоязычных строк?

Подробности в сообщениях выше.

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

Стопэ… У тебя сейчас даже UTF-8 нет?! Держите меня семеро…

В твоем язычке тоже поддержки юникода нормальной нету.

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

в нормальных компилируемых языках вроде Red и Kotlin функции можно объявлять как с ожиданием определённого типа параметров, так и без оного

А зачем функции без ожидания параметра? Я допускаю что в некоторых случаях могут быть несколько типов на один вход (например, суммировать можно не только числа, а и указатели), но это должно задаваться специально в особых случаях.

У меня их 45 только в базовом языке. Придумаешь столько цветов? Глаза не разъедутся различать?

И какие там типы? Сводится ли все к числовым типам (дроби, делые знаковые/беззнаковые разных разрядностей), массивам, структурам и юнионам? Есть ли указатели? Что еще есть? Можно ли их сгруппировать в категории как у меня и каждой свой цвет? Знаковым свой, беззнаковым свой, флоатам третий итд.

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

1. SDL2

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

2. Встроенного функционала в гтк для многоязычных строк?

Не юзал его, но думаю что он хороший.

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

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

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

Не думаю, там то уже на все грабли наступили.

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

Попробуй все же найти хоть что-то за что зацепиться. Я пока кручу блок для облегчения построения интерфейсов коллбеков.

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

А конкретнее? Я в Лабвью использую массивы кластеров (структур) из строк, и это лишь простейшая структура из двух строк. Сделать функцию сравнения строк и работы со структурами - и все будет ок.

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

Спасибо. То есть, надо держать po-файлы и использовать pootle?

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

Пипец. Классы. Указатели. Юнионы. Закопайтесь же оба туда, откуда вылезли - в чревоточину из прошлого века. Вам не место в этом времени и в этой реальности. Вы - шо те рыбки гуппи с таким же микромозгом, не видящие ничего дальше своего аквариума и неспособные мыслить никакими другими категориями, кроме того, что вам в этот аквариум положили. Вам, недоучкам, совершенно невдомёк, что вокруг есть огромный мир без этих ваших говноклассов и быдлоуказателей, в котором, тем не менее, ежедневно успешно решаются реальные бизнес-задачи. Мир DSL, IDL, Dataflow, реактивного программирования, машинного обучения и датамайнинга. Вы просто органически не способны осмыслить ни масштабы, ни методологию, ни парадигмы, ни концепции того, что в современном мире называется программированием. Вы даже не представляете, насколько жалкими и ущербными вы сейчас выглядите после всего, что вы тут понаписывали.

А теперь быстро, решительно забудьте сюда дорогу. Ради вашего же блага.

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

Визуализировать код ядра Линукс ты слился, сказал что менее чем за 22000 баксов браться за такое не станешь. Не хочешь белы рученьки марать об такую пошлую и вульгарную низкоуровщину. Конкурент ли твой проект моему с таким подходом? Едва ли.

Что ж, раз мы с котечкой такие вот ископаемые из прошлого века, похвастайся-ка лучше своими конкретными проектами.

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

Что ж, раз мы с котечкой такие вот ископаемые из прошлого века, похвастайся-ка лучше своими конкретными проектами.

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

Спасибо. То есть, надо держать po-файлы и использовать pootle?

Видимо да.

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

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

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

Кстати, насчет циклов. Есть разница в выхлопе компилятора по типам циклов (for, while, do... while)? Или они все работают одинаково на уровне машинного кода?

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

Нет, лучше циклы, goto скорее всего сломает оптимизации.

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

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

Я вообще не понимаю зачем Вам десктопное приложение. Сделайте веб-приложение на D3js c возможностью скачать сгенерированный исходник. Либо трансляцию в JavaScript, как опцию, или как-то так. В общем, мне кажется это и проще и востребованней. Зашёл на сайт, сбацал хелло-ворд, качнул, компильнул. Или запустил прямо в браузере. В конечном итоге, поднять локальную ноду проще простого. И связать эту ноду с компилятором — тоже. Привлекать людей проще как раз-таки на веб-приложении.

D3js — довольно мощная библиотека, какие-то связи и прочая визуализация делается элементарно. Полно примеров. Короче, мне кажется это оптимальным. По крайней мере будет видно сразу. Лишней возни минимум. Переписать всё это в GTK после будет намного проще. К тому же, если кто-то заценит — то поможет. Это 100%. Ну и так далее. Веб приложение по природе своей кросс-платформенное. В том числе катит и на мобильных устройствах.

Все детишки будут этому только рады. Не шаря в if-elsa-х — быть программистом — мечта любого детсадовца.

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

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

V: Посмотри туториалы какие нибудь, зачем мануалы.

M: Может действительно лучше не заморачиваться и сделать свою реализацию.

Ты спрашивал, почему сюда набегают анонимы срать? Вот именно поэтому.

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

Создать понятную документацию по уже существующим компонентам

Документацию? Лучше сделаю интерактивную обучалку.

То есть документа, который можно просто полистать (скорость листания у разных людей разная, если что), в любой момент вернуться на предыдущую страницу, повторить непонятый материал (да-да, я не хочу повторять ВЕСЬ предыдущий урок, я только один-единственный квадратик там не запомнил), наконец, законспектировать и проанализировать — такого документа мы не дождёмся?

Я уж не говорю о том, что описание и обучалка — это ВООБЩЕ в принципе разные вещи, и второе НИКОГДА не заменяло первое. В описание можно заглядывать всю жизнь. Глянь книжку Страуструпа по C++, например (хотя там же страшное ООП, покусать может). Там основной текст — это именно учебник, а в приложении всё равно описание.

Ты делаешь всё, чтобы отпугнуть людей от своего проекта.

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

почему сюда набегают анонимы срать?

Жизнью обиженные тому ще. А не из за низнаний ОПа или чего то такого.

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

Да господи, при чём здесь незнание? Незнание — не порок и легко лечится. А вот стойкое нежелание читать и узнавать — это уже совсем другая материя.

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

да-да, я не хочу повторять ВЕСЬ предыдущий урок, я только один-единственный квадратик там не запомнил

Так нужно просто адекватно поделить интерактивную обучалку на «страницы», это ж не ограниченное видео.

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

Без разницы, дело все равно не в этом, реально проблему видят в этом только человека 2-3, включая тебя.

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