LINUX.ORG.RU

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

 , ,


6

6

Почему, несмотря на обилие «чудесных» ООП-языков, Си, разработанный в 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

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

Тебе надо багрепорты им писать, может, статус платинового тестера получишь. :)

И ещё. Тебе тут анонимус уже писал про IBM/Rational Rhapsody - так вот, на неё в качестве прототипа было бы полезно посмотреть. Поскольку она основана на трудах троицы Буч - Рамбо - Якобсон и она-то, в отличие от LabVIEW, как раз заявлялась средством разработки общего назначения. Один мужик из дружественной фирмы писал и нахваливал...

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

Не я точно, у меня прав таких нет.

Шо, и анонимус теперь не сможет? Печально...

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

Rhapsody похоже на Дракон, если бегло посмотреть. Текст полностью не отметается. Лабвью реально уникально в своем классе.

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

Надо пустить анонимуса Владимира. Или админам надоело выгребать говно за троллями-матершинниками? Кому жаловаться? Убили тему.

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

Текст полностью не отметается.

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

Например, строчка y = 2*x-15 в виде текста куда лаконичнее и понятнее, чем если её треугольниками разрисовывать.

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

Выше была идея блока с формулой.

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

metaprog ()

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

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

я уже имею наглядное меню всех возможных функций и структур

Для этого придумали IDE и auto-completion плагины к редакторам. Ну и вообще-то от чтения мануалов ещё никому хуже не становилось.

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

Линус не сравнивал себя ни с кем, не апеллировал к авторитетам, и считал, что делает систему для себя. К тому же, он сразу выложил рабочий прототип, а не какие-то примеры работы. А этот поциент уверен, что умнее 95% программистов и при этом сам не знает ничего, кроме C. Удачи ему, будем надеяться, что это пройдет с возрастом.

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

Я тоже делаю Метапрог, чтоб расширить свои возможности, ограничения Лабвью мне мешают.

metaprog ()

неужели ты реально думаешь что эта картинка https://i.postimg.cc/YCywWbSh/fwrite.png состоящая из нагромождения линий, непонятных циферок и подписей на украинском языке проще чем элементарная строчка кода printf(«Hello, world»);

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

iluha16 ()

Когда я кодил на Unreal Blueprint понял, что не все так хорошо с графическим программированием. Хотя там вроде бы сказывались проблемы конкретно платформы, а не принципа как такового. Но всеравно написать удобную среду графической разработки - очень непростое дело. Особенно если не забывать про diff и VCS. А да, еще надо бы иметь алгоритм визуально красивой планаризации графа кода, который я даже не представляю себе как надо писать (народ обычно оставляет этот процесс на совести кодера, что для него лишняя головная боль, особенно при рефакторинге).

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

там полная попа настает когда смешиваешь блупринт с С++ и пытаешься эту кашу рефакторить

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