LINUX.ORG.RU

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

 , , ,


10

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



Последнее исправление: CYB3R (всего исправлений: 9)

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

Третий параметр? Да, причем указатель обернут в макрос G_CALLBACK, там в нем вроде идет проверка типа.

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

Лучше прочитать документацию, так выйдет быстрее. g_signal_connect привязывает какую либо функцию к действию. В твоей строке идет привязка функции active к действию «active» у app. То есть функция active выполниться при активации (старте) app.

Ну а «active» это просто название действия, к которому функция привязывается собственно...

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

Ладно. С меня еще допилить сам метапрог, указатели на функции - наверное, последнее, что еще не освоено.

Лучше прочитать документацию

RTFM... когда-нибудь мы положим этому конец. Или как минимум уменьшим нужду в RTFM на порядки.

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

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

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

Открой для себя ide. Там сигнатуры методов появляются на экране прямо во время ввода. По желанию рядом выводится документация.

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

Только, черт побери, еще знать надо ЧТО вводить. И все равно все читать и вчитываться, RTFM никто не отменял.

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

Можно вывести список всего что есть. Или того, что доступно для ввода под курсором. Если не знаешь, что хочешь написать, то тебе уже ничего не поможет. А если бы ты поработал хоть в одной ide, то никогда не сел бы писать свою графическую срань. Всё уже давно реализовано, просто ты кроме блокнота ничего не видел.

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

Но блокнот может открывать autotools проекты в отличие от CLion %)

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

От того, что ты в прямоугольник обвел названия функций и вывел стрелки, ты вдруг сразу понял, что делает функция?

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

В любой ide тоже. А список отсортирован по алфавиту или по модулям.

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

Ого! Да ты почти изобрел то, что 15 лет назад уже в любом notepad++ было!

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

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

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

На Лабвью? У тебя оно есть? Ты сможешь его осилить? И самое главное - будешь ли участвовать в разработке? Может лучше подождать релиза уже на чистом Си?

metaprog
() автор топика

Круг нарисовать уже предлагали?

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

Слишком большие будут как правило. Либо слишком маленькие и неинформативные.

Отличное описание сути метапрога.

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

Ничего. После релиза не будет ничего.

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

Мне за маты поудаляли комменты, хотя от лора я не ожидал нетолерантного отношения к нецензурной лексике.

Говнокод отрефакторить можно, а это как исправлять?

Открывать Метапрог и исправлять, если надо.

А ещё читать мануал что твои пиктограммки значат и стрелочки и линии

Встроенная прямо в Метапрог интерактивная обучалка.

юнит тесты

Просвети, о высшая мудрость родом из энтерпрайза

ревью изменений

Графические блоки с комментариями и стрелками на нужные места.

metaprog
() автор топика

Как genera-purpose language не взлетит, такое может работать только как DSL с высокоуровневыми абстракциями, графический «язык» с сильной интеграцией в предметную область, их уже и так делают, например в Blender Node editor. Может что-то подобное появится и для повседневных нужд, например организации уведомлений и фильтров в своем смартфоне. Вот кстати тебе идея для стартапа :)

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

Это всё работает, когда ты единственный кодер на проекте. А проект уровня курсовой работы.

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

Над чем же ты сам работаешь и на чем программируешь?

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

Открывать Метапрог и исправлять, если надо.

Но ведь получится так же нечитаемо.

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

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

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

Ну в лабвью я сразу перешел к коду без лирических отступлений на системы сборки, конвенции по написанию кода, книги/курсы о паттернах ООП и нужду быть писателем уровня Достоевского:)

Намёк: в сишной программе из одного файла и пяти функций ты можешь сделать точно так же. И система сборки на этом уровне не нужна. А вот как начинается что посложнее...

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

а Метапрога, сделанного «сам на себе».

Постой... Так мне нужен будет Метапрог, чтобы собрать Метапрог? GCC не хватит?

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

Мне за маты поудаляли комменты

И анонимусовы удалят, и твой ответ с моим вместе по 7.1 удалят, так что зря ты на них отвечал, читай - прямо в корзину писал. Учти на будущее.

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

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

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

Ну насколько он промежуточный — вопрос отдельный, но пока твоё детище не стало всемирно признанным, наличие сишных исходников — суровая необходимость. :)

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