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

но мне лично Лабвью удобнее всего на свете

Это потому что у тебя нет опыта программирования за пределами DSL. Тебе не с чем сравнивать. Одно только «мне не нравятся предупреждения — отключу их» чего стоит.

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

Сколько таких уже идей было реализовано...

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

ну и зеленые тоже

https://ru.wikipedia.org/wiki/Обыкновенная_зелёная_падальница

Распространены на скотобойнях, в выгребных ямах, на экскрементах.

Просто черные может быть больше распространены и в принципе везде лезут.

Да и потом, большие зеленые - звучит музыкальнее. Они реже. Это придает пикантности, не находите?

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

но мне лично

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


за более чем 60 страниц мне никто их не нашел

Потому что они никому не нужны за пределами узкой специфики

XMs ★★★★★
()
Ответ на: комментарий от i-rinat

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

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

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

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

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

других аргументов в пользу мышевоза нет.

Так это первый и главный аргумент - именно мне так удобнее. Линус, кстати, тоже поначалу делал Линукс чисто для себя, так как его задолбали глюки и ограничения миникса.

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

Товарищи модераторы, пора чистить копрофильский оффтоп.

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

Это потому что у тебя нет опыта программирования за пределами DSL. Тебе не с чем сравнивать

Что такое DSL?

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

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

Твою наскальную живопись надо учить не менее долго и уж точно не менее нудно, с RTFM тоже ничуть не лучше. Наглядность в ней тоже отсуствует. Интерактивность — не фича языка, а фича IDE, о чём уже неоднократно говорили.

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

Так это первый и главный аргумент - именно мне так удобнее

Синдром утёнка, да.

Линус, кстати,

Линус, кстати, изучил вопрос. А ещё он выкатил первый мессадж с уже готовым результатом, который можно было посмотреть. Ты же пока только балаболишь и не показал ничего. Намалеванная нечитаемая лапша из линий и коряво сгегеренный код с кучей варнингов не считается. Так что пока ты просто очередной Денис Попов а не Линус.

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

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

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

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

(другой анонимус)

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

Линус, кстати, тоже поначалу делал Линукс чисто для себя, так как его задолбали глюки и ограничения миникса.

Ты серьёзно не понимаешь, что отличие тебя от Линуса в том, что ты ничего не знаешь, ничего не сделал, но много балаболишь, при том, что у тебя есть Интернет с любыми материалами по основам (и не только) алгоритмов, матанализа и программирования в совершенно свободном доступе — всё на блюдечке, но ты всё равно неуч и учиться не хочешь без пинка от пользователей ЛОРа (ничего уникального тебе тут не сказали, и ты мог это всё узнать за один день из любой вменяемой книжки, вместо эпопеи с 4 темами). Во времена написания первых версий Линукса, всё было далеко не так просто, и тем не менее, Линус имел и знания и умения, которых у тебя нет.

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

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

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

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

Синдром утёнка, да.

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

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

Либо его много раз банили и банят, либо это разлогинивающийся регистрант.

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

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

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

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

Тролли — это довольно примитивные существа, они слетаются туда, где есть еда. Хочешь облегчить работу модераторам — не будь едой, и тролли отстанут. Не сразу, конечно. Например, когда ты пишешь «чтоб компилятор заткнулся с глупыми предупреждениями» - ты прямо-таки приглашаешь троллей: «все сюда, срать здесь».

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

Тебе могут помочь люди, которые знают, что такое Си, что такое компиляция, в том числе под разные архитектуры. Но у этих людей есть свои стандарты качества. И когда ты заявляешь «предупреждения глупые, я их буду игнорировать», ты по сути вот этим людям говоришь «вы дураки и не лечитесь, идите нахрен от моего гениального продукта». То есть делаешь всё, чтобы сообщество НЕ сложилось.

Подумай: оно тебе надо? Нет, если вся эта тема с Метапрогом один сплошной троллинг, то я просто в восхищении: так долго, тонко и старательно на ЛОРе не троллил ещё никто. Но если это не троллинг и ты действительно хочешь сделать что-то полезное — подумай.

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

если вся эта тема с Метапрогом один сплошной троллинг

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

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

Троллинг? Я думал это когда кому-то смешно. А тут поливают грязью с ног до головы. И сам ТС регулярно кормит. Хотя если он прикалывается по мышевозне, то я не удивлюсь если он ловит кайф и с такого мазохистического предприятия.

неуч с цветочками

так это вообще бот

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

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

ух ты, круто!

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

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

Серьёзно, нет смысл проводить аналитику с прогнозированием там, где просран элементарный складской учёт. Или затевать капремонт крыши в доме, где гнилой фундамент вот-вот развалится.

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

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

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

Если б анонимусы разводили срачи под своими аккаунтами (если таковые есть), их бы уже давно забанили. Не жалко идиотам своего времени и усилий столько писать, чтобы потом модераторы все почистили. Целые страницы срачей из тем вырезались, а они все не унимаются!

Я б и не открывал уже 4 часть, если б у меня не отнялась возможность редактировать заглавный пост в 2-3 частях. Все же в автозакрытии тем для анонимусов и новорегов есть свои плюсы. Не припомню, чтоб анонимусы приносили пользу проекту, а вот время на срачи отнимают (хотя и веселят порой). Даже от скептиков бывает толк, от анонимусов - 0 без палочки.

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

Если б анонимусы разводили срачи под своими аккаунтами (если таковые есть), их бы уже давно забанили

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

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

Вообще-то...

Всё почти так. Только не для «борьбы с инфекциями», позволю себе уточнить.

Личинок мух использовали с начала использования огнестрела. Пуля (не важно из нарезняка или гладкоствола) оставляет в теле раневой канал, который имеет вид конуса в разрезе с более широким диаметром к выходу. Для нарезного оружия, если брать ранение чисто в мягкие ткани и пуля сохраняла стабильность, можно сказать что диаметр будет равен калибр оружия * 3, для гладкоствола и считать не берусь. Если по ходу движения пуля зацепила кость, то всё может оказаться хуже и намного. Военно-полевой хирург будет вынужден удалить ещё по сантиметру-два вокруг раневого канала. Там будут ткани, подвергнувшиеся ударному воздействию (контузии). Иначе туда попадут анаэробные бактерии,а они туда всегда попадают и гангрена просто обеспечена. И вот тут вопрос что проще — личинки мухи, которые сожрут только контуженные ткани или скальпель хирурга.

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

Это отсылка к юзеру анонiмус, который тоже жёг тут неподецки. Он тоже заявлял что все вокруг мудаки, а он понял жизнь. И все все проблемы решаются не так как они должны решаться. Например он говорил что бд не нужны и он напишет лучше используя только текстовый файл(напоминает текущего поцыэнта, да). Как то некий аноним предложил ему челендж в написании эмулятора галактики, чтоб звёзды, кометы, планеты со всеми законами и правилами, чтоб можно было добавлять объекты разных параметров, менять законы. Аноним пейсал свою на питоне, а поцыэнтт сказал что для него это задач слишком унизительна, через некоторое время, так ничего и не выкатив. Тогда ему предложили нарисовать хотя бы круг (типа планета такая). Он тоже слился, тему закрыли, поцыэнта забанили.

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

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

тащемто предложение «нарисовать круг» выражает сомнение говорящего в способностях поцыэнта. Ну и отсылка к тому самому анонiмусу, который потом воскресал много раз тут под разными никами, но всегда угадывался по первым предложениям создаваемых тем

anonymous
()
Ответ на: Вообще-то... от Moisha_Liberman

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

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

какое же все таки у тебя кайфовое комбо аватара и никнейма

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

Я даже не буду пытаться убеждать кого-то там в своих способностях. Кому не нравится - идите лесом:)

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

metaprog
() автор топика
Ответ на: Оффтоп-оффтопом... от Moisha_Liberman

да ладно. тут уже вон сколь интересного. Оказывается он невкурсе, что передавать не те структуры это уб. Да еще и inplaced

anonymous
()
Ответ на: Оффтоп-оффтопом... от Moisha_Liberman

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

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

Ну скажите большое спасибо...

За то, что я не предложил Вам сгенерировать код модуля ядра и выслать его kernel hackers для ознакомления. Вместе с рассказом по Ваш очешуенный проект.

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

Правда, боюсь, после этого, Линус забил бы на вновь изобретённый CoC и мы бы не дождались его до версии ядра 6.0, а то и 7.0. =)))

А так... Это ЛОР. ;)

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

Я тут проговорился почему я...

не комментирую и даже не собираюсь комментировать то, что наш уважаемый ТС называет кодом.

Можно я просто тихо и скорбно промолчу? =)))

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

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

// from header 1
#pragma pack(1)
struct my_internal_buisiless {
    int cool_story;
    char magic;
    int another_cool_story;
};
#pragma pack()

// from header 2
#pragma pack(2)
struct not_your_buisiness {
    char magic[2];
    float flop;
};
#pragma pack()

// from header 3
struct widget {
    int blahblah;
    struct my_internal_buisiless business[4];
    struct not_your_buisiness nope[4];
};

void my_factory(struct widget *w)
{
    // blaah blah
}

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

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

кстати я еще не говорю про очешуенный секс с разгребанием кордампов со всеми этими element0, element1 и metaprog_struct_2342341234123412341234213412341234123

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

#pragma pack(2)

Будет, кстати еще охереннее, когда там будет еще какой-нить __attritube__()

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