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)

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

Я вообще про то, чтобы из блок схемы сразу ассемблер генерить.

Так я тоже %)

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

Пока что есть прототип на LabVIEW, думаю в пределах месяца доработать и опубликовать. После чего будем уже переносить код Метапрога «сам на себя».

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

Так, интересно, весь тред я не читал, но автору сразу хочется задать несколько вопросов и параллельно ответить на его вопросы, заданные в ОП.

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

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

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

Зато попытки создать просто другие языки, не «улучшения» и не «замены» Си увенчались успехом. Самые востребованные ЯП — Java, Python, C# и пр. (за порядок не ручаюсь :-)) тому пример. И все они не выходят за рамки текстового программирования даже с натяжкой.

Какой из ныне существующих языков программирования позволяет программировать мышкой, а не клавиатурой?

Scratch)

А если серьёзно, то в движке Unreal Engine поддерживается язык программирования Blueprint, очень удобная для скриптов фигня, раскрывающая возможности движка. В Unity Engine есть что-то схожее, если мне не изменяет память. Примеры, конечно, доволько узкие, но хоть что-то, да имеется.

убьет C++, Python, Java, Javascript

Сильное заявление, не верю ни на грамм :-)

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

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

Уж никак из-за каких-то реальных фич, как мне кажется

То что ты назвал это и есть реальные фичи, написанный софт, возможности языка, итд.

в ядро не впихнёшь сборщик мусора, если я не ошибаюсь

Ошибаешься.

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

Ошибаешься

Впихнули? Можно пример?

То что ты назвал это и есть реальные фичи, написанный софт, возможности языка, итд

В общем, да, тут я неправильно подобрал слова.

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

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

Впихнули? Можно пример?

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

Ниша графического программирования — скриптинг.

Тоже кажется что это хорошая ниша для граф.прог.

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

Так GC в ядре это смешно. Но это возможно, однако ненужно.

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

в движке Unreal Engine поддерживается язык программирования Blueprint, очень удобная для скриптов фигня, раскрывающая возможности движка. В Unity Engine есть что-то схожее, если мне не изменяет память. Примеры, конечно, доволько узкие, но хоть что-то, да имеется.

Сразу видно, что ты с LabVIEW не знаком. Оно может гораздо большее, чем Unreal Engine или Unity Engine. На LabVIEW я, кстати, делаю прототип Метапрога.

Самые востребованные ЯП — Java, Python, C#

Тем не менее, вытеснить Си из высокопроизводительных применений, драйверов и ядер ОС они не смогли. Даже для выполнения готового софта на них нужны виртуальные машины и раздутый рантайм. И проблем в софте на них не меньше, чем в сишном. В изучении эти языки, кстати, непростые, сам пробовал.

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

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

Сразу видно, что ты с LabVIEW не знаком

Экстрасенс итт. Я просто назвал другие примеры.

На LabVIEW я, кстати, делаю прототип Метапрога

Я уже понял. Когда ссылки на билд?

Тем не менее, вытеснить Си из высокопроизводительных применений, драйверов и ядер ОС они не смогли

А зачем? Есть другие ниши. Пускай Си используют, где используют, но не надо превозносить его и пихать куда попало.

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

Проиграл :-)

Потом развить его настолько, чтобы текстовое программирование стало ненужным

Ой, ты знаешь, сколько на этом сайте было амбициозной школоты с мировыми планами?) Не в обиду тебе будет сказано, но я вижу во всём этом очередную yoba-систему охлаждения.

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

Когда ссылки на билд?

24 августа. Можешь пока попробовать запустить чатик из последней темы, он же прототип онлайн-функционала:

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

В чатике могу выложить прототип раньше, чем на ЛОРе.

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

Хостинг бесплатный и по умолчанию безопасный.

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