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

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

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

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

Вы блок-схемы графические видели? Именно ради них вся затея. А не ради каких-то лиспов и прочих текстовых языков.

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

Ради простоты транслятора. Ради простоты вызова готовых сишных функций и системных вызовов Линукса.

И еще - мне лень учить что-либо текстовое кроме Си. Слава Кернигану и Ритчи, он прост как двери и для компилятора, и для моего транслятора, и для меня лично.

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

А чтоб это все было еще на порядки легче - переложить все в графику, в чем, собственно, и цель Метапрога.

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

Линус да не истина? Да даже ЛОР назван в его честь))) Он хороший программист-практик и знает о чем говорит.

На кой черт вообще классы? Чем типы и функции хуже?

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

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

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

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

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

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

Также планирую встроить в метапрог возможность заходить на свой аналог гитхаба с графическими схемами.

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

Неплохо ты сам с собой поговорил.

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

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

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

Можно пойти еще дальше, и делать остальные библиотеки сообществом... Что бы зоопарк совсем отсутствовал!

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

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

Хотя, может кто-то со стороны конспектирует, как ты например)

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

Не зовидуй.

По теме как-то вяленько набрасываете. Как обстоят дела с подаяниями?

anonymous ()

Жесть то какая, какой то машинный код, не иначе.

Shulman ()

Владимир

Вот не могу понять назначение вашей графической среды.
Это будет какая-то высокоуровневая надстройка над C
/набор объектов с возможностью создавать их, .../ или только поддержка стандартных библиотек, ...
Просьба более подробно рассказать об архитектуре вашей графической среды.

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

Вы графические диаграммы смотрели, или только текстовый код?

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

Среда программирования общего назначения. Столь же общего назначения, сколь и сам Си. Грубо говоря, «одеть» Си в графику.

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

metaprog ()

Царь уже высказывался по сабжу?

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

Участвовал я как-то в одном проекте, где цель была нечто похожее, ЯП из графических примитивов, для школьников. Проблема в том, что тезис «графическое представление программы всегда удобнее текстового» ошибочен. Это так только для некоторых DSL, которые изначально предполагают схемоподобную семантику, например схемы автоматического управления. Для ЯП общего назначения любая более-менее сложная схема вызовет ещё больше проблем с восприятием, чем текст.

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

Вызывает ли у вас сложности с восприятием эта схема?

https://www.gdevagon.ru/scripts/info/map.php

Я посматриваю на досуге, полезно для ума. Представьте смотреть и понимать огромный список станций и железных дорог между ними исключительно В ТЕКСТЕ, не имея никаких графических карт. По-вашему это проще?

Точно так же с графическим программированием. В графической диаграмме мне несложно понять код любой сложности (в Labview), а вот если приходится читать текстовый код - на ум приходят одни матюки.

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

Так я о том и говорю, что только DSL ЯП, где уже есть схемо-подобная семантика, удобно представлять в графическом виде. Схема дорог вообще не в тему, как и любые языки класса до контекстно-зависимых включительно, т.к. это не ЯП.

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

Си чем плох? Что мешает представить типы и функции в графическом виде? Посмотрите схемы.

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

Т.е. против того, что пример со схемой станций нерелевантен, возражений нет?

seiken ★★★★★ ()

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

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

Вам тяжело ту карту воспринимать? Если не тяжело - не тяжело будет и понимать визуальные схемы вместо текстового кода.

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

Задача Метапрога наоборот сделать оптимизацию проще и понятнее. Если б вы читали описание и комментарии, вам стало б ясно, что джавы и питоны с фреймворками и объектными моделями - первейший объект моей критики.

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

Вам тяжело ту карту воспринимать? Если не тяжело - не тяжело будет и понимать визуальные схемы вместо текстового кода.

А вам тяжело названия улиц читать? Тогда не сложно будет и код читать. Кстати, вам не сложно тут на ЛОР комменты читать? А то можете подкинуть идею разработчикам сайта, чтобы в определённом режиме можно было общаться только обменом картинок.

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

не тяжело будет и понимать визуальные схемы

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

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

Забавно наблюдать, как публика старательно делает вид, что афтар на что-то способен. Прямо почти дискуссия. Но афтар же классический дурашка, не способный в программирование. Ща он поиграться в визуальное мышевозенье и пойдет, наконец, мыть полы в макдачку, где таким самое место. Все эти ко-ко-ко про ненужные технологии от петушка которого к промышленной разработке не допустят ни за какие деньги. И это ничтожество ещё с линусом себя сравнивает. Очередное дно пробито. Гнать ссаными тряпками этого поциента.

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

джавы и питоны с фреймворками и объектными моделями - первейший объект моей критики

s/моей критики/моего невежества

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

Но афтар же классический дурашка

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

И там была такая же проблема, как тут. Даже примитивная программа разрасталась до такого забора, что что-то сложнее сложения двух чисел проще было написать на обычном ЯП, не говоря уже о чтении и модификации. Можно было фолдить куски схемы, но это не сильно помогало. Единственный плюс того языка перед этим убожеством - он не старался повторить C, а для общения с внешним миром предполагалась разработка модулей на нормальных ЯП, которые можно было вызавать из графического ЯП.

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

Забавно наблюдать, как публика старательно делает вид, что афтар на что-то способен. Прямо почти дискуссия. Но афтар же классический дурашка, не способный в администрирование. Ща он поиграться в создание юникса и пойдет, наконец, мыть полы в макдачку, где таким самое место. Все эти ко-ко-ко про закрытые и якобы глючные технологии от петушка которого к промышленной разработке не допустят ни за какие деньги. И это ничтожество ещё с Томпсоном себя сравнивает. Очередное дно пробито. Гнать ссаными тряпками этого поциента.

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

Владимир

Лучше бы ТС вручную создал картинки с диаграммами с хорошим дизайном и сказал честно, что пока так не реализовано.
Ну а то что он продемонстрировал - кошмар.

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

Если он троллирует, то это унылость и адрес все тот же - ближайшая макдачка.

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

Владимир

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

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

Владимир

Исправление опячатки - «вашей среде программирования».

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

Линус да не истина? Да даже ЛОР назван в его честь))) Он хороший программист-практик и знает о чем говорит.

Нет, не истина. Просто — авторитет. А если он завтра скажет что Земля плоская, тоже согласишься?

Есть такие парни — Деннис Ритчи и Брайан Керниган. Слыхал о таких? Как они, по-твоему, что-нибудь понимают в программировании? Имеют они право поспорить с Торвальдсом по поводу того какой языку нужен, а какой — нет? Так вот, поинтересуйся их мнением насчет плюсов. Будет полезно.

На кой черт вообще классы? Чем типы и функции хуже?

Теплое с мягким сравниваешь. Прочитай книгу Страуструпа. 370 страниц. Тебе все расскажут на кой оно черт и почему решили сделать именно так. Не глупее тебя люди. Даже, если ты не согласишься, прочитать нужно.

Как ты думаешь, Торвальдс ее читал?

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

В один коммент (а не 370 страниц) не поместится аргументация зачем усложнять себе жизнь классами вместо типов и функций?

Может Линус и читал Страуструпа, но вряд ли он его убедил. Ядро как писалось на чистом Си, так и пишется, и даже прикладной Git Линус делал на чистом Си, а плюсы он кроет матом http://harmful.cat-v.org/software/c /linus

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

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

Джаваскрипт. Браузерный (а не дектопный) апп. Питон. Ужас в кубе.

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

В один коммент (а не 370 страниц) не поместится аргументация зачем усложнять себе жизнь классами вместо типов и функций?

Да тот же std::vector возьми, круто же. Еще деструкторы, умные указатели, виртуальные методы... На С это выйдет слишком многословно, и в большом проекте руками не всегда получится сделать многие высокоуровневые вещи оптимальными, да и вообще, «думать» должен компьютер а не человек, пусть он оптимизирует там как то.

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

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

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

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

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

«думать» должен компьютер а не человек

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

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

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

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

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

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

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

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