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)
Ответ на: комментарий от iluha16

блин 2 лет не прошло как школу окончил а деградация так заметна

Ну кому как не студенту пхпэшнику судить.

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

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

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

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

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

Абстракция абстракции рознь. Если абстрации упрощают процесс не в ущерб функционалу - я только за, но если они жизнь только усложняют, требуют долгого и вдумчивого изучения, ничего не давая взамен - ну их к черту. Графическое программирование мне лично все упрощает, а вот талмуды по ООП мне читать лень.

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

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

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

для заработка? я бы посмотрел как бы ты делал типичные проекты с фриланса на чистом C. либо ничего бы не успел в срок либо потонул бы в сегфолтах.

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

а чехов чем отличается так сильно?

Данный вопрос показывает ваш уровень необразованности. «Чеховский ЧИТАТЕЛЬ» — персонаж одного из рассказов, который любил читать, но не понимал ничего из прочитанного, ему просто нравилось, как из букв складываются слова.

но зачем читать то что тебе не интересно вместо к примеру технической литературы

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

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

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

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

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

Без абстракций, ага. Продолжайте держать в курсе.

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

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

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

Ведь я вырос на графических интерфейсах и игрушках с интерактивной обучалкой. Этого достаточно.

balsoft, кажется, ты цитатник составлял? Этот тезис, похоже, надо в эпилог.

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

Матана там сравнительно мало, если вообще есть. В основном там речь о работе железа, процессора, ассемблер (абстракции еще ниже, чем в Си), файловые системы, сетевые сокеты... но в конце концов все упирается в struct, union, if-else, switch-case и примитивные типы.

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

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

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

Именно. Лучше бы набор функций для программирования в графике. Хотя вот RISC-процессоры куда проще интеловских.

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

Куда же они будут пихать новые Spectre и Meltdown? Интел - такие же копирасты, как Майкрософт, но уже на уровне железа и их конкуренты из AMD ненамного лучше (примерно как M$ vs Apple).

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

Добавил. Хотя вообще-то мне это поднадоело, так что если есть желающие дальше поддерживать цитатник, напишите и я вам передам владение репозиторием.

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

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

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

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

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

Т.е. цитатник некоего украинского школьника (или студента, в чем я сомневаюсь) с отклонениями в развитии можно считать чем-то серьёзным? Интересное умозаключение.

Хотя с выводом я согласен – на всём ЛОРе Линусов нет, разве что maxcom.

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

Впиши это сообщение в конец цитатника и можешь смело его бросать:)

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

Шизофазия зашкаливает

Ты спроси откуда он, там много таких )))

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от iluha16

время в игрушечках до 20 лет просиживать.

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

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

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

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

Ведь я вырос на графических интерфейсах и игрушках с интерактивной обучалкой. Этого достаточно.

Незавидное детство.

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

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

В 60-80 лет кодить никому не нужные тулзы, когда уже создано немало полезного другими — тоже то еще занятие.

По мне так уж лучше играть.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 3)
Ответ на: комментарий от metaprog

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

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

Кстати, помню свое удивление в момент когда вместо винды 98 впервые увидел загрузку хр.

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

Игра игре рознь. Советую Factorio - она сложнее, чем Лабвью!

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

Я не геймер, просто люблю иногда поиграть.

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

А что мешает сейчас покрутить 98 в виртуалке и окунуться в «те времена»?

Мне в 2004 году купили первый комп на одногигагерцовом соплероне и там была 98 вместо XP (на которую я перешел примерно через год) В конце 2009 года пересел на семерку, одновременно с этим, я впервые узнал о существовании линукса (сперва в лице убунточки)

После дистрохоппинга, уже в 2011 году остановился на Gentoo:

2011-2015: Windows 7 и Gentoo

2015-2019: Windows 10 и Gentoo

В 2019 году снизил использование венды на 1%, а в последующие годы откажусь от него совсем.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от I-Love-Microsoft

И всем, кто сюда писал, особенно тебе.

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

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

И за сколько времени выполнится код:

 while (true)
{
    asm volatile ("nop");
}
?

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

Кстати, я точно помню, что при компиляции первого примера было ДВА РАЗНЫХ типа предупреждений. Каких точно, не помню.

Несовместимый тип указателя.

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