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)
Ответ на: комментарий от metaprog

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

>>> t = (1, 2, [30, 40])
>>> t[2] += [50, 60]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> t
(1, 2, [30, 40, 50, 60])
>>>

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

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

Какое утверждение? Это отрицание.

Давай лучше возьмём какую-нибудь более или менее объёмную задачу, и выдадим её тебе, чтобы ты писал на Си и Питон-разработчику. И посмотрим, кто быстрее сделает.

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

Я Метапрог делаю, чтобы упростить работу, но сохранить при этом сишную скорость. И просто в программировании, и быстро в выполнении.

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

Ты показываешь сравнение скорости исполнения готовых программ, написанных хорошими специалистами. Ты уверен, что лично ты на C++ или C напишешь быстрые реализации? Сколько времени займёт создание программ?

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

чтобы упростить работу, но сохранить при этом сишную скорость

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

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

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

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

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

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

Ох, лол.

Вот кусок кода из n-body, написанной на Си:

__m128d distance_Reciprocal = _mm_cvtps_pd(_mm_rsqrt_ps(_mm_cvtpd_ps(distance_Squared)));

Я уверен, ты не в состоянии такой код прочитать и осознать. Как ты подобный код создавать собрался?

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

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

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

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

iluha16
()
Последнее исправление: iluha16 (всего исправлений: 1)
Ответ на: комментарий от i-rinat

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

nk_begin(metaprog_instance_0junction_5353583517401603073,metaprog_instance_0_3914760162517250049_complex_array_array_pointer_6578394948618786817,nk_recti(metaprog_instance_0_3914760162517250049__variable_7561549041558879233,metaprog_instance_0_3914760162517250049__variable_7561549041558879233,metaprog_instance_0_variable_7346582979738130433,metaprog_instance_0_variable_7805107700831320065),metaprog_instance_0_3914760162517250049__variable_5348813827514265601);

Выхлоп функции nk_recti идет как один из параметров nk_begin. Если нет разветвлений, метапроговский транслятор сразу вбрасывает результат выполнения функции в следующий блок.

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

сделает быстрее питонщик

Ну хоть тут разногласий нет.

вопрос был в другом что зато время пока его скриптота обрабатает условно говоря 1 единицу данных моё ПО пощёлкает их уже штук 20.

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

внимательнее читай утверждение которое отрицаешь.

Вот оно, и ты тоже прочитай внимательно: «Но в целом, в чистом виде, джаваскрипт и питон на порядки медленнее Си, так ведь?»

Прочитал? А теперь отбрось всё то, что ты на это утверждение навесил сам — предположения о реализациях языков. Сравнивай именно языки. Быстрее ли язык Си языка Питон?

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

не понимаю чего сложного.

В точку. Не понимаешь.

последовательный вызов нескольких ф-ций в одной строчке,

Это не ф-ции, и даже не функции.

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

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

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

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

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

написал глупость и теперь не знаешь как отвертеться.

Нет, я точно знал, что писал. И придерживаюсь этой позиции. А вот ты теперь выкручиваешься:

ясное дело автор имел ввиду

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

время исполнения, да и память ещё, а не скорость разработки которую он собирается ускорить с помощью своей идеи.

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

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

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

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

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

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

Чем забьем и нагрузим, наркоман? Иди почитай про io- и cpu-bound.

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

Вынесу разработку на публику - найдется кому оптимизировать.

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

да ты спроси у самого автора что он имел ввиду.

ты уже реально не знаешь как выкрутиться, мне смешно уже.

Ты уверен, что это я здесь пытаюсь выкручиваться?

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

да ф-ции и есть: https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpd_...

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

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

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

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

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

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

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

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

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

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

Не могу представить ничего более правильного и логичного

Ну да, конечно

то чего не хватало современной индустрии

Корнер-кейсы есть во всех языках. Везде есть свои странности и особенности.

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

Если fname указатель, то по логике вещей вызов должен быть (*fname)(). Но мы имеем шорткат.

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

Я смотрю, ты пытаешься оспорить всё что угодно, кроме моего «нет», которое ты якобы хочешь оспорить.

Ты хоть логическое отрицание суждения можешь построить?

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

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

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

Вопрос:

Но в целом, в чистом виде, джаваскрипт и питон на порядки медленнее Си, так ведь?

Ответ:

https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/gcc-node....

https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/gcc-pytho...

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

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

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

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

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