LINUX.ORG.RU

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

 , , ,


1

3

FAQ

0. Где отсутствующие примеры и пункты FAQ? Как вообще читать эти темы?

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

10. Примеры выдают варнинги при компиляции (у кое-кого еще и сегфолтятся)

Решено вводом неанонимных структур, если идет обращение к данным из сишных инклюдов.

12. Зачем ты пытаешься сделать «графический C» (используя подходы к разработке, структуры данных и прочее из C, но в виде блоксхем)?

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

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

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

Примеры

Предыдущие см. в прошлых темах

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

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

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

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

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

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

Неанонимные структуры

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

Главная функция:

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

Открытие нового окна:

https://postimg.cc/kBX6rB0P

Та же диаграмма в видео:

https://streamable.com/jqng1

Видно всплывающие подсказки, в конце удаляется и снова проводится один из проводков.

Начало рисования SDL, то что должно делаться каждый цикл в нуклеаре:

https://postimg.cc/tYS199bZ

Вставки, как видите, могут принимать и даже возвращать аргументы, как вставка обработки событий SDL возвращает running. Потом этот проводок с running будет подключен к главному циклу.

Кстати, что мешает мне сейчас сделать главный нуклеаровский цикл, ведь циклы ж уже готовы? Смотрите на этот скрин:

https://i.postimg.cc/65N2KMQz/image.png

Почти такой же пример, только есть цикл и нету sleep (чтобы можно было полюболваться на окошко 10 секунд). Что тут не так? Схема правильная, но надо еще научить транслятор ставить «тупиковые» ветки, берущие начало в цикле, в пределах цикла по-умолчанию. Сейчас код nk_end и малювання SDL оказываются за пределами тела цикла, буду это исправлять. Где-то там же находится ключ к полному налаживанию ветвления через if и switch.

Сам код:

https://pastebin.com/f5PDfi77

Использовать сишные имена типов и структур удалось благодаря многоязычным строкам, которые внедрялись для русских, англичан и прочей не понимающей украинский публики. Если в названии типа есть строка на языке «С», вместо примитивного типа (или тела структуры из примитивных типов) ставится сишный идентификатор типа из инклюда.



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

да ф-ции и есть

Удивительно. Документацию найти смог, а прочитать — нет. Я уже говорил, что это не функции.

Тоже мне, специалисты нашлись…

ф-ции

Что с тобой? Ты не можешь написать «функции»? Экономишь два нажатия?

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

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

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

@iluha16, а ты был прав. Для него действительно язык и реализация это одно и то же. Думаю, вы споётесь.

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

Да ладно, посмотрим что они еще понапишут в защиту питона:)

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

В гугл, дорогуша, в гугл. Это слово уже несколько раз на этой странице встречалось. Вбиваешь и читаешь. Осознаешь, какую ты нес ахинею. Плачешь.

я вбил за него. результат:

Bound (1996)

Corky, a tough female ex con and her lover Violet concoct a scheme to steal millions of stashed mob money and pin the blame on Violet's crooked boyfriend Caesar.

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

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

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

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

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

Вдумайся и больше не пори чепухи, пожалуйста.

Bound (1996)

Ты дурачок или прикидываешься? Я писал ранее полное название термина.

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 3)
Ответ на: комментарий от iluha16

как выяснилось так что бенчмарки не совсем корректные так как сравнивают по сути дела питон не с C как таковым а со скоростью выполнения каких то там SSE инструкций

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

i-rinat ★★★★★
()
Ответ на: комментарий от liksys

Вопрос о языках программирования стоит только в контексте бекенда для Метапрога. И в этом плане Си лучше питона.

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

А что с вызовом инструкций процессора из питона?

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

Слушай, раз тема все равно флеймовая и не содержит конструктива, то спрошу тут у тебя. Чем сейчас православно собирать сишные проекты? Автотулз протух, цмейк со своими декларациями чудовищен (хотя может я не понял сути), что еще?

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

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

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

Вот щас ты обзываешься, а потом опять будешь хныкать, сучить ножками и выпрашивать помощь :)

Тяжело тебе живется с биполярочкой, наверное.

liksys ★★★★
()
Ответ на: комментарий от i-rinat

выкручиваться мне ни к чему, я своей целью выпендриваться и прикидываться крутым специалистом не ставлю. про SSE знаю давно, на практике не применял. использовать в бенчмарке python vs. C считаю логичным то что прописано в стандарте C а не возможности оптимизации на какой то конкретной платформе. если уж на то пошло то думаю и python позволяет вставить и C и машинные инструкции, чего же в той программе их не использовали?

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

Ответ прям в духе бабки на лавке под подъездом.

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

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

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

Вот именно потому что я умный, я и не помогаю проекту.

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

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

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

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

успевают выжрать гигабайты памяти пока ждут этот самый медленный I/O

Давай конкретику.

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

IMHO, любая система сборки становится чудовищной, когда сборка становится достаточно сложной.

Из всех систем я только CMake пользовался, причём старым, и поэтому «пользуюсь им неправильно». Но так как ничего сложного собирать не приходилось, меня устраивает. Стоит погуглить «modern cmake», там объясняют, чего избегать, чтобы не получить космическую боль. Но от громоздких конструкций всё равно никуда не деться.

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

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

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

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

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

Может, тебе pkg-config заюзать? Вот так. Метаданные для pkg-config почти для всех библиотек есть.

Правда, если нужна сборка под что-то кроме Linux или *BSD, это не сработает.

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

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

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

Ты не понял вопроса из-за недостатка опыта разработки. Со временем, если знания появятся, поймёшь. Там ничего сложного нет. И интересного тебе сейчас там тоже нет.

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

Я об этом уже думал. К сожалению, упаковщики софта на пае какие-то альтернативно-одаренные, и pkg-config для хлама, который лежит в /opt/vc не может найти всех настроек, потому что pc-файлы лежат в /opt/vc/lib/pkgconfig. Genius.

liksys ★★★★
()
Ответ на: комментарий от i-rinat

Я знаю что такое make. Костыль для удобства, написал make - и собралось. Одна беда: makefile еще надо прописать ручками. Так что ну его к черту.

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

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

Можно подхачить переменные среды, и pkg-config будет проверять нужные пути:

set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/my/path/to/pkgconfig")

Я там ещё мельком код глянул в одном из файлов. Есть пара комментариев.

В Си функция объявленая с () вместо (void), принимает любое число аргументов. По сути, это аналог (...). В gcc есть __attribute__((unused)), которым можно помечать потенциально неиспользуемые аргументы функций и метки.

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

В Си функция объявленая с () вместо (void), принимает любое число аргументов

О, благодарю, надо исправить. Я думал разницы нет.

__attribute__((unused))

Да, я им как раз пользуюсь, даже в макрос сократил.

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

разницы нет.

В C++ разницы действительно нет. Путаница.

как раз пользуюсь

Я увидел #pragma GCC diagnostic ignored в коде.

Хотя мне часто на такое везёт, и я случайно натыкаюсь на какие-нибудь давно забытые места. :-)

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

про SSE знаю давно

Верится с трудом. У интринзиков характерный вид. Не представляю, как их можно не узнать с первой же секунды.

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

Одним таким вопросом ты разрушил образ разбирающегося специалиста.

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

#pragma GCC diagnostic ignored

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

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

1. не будет работать на не 64-битных архитектурах

Будет.

2. реверсит только первые 8 букв байт

Нет.

3. не поддерживает utf-8, здраствуй саахрикту

Поддерживает.

4. если в исходной строке меньше 8 букв байт, может выйти segfault

А может и не выйти. Ну и все равно нет. Просто для 32 битных архитектур нужно добавить -Dsizeof...

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

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

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

Автодополнение лагает, когда gtk+2 подключаю, лол.

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

Верится с трудом. У интринзиков характерный вид. Не представляю, как их можно не узнать с первой же секунды.

про эти самые интринсики я впервые узнал благодаря вам, спасибо. про SSE знаю давно, но я думал что бы это заюзать надо что то типа asm { ... }. а тут некая встроенная как я понимаю фича для gcc, которой нет в стандарте. по семантике очевидно выглядит как ф-ция, наверное единственное что с ней нельзя сделать так это взять адрес.

Одним таким вопросом ты разрушил образ разбирающегося специалиста.

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

python не позволяет разве сделать вставку C-кода а как следствие и тех же интринсиков? путём написания модуля например. так почему же в прогу на pythonе не напихали ассемлерного кода для оптимизации? остаюсь при своём мнении - по сути это сравнение скорости python и скорости ассемблерного кода.

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