LINUX.ORG.RU

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

 , , ,


3

6

Не нравится - проходите мимо. Нравится - помогайте проекту.

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

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

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

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

Чисто технические. По Си, библиотекам итп. А поучать не по делу - «не учите меня жить, лучше помогите материально».

Примеры

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

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

Собственная метапроговская функция

Метапрог не только умеет вызывать сишные функции, но на нем можно и свои делать. Функция для открытия слушателя (listener) на нужном адресе и порте и ее схема:

https://i.postimg.cc/8kXBCX40/image.png

Зеленые линии - особенные. Они задают жесткую последовательность выполнения. Сначала bind и только потом уж listen. Сначала listen - и только потом уж сокет можно передать дальнейшим функциям (например, accept).

У функции есть своя пиктограмма.

Открытие окошка

Этот пример открывает окно. Там же есть асинхронный вызов (на завершение):

https://i.postimg.cc/zGhHKQNv/image.png

Инициализация (отдельная функция, инлайнится еще на уровне метапрога в главную диаграмму):

https://i.postimg.cc/JnpsRVN6/image.png

Асинхронная функция на завершение:

https://i.postimg.cc/WpfdKVbt/image.png

Все это генерирует такой код (опять же - не для эстетов, а для скармливания gcc):

https://pastebin.com/T3Bu5Qy6



Последнее исправление: CYB3R (всего исправлений: 9)

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

Раст отделяет мух от котлет, тоесть хитрые хаки ради производительности от логики без возможности undefined behavior. В сях можно налажать в любом месте, а не только там где пытаешься ускорить код. Ну и вообще си наркоманский. Зачем было придумывать писать тип перед переменной, когда еще у математиков повелось отношение типизации строить как «значение: тип». И вообще насколько я знаю раст - единственный язык, позволяющий выразить понятие владения объектом и время его жизни непосредственно на уровне языка с гарантией соблюдения правил обращения к памяти, а результате чего там даже дедлок и то будет выявлен на этапе компиляции.

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

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

В разработке. Пока только обсуждение плюс консультации по разработке.

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

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

Лучше бы строки в стандартной сишной библиотеке были представлены как структуры из указателя на начало массива байтов и длину массива. Функции типа fwrite, например, позволяют работать со строкой (массивом байтов), содержащей любые байты, в том числе 0, только надо указывать длину массива. Кстати, есть пример в первой теме.

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

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

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

А да кстати, на расте строки не 0-терминированные. Из-за чего дополнительные танцы с биндингом сишных либ, благо качественно покрытые стандартной либой.

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

А с «тупой» программой (компилятором/IDE) пиши только то, что она поймет и ни на буковку не ошибайся

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

С машиной же ситуация иная. Она полностью в твоей власти (да, есть проблемы с проприетарными программами и проприетарным железом, где всё ещё хуже, но сейчас речь не про это). И когда компилятор ругается, он по сути говорит: «Хозяин, я не понял тебя вот здесь и вот здесь!» Он сам тебя подталкивает к правильному решению. Ошибки компилятора — это великое благо, это шаг на пути к уверенности, что ты сказал именно то, что хотел.

Есть вещи, которые действительно лучше представимы в графике: сетевые и большие иерархические структуры. Например, диаграммы классов и компонентов в том же UML. Да и отступы в тексте программы — это графический элемент. А тащить графику туда, где текст гораздо короче и однозначнее — это перебор.

Я за дополнение текста графикой, а не за вытеснение текста там, где он работает.

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

Кстати, как со строками в Расте? Строка - фундаментальный тип или структура из указателя на массив и числа-длины массива?

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

«Умных» компиляторов нет.

И очень хорошо, что нет. Хватит с нас веба. Представь, если бы бардак, который мы имеем в HTML, (где как раз можно ошибаться и опечатываться, и браузер всё схавает), был бы в языках программирования.

Общение с людьми тем и отличается от общения с машиной — человеку дозволено тебя неверно понимать (что, кстати, очень часто и случается, и ведёт к бедам, как несущественным, так и весьма серьёзным). Если бы человек по природе своей, не поняв, что имеется в виду на 100% переспрашивал, как это делает «тупой» компилятор, и переспрашивал до тех пор, пока не будет на 100% понимать, что имел в виду собеседник, мир был бы лучше, а не хуже.

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

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

Не совсем соглашусь с тем, что люди самостоятельны. Большинство, к сожалению, так или иначе рабы. Эволюционируют лишь формы рабства, сегодня многие рабы уже считают себя свободными людьми:)

Соглашусь с другим. Человеческие языки - действительно плохие как языки программирования. Даже в общении между людьми могут создать множество неоднозначностей. COBOL показал, что с машиной это будет еще хуже. Я люблю Си именно за немногословность. Встроенных слов там около 30 - прям как у Эллочки-людоедочки.

когда компилятор ругается, он по сути говорит: «Хозяин, я не понял тебя вот здесь и вот здесь!» Он сам тебя подталкивает к правильному решению. Ошибки компилятора — это великое благо, это шаг на пути к уверенности, что ты сказал именно то, что хотел.

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

Кстати, сам программируешь на Си?

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

«Умных» компиляторов нет.

И очень хорошо, что нет. Хватит с нас веба. Представь, если бы бардак, который мы имеем в HTML, (где как раз можно ошибаться и опечатываться, и браузер всё схавает), был бы в языках программирования.

Общение с людьми тем и отличается от общения с машиной — человеку дозволено тебя неверно понимать (что, кстати, очень часто и случается, и ведёт к бедам, как несущественным, так и весьма серьёзным). Если бы человек по природе своей, не поняв, что имеется в виду на 100% переспрашивал, как это делает «тупой» компилятор, и переспрашивал до тех пор, пока не будет на 100% понимать, что имел в виду собеседник, мир был бы лучше, а не хуже.

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

Why OO was popular?

Reason 1 - It was thought to be easy to learn. Reason 2 - It was thought to make code reuse easier. Reason 3 - It was hyped. Reason 4 - It created a new software industry.

I see no evidence of 1 and 2. Reasons 3 and 4 seem to be the driving force behind the technology. If a language technology is so bad that it creates a new industry to solve problems of its own making then it must be a good idea for the guys who want to make money.

This is is the real driving force behind OOPs.

http://harmful.cat-v.org/software/OO_programming/why_oo_sucks

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

Общение с людьми тем и отличается от общения с машиной — человеку дозволено тебя неверно понимать (что, кстати, очень часто и случается, и ведет к срачам на ЛОРе).

FTFY

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

В основном, на C++. На чистом си писал мало, в основном патчил. Много писал на Дельфях и вообще на объектном паскале. Было некоторое количество ассемблера и даже форта, но это уже совсем давно.

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

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

И то же самое, представь, работает практически в любом «текстовом» языке. Надо просто уметь грамотно декомпозировать, разбивать код на не слишком сильно связанные части, чтобы отладка и тестирование были не слишком сложными. И нелюбимое тобой ООП, кстати, очень этому способствует.

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

Жалко только несколько непрактичен он. Так что я ухожу на раст.

%)

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

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

Ну так реально проще ж чем на С писать %) Но там надо было сразу wasm делать.

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

А с «тупой» программой (компилятором/IDE) пиши только то, что она поймет и ни на буковку не ошибайся, и большие буквы с маленькими спутать не смей, а то будут баги (редкое исключение - файловая система Windows).

И это же очень хорошо – позволяет избежать ошибок. Каждая ошибка в compile-time – это отсутствие потенциальной ошибки при КАЖДОМ запуске программы. Графика не изменит этого принципа.

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

Графика уберет это:

и ни на буковку не ошибайся, и большие буквы с маленькими спутать не смей

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

На этой неделе занимался инлайн-функциями и управлением зависимостями (словом, допиливал сам прототип метапрога на Лабвью). Чатиком, думаю, уже на этой неделе займусь.

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

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

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

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

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

В C++ экспериментируют с лайфтаймами на аннотациях, у майкрософта есть уже прототип чекера. Вероятно, допилят, это многим нужно.

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

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

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

Или программировать в графике, чтобы это не было такой уж проблемой

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

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

Графика упрощает и разбиение, и чтение кода.

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

Кстати, как со строками в Расте?

Подобно C++ есть 2 вида строк, примитивная строка и класс с изменяемым размером и прочими плюшками. Вот только в отличии от си примитивная строка - это та самая пара из указателя и длины (она используется в основном для статических строковых литералов и указания на подстроку другой строки без копирования). Ну и еще там навязывается соблюдение валидности utf8 (для набора байт есть отдельные типы), хотя есть возможность обойти проверку и собрать невалидную строку (если есть лицензия на огнестрел, стрелять в свою ногу не возбраняется)

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

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

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

бороться с чекером постоянно.

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

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

Фишка в том, что в тексте можно написать не ту букву (в строковом литерале например) и не заметить этого. В графике если забыл соединить квадратик с другим квадратиком, это проще заметить. Особенно если есть режим отладки, в котором данные анимированно текут по проводам и совершенно наглядно, в каком месте обрыв.

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

Примерно так же будет и с Метапрогом.

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

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

Мне IDE тоже очень наглядно показывает, где ошибка. Прям сразу, когда печатаешь и ошибаешься – ошибка видна. К тому же та же самая IDE чаще всего подсказывает название нужного символа сама, и достаточно просто нажать TAB.

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

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

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

Вот, кстати, пример дебага. Не подключил один ввод - обводит функцию красным.

https://i.postimg.cc/1XGPqGtc/image.png

Кстати заметь: многие блоки уже объединяются в подфункции. Начинаем абстрагироваться от чисто сишных функций!

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

Мне IDE тоже очень наглядно показывает, где ошибка.

А в таком?

char str_arr[] = {
  "hello",
  "world",
  "apple"
  "microsoft",
  "linux"
};

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

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

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

Да, подчеркивает структуру и ругается на слишком большое число инициализаторов

Не так написал) Замени там.

const char *str_arr[] = { ... };

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

Ха-ха, ха-ха-ха.

Аналогов нет! На самом деле реально мощно, можно обойтись без рунтайма!

Они и в ассемблере есть.

Не крошплатформенно.

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

Аналогов нет! На самом деле реально мощно, можно обойтись без рунтайма!

Что именно вы понимаете под «обойтись без рантайма»? И чему там «аналогов нет»? Раст тоже умеет в типы и тоже почти «без рантайма».

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

У раста даже ffast-math не работает! Без std:: он ничто!

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

Ничего %) А ведь там будут элементы:

"hello"
"world"
"applemicrosoft"
"linux"
Вот оно текстовое программирование!

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

IDE ничего, статический анализатор предупреждает про необычный паттерн и рекомендует убрать лишний перевод строки.

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

Ну это уже дополнительная тулза, нужны ли вообще текстовые языки если они позволяют такое допустить?

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

Люди придумали языки, в которых такое нельзя допустить. То, что весьма низкоуровневая (низкоуровневая в том смысле, что нужно париться о мелочах) сишечка позволяет конкатенацию строковых литералов без операторов – не проблема текстовых языков вообще.

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

На этом примере я еще раз убедился в своей правоте по поводу инициализации текстовых строк как бинарного массива.

Кстати, лови новый пример с прокручиваемой и выделяемой строкой с автопереносом:

https://i.postimg.cc/Gm6KMJBs/image.png

https://pastebin.com/SWJJwvvC

Скрины подфункций делать пока лень (автоскринер тоже скорее всего сделаем уже в «настоящем» метапроге, а не прототипе).

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