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

Также там был изменен текст. В остальном пример соответствует скринам выше.

Большие зеленые мухи
Сидели на метапроге
Они не ошиблись.
anonymous ()

Веб-сервер в этом году не ждать?

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

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

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

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

Это ты онанимусов так назвал что ли, лол)

anonymous ()

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

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

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

metaprog ()

Не следил за драммой, за 4 темы подвижки какие есть?

сделаем уже в «настоящем» метапроге, а не прототипе

Предлагаю забить на лор и любые иные подобные вещи и таки нaчать пилить настоящее )))))))))))))

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

Хотя, с другой стороны, упорство поражает.

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

Так что «будем посмотреть». Жаль, что автор сразу начал писать метапрог сам на себе. В противном случае даже в случае краха программы-максимум у проекта был бы промежуточный полезный результат — опенсорсный аналог LabVIEW.

hobbit ★★★★★ ()

Когда на метапроге можно будет пилить драйверы для линукса

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

за 4 темы подвижки какие есть?

Да, две сгенерённые из диаграмм сишные портянки на пастебине, которые можно скомпилять и запустить :)

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

Четыре. Первые две в первой теме (консольный хеллоуворлд плюс такой же с записью в файл) и две графические на гтк (тема 3 и 4).

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

Ничего пока обещать не буду, но надеюсь через полгода или год.

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

Забивать на ЛОР не буду. Именно благодаря ЛОРу я познакомился с гтк, асинхронными вызовами и вообще мне здесь много полезного подсказали. Без ЛОРа я бы пилил все в разы дольше.

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

А, ну раз так. Пили, главна чтоб в кайф

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

Боюсь нас с тобой к тому времени будут лишь вскользь упоминать внуки, когда сидя на работе будучи системными программистами будут говорить друг другу. «Вась, дай мне картинку отладочного модуля я вставлю, а то Юля прислала свою программу в jpg3, а оно стрипает отладку». ЭВась, а вась? И это ещё как его скажи Юле что я ей программу скомпилирую через гимп, а не фотошоп." И отвернувшись снова по своим делам, взяв в руку ручку он стал рисовать каллбек функцию, стараясь сделать её круглой. 2371 год. Весна. В ангарах всё также стоят капсулы с человеческими телами питащими механизм. Вася по привычке нажимает на мочку уха и его электронное тело замирает дожидаясь нового дня или времени когда тела в капсулах зарядят его батареи и он снова будет рисовать круги повинуясь рекурсивной ошибке матрицы. Снова и снова, снова и снова. Снова и снова. …

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

Поражает не упорство, а глупость. ТС пытается изобрести «Дракон» (исходники открыты).

anonymous ()

часть 4

Мне кажется, пора!

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

А на случай неприятия «Дракона» есть dia2code, АлгоритмБилдер и прочее не взлетевшее (ибо ущербно by design)

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

Неа. Пока автор не показал ровным счетом ничего. У него нет никаких новых идей (ты тоже наосилил ни одной привести), коих бы не было где-то до него. ЛабВью система сильно специфическая и что-то сложнее автотестирования или прототипирования она не годится (Да и в тестировании сливает тому же робот фреймворку). Я на с ней 3 года работал есси что. Кстати я совершенно не понимаю то говно, которое автор выдает за «типа понятные» схемы.

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

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

(ты тоже наосилил ни одной привести)

Вранье.

ЛабВью система сильно специфическая и что-то сложнее автотестирования или прототипирования она не годится

Это говорит даже ОП.

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

Ну треды ты точно не читал.

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

Вранье.

Твое кококо про якобы «более понятное программирование» это на уровне рассуждений «а вот были бы у меня жабры».

Плюс ко всему я не верю в то, что автор вообще что-то осилит, потому что он банальный неуч. За 3 темы он уже отлично показал, что даже основ не понимает, а значит его фекаль будет генерить точно такую же фекаль с кучей UB. Причем это будет максимум фекаль уровня хеловорда.

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

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

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

(ты тоже наосилил ни одной привести)

Вранье.

Ну вот видишь, я (уже другой анон, тот, что с 20 стр. прошлой темы, просил примеры) - не первый кто говорит тебе об этом. Думал тема закончилась и я об этом забуду? Или что ни у кого глаз нету? Только и умеешь отсылать прошлые посты читать, взял бы давно и собрал все свои «идеи» вместе в один пост. А заодно, идеи этого метапрога. И вставили бы их в шапку. Но нет, буду жаловаться на флуд.

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

Ты слепой?

Примеры для «особо одаренных» собраны в секции «примеры» каждой темы (на все из них приведены ссылки).

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

Это ты про это нечитаемое нечто из пеинта? Или то говно с кучей уб, которое это нечто из пеинта нагенерило?

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

собрал все свои «идеи» вместе в один пост. А заодно, идеи этого метапрога.

Примеры для «особо одаренных» собраны в секции «примеры» каждой темы (на все из них приведены ссылки).

Ржавый ты метапрог, у тебя и с человеческим текстом проблемы.

Ну написано же: ИДЕИ. Разговор идет про ИДЕИ. Твои охренительные схемы - ___НЕ___ ИДЕИ.

ТЕПЕРЬ. Когда я прошу ПРИМЕРЫ, я не обязательно прошу СХЕМЫ, я прошу саму СУТЬ - мне можно объяснить и натуральным языком. Приложить как аргумент схему - я буду только рад, но именно приложить к ОБЪЯСНЕНИЮ а не заменить.

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

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

Ржавый ты метапрог, у тебя и с человеческим текстом проблемы.

Ему надо картинку нарисовать, как для неандертальца в пещере.

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

Metaprog: универсальная графическая среда программирования [в разработке] (комментарий)

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

Читаешь мои мысли, дружище. Надо блок с математическими выражениями сделать. Но это уже задолго после релиза беты. Сейчас главное сам релиз версии Метапрога, сделанной «сама на себе», математика к этому отношения не имеет.

Осмелюсь предположить, здесь описана functialia vulgaris - функция обыкновенная. В текстовых языках такой вид абстракции тоже присутствует. Или может я что-то упустил?

anonymous ()

Какие в гтк есть виджеты для:

1. Отображения текста (кроме лейбла и textview)

2. Редактирования текста?

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

1. Отображения текста (кроме лейбла и textview)

хз

2. Редактирования текста?

TextView (он и для редактирования)

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

Ну, положим...

Какие в гтк есть виджеты для:

1. Отображения текста (кроме лейбла и textview)

2. Редактирования текста?

Если подразумевается «редактирование исходников», то тогда есть gtksourceview. Он в том же gedit/anjuta/gtranslator да и так дофига где используется.

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

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

def f(x, y, z):
    return (x + y) * z

отдельный блок

таки отдельный

туда пишешь мат-выражение к примеру

написал

на входы указываешь значения переменным

указал

на выходы - результаты

и они есть

Нет, в текстовых языках такого не существует и существовать не может.

?

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

facepalm.lvclass

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

возведение в степень - есть
деление - есть
сумма - есть
даже длинная арифметика есть.

Так в чем новость и идея? в том, что это будет вынесено в какую-то мазюку с непонятным названием и соединено линиями? Так такое уже в матлабе делали, и в AutoLisp делали

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

даже длинная арифметика есть

Нету ее, а еще на питоне это будет считаться вечность, знака бесконечности нету, вообще это все можно написать и на брейнфаке, но зачем, если можно написать так же как и на картинке выше?

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

Нету ее,

> python 
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 2**1000
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376L

еще на питоне это будет считаться вечность, знака бесконечности нету,

Капец ты колхозник :D Такие вещи не должны считаться вечно (так по секрету тебе, как глупой секретарше расскажу). А вот генератор в питоне создать можно...хотя о чем это я, про генераторы и балаболке, которая не отличает массив от списка.

И ты думаешь, что на Си можно бесконечность посчитать за пару секунд?

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

Теперь это, чтоб похоже было.

1. Хм, а как же ты это выражение графически рисовать будешь?

2. Ну хорошо, наберешь ты его текстом, оно заменится формулой. Опять 25. Опять все скатилось к репрезентации информации. Ну ОК, тебе нужно отображать формулы как TEX, я понял. Берешь IDE где поддерживается отображение выражений через TEX.

Наша ветка спора идет с этого комментария:

Пока автор не показал ровным счетом ничего. У него нет никаких новых идей (ты тоже наосилил ни одной привести), коих бы не было где-то до него.

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

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

lvclass? Ты использовал ООП в Лабвью? Я - нет. Только чистые данные, массивы и кластера.

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

2**1000

А теперь с флоатами.

которая не отличает массив от списка

У тебя шиза и ложные воспоминания.

И ты думаешь, что на Си можно бесконечность посчитать за пару секунд?

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

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

И ты думаешь, что на Си можно бесконечность посчитать за пару секунд?

щас он выдаст, вот посмотришь :D

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

Теперь уже пять (но пятая - лишь другое диаграмное отображение четвертой).

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