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

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

Графические языки покатят как клей для вызова крупных подзадач (смотри Unreal Engine). Ты же всякую низкоуровневщину зовешь типа write.

Напиши, кстати, письмо Линусу. Готов ли он мышкой кодить на Сях? Хотя, судя по неприятию кода на латинице, у тебя будут определенные проблемы с написанием письма.

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

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

Все равно там надо вчитываться в текст и еще и чтото в нем понимать. Слабо понять синтаксис и смысл этого PCRE?

Ты находишься на уровне египетских иероглифов, а остальные давно ушли вперед и освоили алфавит.

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

Первый язык, который учит программист - не Си, а английский

И это плохо.

Графические языки покатят как клей для вызова крупных подзадач

А почему не покатят для низкоуровщины? Вообще тут главная идея для меня, что код не будет ограничиваться текстом, тут еще сразу крутую IDE интегрировать можно. Это же шаг вперед, если правильно сделать, да и порог вхождения ослабит, людям которые о никаких сях не знают будет полезно, главное им юзерские абстракции предоставить, в модуле Новичок)) Ну что то такое можно сделать.

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

Читай стандарт на предмет префиксов имен и всего прочего. А первый пункт про управляющие символы выдает в тебе лентяя, который делает побыстрее на коленке, тяп-ляп, шаляй-валяй.

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

Английский я знаю достаточно хорошо, чтобы читать мануалы и даже такие вот флеймы между Линусом и Таненбаумом:

groups.google.com/group/comp.os.minix/browse_thread/thread/c25870d7a41696d2/f447530d082cd95d?tvc=2

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

Проблема не в незнании английского (его я знаю свободно), а в том, что русский/украинский для меня все же удобнее.

Письмо Линусу напишу, может, когда Метапрог хорошо себя покажет на прикладных программах. Неготовый проект ему вряд ли понравится.

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

И это плохо.

И это отлично. Выучил за год основы технического английского, и почти вся документация и научные труды за последние 100 лет доступны к изучению.

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

Вот мне надо сделать операцию со строкой, содержащей \'" не боясь, что это повлияет на компиляцию. Как бы это делали вы?

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

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

vladimir_vist ()
Ответ на: комментарий от metaprog
#include <iostream>
#include <string>

int main()
{
    std::cout << R"(
        hello\world
        lol
    )";
}

выведет


 hello\world
 lol

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

Начни с простого. Бери Project Euler и реши в своем поделии первые 50 задач. Сразу поймешь, годятся твои схемы хотя бы на реализацию примитивных алгоритмов или не особо.

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

Это же богомерзкий С++. Автор даже смотреть не будет, ему Линус запретил. Линус самого Таненбаума уделал, будучи студентом. А метапрог - тоже студент. Про ошибку выжившего ему на старших курсах расскажут)))

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

Владимир

Более того: Java, .Net, ... - тупняковый путь.
Люди «тают от счастья», что они года тратят на изучение тысяч методов и десятков тысяч параметров.
Такова селяви нынешних «современнных технологий».

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

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

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

То есть делаешь «ненужно», чтобы собирать им «ненужно». А от простейших, но реальных задачек сливаешься. Еще один Дениска Попов вырисовывается.

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

Да ты даже в схемы не въезжаешь, там такие задачи будут попроще решаться чем на обычных языках. Это не сишный код в картинках, это лиспофорт v2!

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

Именно. Почитал соседнюю тему - еще больше убедился в своей правоте по поводу С++, джавы и прочего ООП. Что почитать по ООП? На одном издании книг по ООП зарабатываются миллиарды баксов. На чем бы зарабатывали издатели, если б ООП не было?

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

Они зарабатывают на лентяях, которые сами не разбираются в документации, а им разжевывать всё надо. В итоге тупые и ленивые платят. Се ля ви.

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

Именно поэтому каждому советуют прочитать какую нибудь книгу по ООП, оформлению кода, итд!

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

В итоге тупые и ленивые платят.

Такие как Джон Кармак, он кстати ушел с плюсов на лисп %)

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

Владимир

Пока без низкоуровневых языков - никак, так как высокоуровневых попросту нет.

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

Пользуясь Labview, я ОЧЕНЬ редко заглядываю в документацию. И не нуждаюсь в книжках. Все функции и типы и так на виду, обычно достаточно Context help - навел мышью и уже видно какие терминалы (параметры и результаты) у функции, какие там типы.

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

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

такие задачи будут попроще решаться чем на обычных языках

Докажите.

Допустим, я не въезжаю в схемы. Дык выложите схемы для ряда этих задачек. Я посмотрю, проще они или нет. Читатели лора тоже посмотрят, может даже автору задонатит кто.

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

Руками нарисуйте схемы для Project Euler, а там видно будет. Практика решает.

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

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

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

Кармак скупает все книжки по ООП? Не верю)))

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

А на кой мне черт форматирование через printf, если есть fwrite в stdout? Смотрите примеры. Можно вообще сделать более удобную чем fwrite функцию.

metaprog ()

Вопрос по приколу. Если открыть исходники Метапрога на Labview, сможете их прочитать?

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

У меня ничего готового нету, я мог бы нарисовать в гимпе, но возможно это не подойдет к тому что у ОПа. Сам реализовать отдельно могу, но зачем.

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

Это?

https://projecteuler.net/archives

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

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

А на кой мне черт форматирование через printf, если есть fwrite в stdout? Смотрите примеры. Можно вообще сделать более удобную чем fwrite функцию.

Допустим, я заказчик, и мне нужен форматированный вывод.

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

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

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

Ничего там сложного. Плюс можно найти готовые решения на Сях и перевести на свой графический суржик.

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

Регулярные выражения? Уже в секции «заявки», как и работа со строками.

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

Посмотреть блюпринты из Unreal Engine. А лучше попользоваться месяцок. И сделать наподобие.

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

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

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

Владимир

Шутка.
Все гении обычно были нищими ... /но они были гениями/.
Имеется и другой путь.
Например - «на троих».

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

Нужно подписать входы и выходы, можно мелко, что бы только с помощью зума их можно было увидеть.

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

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

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

Стрелочки - терминалы. То, к чему подвязываются проводки. Разве не очевидно?

Конечно же незнакомый с Си и fwrite ничего не поймет. Но суть - что 4 терминала функции подключены и имеют свои источники.

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

Кстати, у той же функции printf переменное число параметров.

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

Какие то терминалы еще %) Я не въезжаю совсем. Нужно уменьшить «ненужный текст», что бы было легко код читать.

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

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

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

Владимир

Дать возможность пользователю свободу выбора показывать надпись или нет /иначе за попрание свободы - «удачи не видать»/.

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

Но мне все равно мало что понятно %) Ну это потом исправить можно будет. Я как нибудь нарисую то как мне видится наглядным все это.

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

Владимир

Вроде агрессивности на счет ТС меньше стало.

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