LINUX.ORG.RU

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

 , ,


6

7

Почему, несмотря на обилие «чудесных» ООП-языков, Си, разработанный в 1973 году, до сих пор не умер? Потому что не выхдящие за рамки текстового программирования попытки «улучшить» или заменить Си давали и дают проблем больше, чем решали.

Какой из ныне существующих языков программирования позволяет программировать мышкой, а не клавиатурой? На чем можно программировать графически, а не в тексте? Пока что это позволяет на приличном уровне только пропиетарное LabVIEW. Трудно поверить, но это единственная полностью графическая среда программирования серьезного уровня в 2019 году! Но даже в LabVIEW есть куча недостатков (которые невозможно самостоятельно устранить из-за пропиетарности).

Графическое программирование намного проще и понятнее. Если в качестве бэкенда брать Си и манипулировать функциями из сишной стандартной библиотеки, это не будет создавать никаких лишних абстракций, зато серьезно упростит жизнь программистам и особенно людям, имеющим дело с чужим кодом. Код любого уровня и любой сложности, представленный в виде графических блоков, станет открытым не только для узких специалистов, но и вообще любому продвинутому пользователю. Простота программирования и эффективность, не меньшая, чем у Си, убьет C++, Python, Java, Javascript и прочую ерунду с раздутыми и полными багов абстракциями (которые Линус не раз крыл матом).

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

Я уже рисую простенькие блок-схемы. Добился того, что функции, типы, структуры, юнионы из сишных #include сразу отображаются в виде меню, что серьезно упрощает знакомство со стандартной библиотекой Си.

Примеры

Примеры с кодом на Си генерируются автоматически. Они тут же скармливаются компилятору и не предназначены для чтения эстетами, не любящими «абракадабру». Здесь они приведены лишь как пример работы транслятора и для возможности самостоятельно скомпилировать графические диаграммы со скринов. Так сказать, приобщиться к прекрасному.

Самое простое - Hello World. Скомпилируйте (gcc -o ./test ./code.c).

https://i.postimg.cc/YCywWbSh/fwrite.png

#include <stdio.h>

int main(){
char metaprog_array_pointer_10156130170823954432[] = {72,101,108,108,111,32,87,111,114,108,100};
unsigned long int metaprog_variable_13830126042312755200 = 1;
unsigned long int metaprog_array_size_10156130170823954432 = 11;
fwrite(metaprog_array_pointer_10156130170823954432,metaprog_variable_13830126042312755200,metaprog_array_size_10156130170823954432,stdout);

}

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

Массив декларируется не как строка в кавычках, а как последовательность байтов, а байт - это цифра. Строки редактируются отдельным редактором (пока что средствами LabVIEW, но это временно). Больше никаких проблем и глюков с управляющими символами, кавычками итп (очень серьезная проблема при программировании на Си, Shell scripting и вообще всех текстовых языках).

Константа-массив имеет отдельные терминалы для указателя на массив и длины массива (известной редактору кода). Если терминал длины подключен - декларируется отдельная переменная. Не подключен - незачем и декларировать.

Пример посложнее: запись и в stdout, и в файл ./fwrite-test.txt

https://i.postimg.cc/v8KvKKmQ/fwrite2.png

#include <stdio.h>

int main(){
char metaprog_array_pointer_10156130170823954432[] = {72,101,108,108,111,32,87,111,114,108,100};
unsigned long int metaprog_variable_13830126042312755200 = 1;
unsigned long int metaprog_array_size_10156130170823954432 = 11;
fwrite(metaprog_array_pointer_10156130170823954432,metaprog_variable_13830126042312755200,metaprog_array_size_10156130170823954432,stdout);
char metaprog_array_pointer_12385851444566411264[] = {46,47,102,119,114,105,116,101,45,116,101,115,116,46,116,120,116,0};
char metaprog_array_pointer_16510743873862514688[] = {119,43,0};
fwrite(metaprog_array_pointer_10156130170823954432,metaprog_variable_13830126042312755200,metaprog_array_size_10156130170823954432,fopen(metaprog_array_pointer_12385851444566411264,metaprog_array_pointer_16510743873862514688));

}

В данном примере используется функция fwrite, а не printf. То есть, символ «0» не влияет на запись массива в файл или stdout. Сколько символов писать функция и так знает из длины массива.

Заявки

Принимаю заявки на новые фичи. Пишите в комментариях. Уже приняты заявки:

1. Пример с простым HTTP-сервером.

2. Пример с сортировкой Хоара (quicksort).

3. Простой в пользовании функционал работы со строками (больная тема для Си и С++).

4. Полностью графический функционал работы с регулярными выражениями, без вовлечения PCRE.

Сейчас нужно научить Metaprog «компилировать» блок-схемы прямо в Си и скармливать этот код gcc, получая бинарники. После чего перенести сам Metaprog на Си, чтоб перестать нуждаться в пропиетарном LabVIEW и выложить результаты в опенсорс. И получить за это донат, хотя желательно уже сейчас (для ускорения работы). Bitcoin:1AYoK2TScSpD5bhf67mv9AxHDJ2RidRvjD

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

Дракон не полностью графический, там лишь блоки текста. LabVIEW полностью графическая без вставок текста.

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

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

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

Больше никаких проблем и глюков с управляющими символами, кавычкам

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

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

Как думаешь, почему в последнее время программирование стараются превратить в развлекалово? Ну согласись, реально цирк какой-то.

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

Читабельность здесь не нужна. Это код для компилятора. Читабельность нужна только на уровне графической диаграммы.

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

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

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

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

Удачи с отладкой, с таким-то подходом. Для сравнения, посмотри, какой код генерирует flex/bison

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

Отладка на уровне графических диаграмм.

Для сравнения, посмотри, какой код генерирует flex/bison

Это что за ерунда?

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

У Labview ключевой недостаток - пропиетарность, то есть платность (если не пиратить), невозможность форкнуть и допилить самостоятельно.

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

Отладка на уровне графических диаграмм

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


Это что за ерунда?

Если для тебя генераторы лексических и синтаксических анализаторов — ерунда, то ждём революции в программировании, сравнимой с влиянием книг Кристофера Александера

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

Ты сам-то стал бы таким пользоваться? Это какое-то рисование презентаций вместо кодинга. В разы же медленнее, чем просто взять и написать.

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

десять макак заменят одного программиста. это не так

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

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

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

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

не дай Боже на одну буковку ошибиться!

Боже может и даст, а IDE в большинстве случаев нет.

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

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

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

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

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

Я так понял, что автор к этому и стремится, но, как вы и сказали, это забавно.

andalevor ()

Владимир

Такой сишный «код» генератора можно назвать одним словом - абракадабра.

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

Владимир

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

anonymous ()

Попроси денег на сеанс у хорошего психиатра - может ещё больше наберёшь.

ados ★★★★★ ()

Графическое программирование общего назначения очень плохо работает. Хорошо работает если оно специализировано под задачу (описание техпроцесса, behavior tree, дерево решений, машина состояний), но оно очень быстро становится очень неэффективным в общем коде, особенно низкоуровневом. Становится физически тяжело (кто с тачскринов начала 90-х программировал автоматику тот знает).

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

А почему ты меня спрашиваешь? Это ТСу нужно, а не мне. Просто он уверяет, что кроме LabView ничего нет.

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

Медленно как раз писать, туеву хучу раз копипастить

Избыток копипастинга - это дефект архитектуры программы, а не представления в текстовом виде.

и не дай Боже на одну буковку ошибиться!

Не понял. Тебе компилятор сообщений об ошибках не выдаёт? Или ты пишешь на какой-то интерпретоте типа досовского бейсика, где написал случайно I5 вместо l5 и получил боль? Да нет, вообще, вроде, про Си речь шла...

А вообще, по-моему, жалоба

Медленно как раз писать, туеву хучу раз копипастить и не дай Боже на одну буковку ошибиться!

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

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

Упрощения до уровня возможности отказаться от идиотской ерунды типа объектных моделей.

Объектная модель в C++ даёт возможность плюсиком соединить две строки, например. А операцией сравнения — сравнить. На Си надо лепить пирамиду из strcat, strstr, etc.

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

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

Путать перегрузку операций с объектной моделью - это... как раз уровень ТСа :D

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

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

Я-то хотел не занудствовать, а поинтересоваться у ТСа, что он со всем этим намерен делать. :)

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

Тебе компилятор сообщений об ошибках не выдаёт? Или ты пишешь на какой-то интерпретоте типа досовского бейсика, где написал случайно I5 вместо l5 и получил боль? Да нет, вообще, вроде, про Си речь шла...

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

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

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

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

Да я, собственно, и не хочу обижать ТСа. Просто у него непонятная враждебность по отношению к тому же С++, вот я и задаю наводящий вопрос - как там в метапроге будет со строками? Проще, чем в C++, или ещё громоздче, чем в plain C?

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

О конкатенации строк уже говорилось. Функцией.

www.linux.org.ru/forum/development/14882171?cid=14884809

Если не пугает тяжелая работа с памятью, то realloc+memcpy. Если быстро но чуть сложнее - представлять строку как массив из структур «указатель на массив + длина массива».

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

На ЛОРе, помимо прочего, запрещён мат (п. 5.1). Ответы на удаляемые комментарии удаляются автоматически, дабы не поощрять. Следи за лексикой - удалять не будут.

Правила форума

hobbit ★★★★★ ()

Я уже делаю некое подобие LabVIEW на самом LabVIEW, назовем его Metaprog.

Поздравляю, ты изобрел https://drakon.su

Подайте на домики для бездомных поросят.

Чей Крым, казачек?

anonymous ()

Раковые клетки в медицине принято безжалостно уничтожать, дабы спасти здоровые клетки. Погроммирование Си мышкой - это рак, адепты - метастазы. Ну вы поняли... Лабвью кому-то нужен кроме студентоты и около пасущихся физиков/ядерщиков? Короче молодой специалист, ищите еще бизнес идеи. Это не нужно.

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

Политические дискуссии запрещены в правилах. Админы, не спать!

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

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

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

Нужно держать москх в тонусе. И это не мышевозить со смуззей. Все остальное вторично, а зачастую и вредно. То что нужно, написано до Вас, за почти уж пол века то!

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

Владимир

Имеются у вас и дельные мысли, но в целом ощущение:
«Смешались в кучу кони, люди,
И залпы тысяч блок схем
Слились в протяжный вой…
»

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

графическое программирование снимет

ожирение и глючность софта

но как?!

жирность и глюки появляются не из-за формы текстовых исходников (а из-за содержимого этих исходников). Metaprog тоже будет выдавать тексты компилятору. Ваша идея перекликается с C# (как мне показалось) — там тоже декларировали безопасный код и т.д., но 100% реализации целей не достигли (возможно, я не в курсе?).

anymouze ()

Хеллоуворлд поймет любой человек не знакомый с программированием, там написано «напечатать „привет мир“». А что изображено на твоей картинке не поймет никто. Вот и думай, сумрачный гений ты наш

nomathere ()

круто но не взлетит

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

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

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

И ради чего это все? Воспринимается то сложнее обычного кода

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

Отлично! И обязательно с нескучным сюжетом и анимациями!

Как обстоят дела с донатами? Можно ли причаститься?

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

Это вам старперам в классику легче. А мы, нахлебавшись зеленых смуззей, воспринимаем вижуалы!111

anonymous ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)