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

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

Та шо в барбер шопи нальют... Зеленые - мои любимые:)

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

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

«Безопасность» декларировали и джава, и C#. Я «безопасный» код не декларирую. Тут обязательно будут указатели, уже в примерах видно. Например, массивы будут представлены как структуры из указателя и длины. Можно будет работать и с указателем, и с массивом как сущностью. Чем не ООП? Тем, что нет и не будет классов, объединяющих функции и типы даных.

metaprog ()

А что если реализовать эту великолепную затею на няшмяшном электроне!111

Этож насколько быстрей запустимся!!!111

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

Вы не поняли. Я спросил поделитесь ли профитом за поддержку Проекта?!1

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

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

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

Ой вей! Рынок волатилен. Но я готов рискнуть, получив долю в битках и/или кефирах. Только ради идеи и светлого будущего 111 Кстати, как насчет электрона?

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

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

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

Ну какой же я буду онаним после этого?! Так, лицемер. Но я готов участвовать в проекте онанимно с полной и решительной самоотдачей111 ну и кошелек онанимный тож скинуть могу:)

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

это несложно, учитывая простоту Си

от людей* приходится слышать обратное.

текстовый Си можно будет забыть.

т.е. программы с открытым исходным кодом исчезнуть полностью? Для Вашей схемы удобно сразу распространять бинарный код. Сохранение исходного кода как рисунка (графическое изображение) на мой взгляд усложняет работу с таким кодом. Как скажем найти какой-либо фрагмент программы и изменить его (большинство программистов не могут писать совершенный код — человеку свойственно ошибаться; может измениться тех. задание).

«Безопасный» код попытка исключить или ограничить ошибки программиста.

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

anymouze ★★ ()

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

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

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

Классы придумали для удобства программистов. Технически процессор не знает ни о классах, ни о функциях, ни о переменных. Функции тоже абстракция придуманная для удобства программистов

Только С++ компилируется часами и днями, а джава вообще работает на тормознутой виртуальной машине. Удобства я в ООП-языках не вижу, простоты тоже. «Учиться, учиться и учиться» - это про них. Учиться абстракциям ради абстракций.

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

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

Примите мои глубочайшие сорряны, но можно ли Вас попросить запостить мое обьяление?) Типа как мопед не Ваш... Религия не позволяет учетку регить. Плиз!

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

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

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

Не только я, а сам Линус Торвальдс считает, что все говно кроме Си.

Отлично, парень, пили очередное говно!

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

Не завидуй! Мы на элекироне вмиг все это запилим. Дунаты потекут рекой11

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

Не завидуй!

Я немножко, а то пол жизни на плюсах промучился.

anonymous ()

Нашествие онанимных анонистов)))

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

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

Зы. А почему промучился? Я только по-началу, потом даже стал получать удовольствие:)

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

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

Зы. А почему промучился? Я только по-началу, потом даже стал получать удовольствие:)

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

Только С++ компилируется часами и днями, а джава вообще работает на тормознутой виртуальной машине. Удобства я в ООП-языках не вижу, простоты тоже. «Учиться, учиться и учиться» - это про них. Учиться абстракциям ради абстракций.

Компилируются «часами и днями» большие и сложные приложения (и не только на C++). Java при всех своих недостатках один из сильных игроков в индустрии ПО. Самый яркий пример Android, apk ведь тоже работают в ВМ. Простота и удобство ООП... Ну не знаю, наверное не случайно ООП возникло и существует уже несколько десятилетий. Абстракции суть всего программирования. Скажем хелловорд на любом языке. Строка — это не абстракция? Или вывод строки в устройство вывода (тоже абстракция, разве нет?). Или математика (она «сильно» присутствует в программировании, как правило) это же тоже «жонглирование абстракциями». Большая часть «мозговой» деятельности людей основана на различных абстракциях. Ваши блок-схемы тоже форма абстракций.

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

Нужно писать в тексте, как отцы и деды в прошлом веке

Они и сейчас так же пишутся, причем довольно успешно. Зачем менять то, что хорошо работает уже больше века?

ожирением и глючностью софта.

К сожалению этого избежать не удастся, даже уходом от «прошловековой» традиции писать в тексте.

vq156 ★★ ()

Владимир

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

С Богом!

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

Коллега, где запятая после имени? Это же обращение!

anonymous ()
Ответ на: Хммм... от Moisha_Liberman

Ракеты тоже были уже, в 19-м веке. А космонавты взлетели только в 20-м.

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

Не...

Первые ракеты изобрели создатели пороха. Ещё китайцы, где-то в середине 1-го века Н.Э. Толку-то?

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

Как обстоят дела с донатами? Можно ли причаститься?

Агентам СБУ не подаем!

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

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

Было такое уже (дракон и какой-то ассемблер-билдер... последний даже пытались продавать), не взлетело. Не удобно оно на больших проектах.

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

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

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

Абстракции хороши тогда и только тогда, когда они:

1. Не требуют специального обучения. Объектные модели и классы в ООП-языках требуют и еще как.

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

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

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

По дракону и прочим системам текстового протоппирования читайте комменты выше.

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

Я делаю Метапрог на Labview, пока не допилю его до самодостаточной системы. На Labview блок-диаграммы переделываются ОЧЕНЬ легко. Легко меняются типы, функции, алгоритмы. Легко в сравнении с текстовыми языками, где при переделке кода легко наделать кучу трудноуловимых ошибок. А в графическом виде все легко и просто лежит на поверхности.

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

Троллей и просто идиотов много, но я этому не удивляюсь: на ЛОРе срачей хватает.

Конструктивной критике буду рад. Но еще больше буду рад донатам)))

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

«...буду рад срачам и бонатам.» пофиксил:)

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

Конструктивной критике буду рад.

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

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

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

В 1970е и даже 80е многие смеялись над Си, ведь считалось, что серьезные бородатые дядьки программируют только на ассемблере)))

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

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

А теперь в соседнем трэде на асме 2*2 не могут. Вот к чему привело вся ваша смуззизация.

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

В 1970е и даже 80е многие смеялись над Си

До Unix его создатели с нерусскими сложнозапоминающимися ФИО до этого Unix'а работали над Multics который был написан на очень высокоуровневом PL/1, так что Сишники это те ретрограды о которых ты говоришь %)

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

Текстовое программирование, в том числе на Си, плохо тем, что невозможно или очень трудно разложить блоки кода на элементарные «кирпичики». Каждый новый слой абстракции полностью прячет то, что ниже. Ассемблер прячет машинный код, Си прячет ассемблер и так далее.

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

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

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

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

Будут. Когда наберется хотя бы 1 биток доната. Приблизь прогресс. Голосуй битком!

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

Я думаю подошел бы хорошо ZUI интерфейс, анимированые проводки, подписи-подсказки к всяким элементам.

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

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

Несколько лет назад на ЛОР заходил уже один «визуализатор», с РСДН-а, устроил и здесь «промо-акцию», и здесь его так-же не поняли, как и на рсдн-е... Где он сейчас? Где его продукт?.. История повторяется?

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

Читаете мои мысли. Именно зумовый интерфейс я и думаю делать, выше в комментах уже упоминалось. Зум «от земли до неба», как в хороших играх-стратегиях.

Кстати, подписи-подсказки при наведении на скринах уже есть. Показываются и названия терминалов, и типы данных. Несовместимые типы при проведении проводков не подключаются, кроме проводков «неопределенного» (void) типа.

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

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

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