LINUX.ORG.RU

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

 , , ,


7

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

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

Объекты не нужны. Ни к чему сажать функции и данные в одну клетку. Надо лишь хорошо структурировать данные. Для этого достаточно:

1. Примитивных типов

2. Структур последовательности (struct)

3. Структур выбора типа (union)

4. Структур условного выбора типа.

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

Структура условного выбора типа - новое понятие, которого нет в Си, и в Labview мне его тоже не хватает. Очень облегчило бы процесс программирования.

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

Владимир

Вы немножко зациклились на ООП /однозначно/.
Объекты предоставляют некий функционал хранения и манипуляции с данными, но
они отнюдь не обязаны быть «гвоздями прибитыми» к функциям.
Кроме того объекты могут быть и динамическими /к примеру деревья, имеющие ссылки на разные типы объектов/.

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

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

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

Владимир

... Структур условного выбора типа

Реализуется это так /очень кратко. Один из вариантов./:
- поле в структуре имеет тип void *Объект;
- в создаваемой архитектуре для работы с объектами должна быть
должна быть /а может и не быть/ возможность получения данных об типе объекта на который указывает адрес *Объект.

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

Там будет четко обозначенный список типов и тип будет зависимый от значения «выбирающего» типа. Обработка, скорее всего, через switch+case.

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

Владимир

Вы архитектор своей среды программирования - ваше право.

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

Владимир

То о чем вам говорю не от - «абы что сказать».

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

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

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

Владимир

Главное не бросьте начатую работу ...

Шутка.
Много СУБД, много языков программирования, а все почему?
Народу много и компьютеров /и я в их числе/.

anonymous ()

Хехе, автор похож на студента 1-2 курса или даже школьника. Скорее, конечно, студент, а LabView увидел в шараге.

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

Еще автор плывет в терминологии, то есть он просто несведущ в вопросах программирования сложнее сложения двух чисел и вызова функций из стандартной библиотеки. Отсутствие опыта, подкрепленное «эффектом утенка» в виде Си и авторитетами вроде Линуса, выплескиваются фанатичным максимализмом.

Автор ленив, не хочет ни в чем разбираться, не умеет абстрактно мыслить, не знает, что он хочет сделать и для кого, но уверен, что ему должны нести деньги (современная хипстерская тенденция).

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

Будем надеяться, что однажды труд сделает из него человека.

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

Я сейчас метапрог пилю на Labview и меня дико возмущает факт, что даже там, в ГРАФИЧЕСКОЙ среде, кое-где в функциях работы со строками встречается необходимость знать и учитывать синтаксис PCRE

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

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

Специальную графическую структуру, отвечающую за регулярные выражения.

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

Плюсы создают столько оверхеда и багов, что Линус их кроет матом

Только вот когда Линусу потребовалось написать _прикладную_ программу, он взял плюсы, да ещё и с кутями. Неожиданно, да?

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

Вот на такую структуру было бы интересно посмотреть :)

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

Scratch

Он детский. А я хочу оперировать функциями стандартной библиотеки Си, системными вызовами, сишными библиотеками, и делать это мышкой в графике, а не клавиатурой в тексте, как 40 лет назад.

Pawn Blocks Designer — вполне себе «взрослый». Pawn это, конечно, скриптота, но весьма низкоуровневая, от pure C недалеко ушла. Другое дело что я на их GitHub-е как-то не нашёл исходников именно на эту штуку, но в конце-концов, если тебя не смущают IDE на базе electron, a la VSCode, берёшь Google Blockly, и настраиваешь (это — просто) его на трансляцию блоков в C|C++|D|Rust. И программируешь себе мышкой на здоровье.

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

Мне кажется, если уж не привязываться к конкретным языкам и библиотекам, за основу хорошо бы взять паттерны языка Snobol (и его потомка [Un|Object]Icon)

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

Это?

https://ru.wikipedia.org/wiki/Снобол

Там же текстовое программирование в вакууме.

Си тоже текстовый, но там мощная система типов, а самое главное - на нем реализованы системные вызовы и само ядро Линукс.

metaprog ()
Ответ на: Устарело от EXL

Re: Устарело

Не, для подавляющего большинства существующих ныне представителей рода Homo это чересчур сложно. Нужен облачный сервис, работающий по видосику, снятому мобильным приложением для Android™ или iOS™.
«И никак иначе».

anonymous ()
Ответ на: Устарело от EXL

Re: Устарело

Владимир

В этом что-то есть.
Пишем только техническое задание.

В до PC времена в отделах АСУП проектирование программ осуществлялось так:
- имелась группа постановщиков задач, которые готовили ТЗ на разработку программы;
- группа кодеров, которые должны были эту литературную программу перевести в код какого-либо языка программирования

«Ну вы понимаете как в таких условиях легко работалось?».

PS: Человечеству ни в коем случае нельзя предоставлять ИИ.

anonymous ()
Ответ на: Re: Устарело от anonymous

PS: Человечеству ни в коем случае нельзя предоставлять ИИ.

Он же уже у него, ничего плохого не случилось, да и не случится. А сильный интеллект не особо «сильнее» человека будет!

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

Владимир

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

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

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

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

Интернет, распределенная сеть, которую из розетки никто одномоментно выдергивать не будет. Тут угроза не столько от чистого ИИ, сколько от власти, вооруженной слишком умными системами слежки за гражданами, которые сейчас активно разрабатываются. Делая Метапрог, я боюсь облегчить им работу. Может лучше б все программирование было в КОБОЛе, дольше б работали над этими системами. Но, с другой стороны, и так сделают, если надо (как в Китае).

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

Ты очень преувеличиваешь значимость - свою и своей поделки...

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

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

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

Я кстати заметил что все противники ИИ (СИИ) говорят примерно одно и тоже «нехочу развивать X, что бы тормозить прогресс создание ИИ».

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

Владимир

Если из больниц выпустить агрессивно настроенных псих больных и дать им оружие, то ...
А в среде человечества «Гитлеров» - пруд-пруди.
И многие умеют собрать армии этих вурдалаков и снабдить их идеологией ради которой они готовы на все.

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

Когда появится ИИ, он найдет сообщение автора о том, что тот не хотел помогать в создании ИИ, и покарает автора)))

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

На питоне хоть лагать будет))) Но, кроме шуток, если захотят - напишут.

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

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

Ты там помнится на кого-то стуканул за политоту в этом треде... Так что тссс...

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

Ахах, ну ды, не рассудительно они!

Это потому что у них метапрога не было)))

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

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

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

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

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

Кстати, о языках. Labview хорошо тем, что я могу подписывать свои типы, поля, функции на украинском. Почему никто из политиков и прочих говорящих голов не возмущается тем, что все программирование (кроме разве что 1С) намертво завязано на английский? Где их правденый гнев?

Метапрог будет полностью переводиться на русский/украинский/английский/любой другой UTF-8 язык (кроме разве что сишных функций).

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

Почему никто из политиков и прочих говорящих голов не возмущается тем, что все программирование (кроме разве что 1С) намертво завязано на английский?

1С на русском что бы русские слова нормально писать, видишь в коде ЖЭК, и сразу понимаешь что это. Это не просто так сделали что б можно было на русском.

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

Голосованием кого? Советов директоров центробанков? Хорошо бы сделать так, как говорит Жак Фреско, но кто нам даст это сделать? Остается только допиливать Метапрог и ломать сложившиеся рыночные отношения в ИТ, как линукс поломал рынок юниксов.

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

Владимир

... (кроме разве что сишных функций).

В чем проблема то?
Создайте метаданные для сишных функций и пусть пользователь
сопоставляет для них удобные ему имена.

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

как линукс поломал рынок юниксов

Поломал не он, а сообщество и компании которые допилили ядро.

Советов директоров центробанков?

Революция в России началась с 4 уволенных заводских рабочих, директоров мало, а людей много.

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

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

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

Можно будет делать метапроговские подфункции. Это не только позволит по-своему назвать терминалы (параметры и результаты), но и сделать пиктограмму. Надеюсь скоро допилить функции и сделать пример.

«Функция» в метапроге - лишь кусок диаграммы, закрытый в отдельный прямоугольник (по умолчанию). При трансляции в Си он не будет отражаться на коде. Нулевая стоимость. Но могут быть три ситуации когда транслятор должен показывать именно сишную функцию:

1. Рекурсия

2. Указатель на функцию

3. Сокращение объема кода (и скомпилированного бинарника) при множестве одинаковых функций

Уже представляю себе код вида metaprog_function_426206468(int metaprog_function_426206468_parameter_1, char metaprog_function_426206468_parameter_2){...}

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

Люди - управляемое стадо, а царя свергал далеко не простой народ. Ну это так, лирика.

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

Люди - управляемое стадо

И те кто у власти тоже, и ты, и я.

а царя свергал далеко не простой народ

Он свергал, власть без народа это просто кучка людей.

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

Уже представляю себе код вида metaprog_function_426206468(int metaprog_function_426206468_parameter_1, char metaprog_function_426206468_parameter_2){...}

Это потому что у тебя чувства вкуса нет. А иначе сделал бы хотя бы mp_a(int mp_a1, char mp_a2) {...} Имена присваивать по принципу: «a, b, c,..., z, aa, ab, ..., az...»

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

Хотя у тебя и строки в массивы интов разворачиваются. О чем с тобой можно говорить...

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

А твое желание ходить по коду вверх и вниз уже реализовано во всех приличных IDE. Обычно Ctrl + клик по имени - переход на уровень вниз, или вылезает всплывающее окно с кодом нужной функции или документация. Ты же ничего сложнее блокнота по ходу не видел. Ну и убогого LabView.

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

Не интов а чаров, 8-битное беззнаковое. Это существенно, так как какой-нибудь управляющий символ «\[]{}*^ может повлиять на процесс компиляции, а с массивом цифр этого не произойдет.

mp_a - слишком коротко, возможна коллизия с именами из включенных через #include сишных библиотек. Тут разве что временно уменьшить гигантские числа. Они у меня такие из-за того что у элементов диаграммы 64-битные ИД, а 64-битные - чтоб потом не упереться в лимиты, как, например, в файловой системе FAT - из ограничений в 2 и 4 Гб на размер файла торчат ослиные уши 32-битных типов, знакового и беззнакового.

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