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

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

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

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

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

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

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

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

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

1. ну про 32 бита точно не скажу т.к. под рукой такого компа нет однако думаю там размер pointerа не 8 а 4.

2. 1234567812345678 -> 21436587

3. это по твоему поддерживает:

ilya@www ~/tmp $ cat test.c 
#include <stdio.h>
#include <stdlib.h>

static char *heap;

int main() {
	char *i, *s, *a = "линукс12";
	auto c;
	for(i = 0;i < sizeof(a);) {
		c = i; free(heap); 
		s = realloc(heap, 3);
		0[s] = a[c++]; 1[s] = a[c];
		2[s] = 0;
		printf((char[]) {
			*++s, *--s, (int) i++ & 0
		}, i++);
	}
}



ilya@www ~/tmp $ gcc test.c 
test.c: In function ‘main’:
test.c:8:7: warning: type defaults to ‘int’ in declaration of ‘c’ [-Wimplicit-int]
  auto c;
       ^
test.c:9:14: warning: comparison between pointer and integer
  for(i = 0;i < sizeof(a);) {
              ^
test.c:10:5: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
   c = i; free(heap);
     ^
test.c:15:16: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
    *++s, *--s, (int) i++ & 0
                ^
ilya@www ~/tmp $ ./a.out 
�инЃ�ilya@www ~/tmp $
iluha16 ()
Ответ на: комментарий от iluha16

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

Ну так-то да, но тогда можно и всё на Си написать, а из Python позвать одну функцию. Вообще, так обычно и делают. На Python пишут клей, которым связывают высокопроизводительные компоненты. Поэтому получается относительно быстрая разработка и относительно быстрая работа. Иногда модули даже не на Си пишут, а на Cython.

остаюсь при своём мнении - по сути это сравнение скорости python и скорости ассемблерного кода.

Это сравнения программ, написанных под GCC и под CPython. То есть, конкретных реализаций, а не просто языков как таковых. Под GCC вызов SSE2-инструкций можно напихать прямо в код, поэтому их напихали. Под CPython нельзя прямо в исходнике добавить реализацию на Си, поэтому не добавили.

неоднократно писал что я пыхер и студент

В таком случае странно, что ты фанатеешь от компилируемых языков.

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

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

да почему бы эти интринсики не сделать в виде модуля для питона для той же самой реализации cpython?

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

Потому что уже есть Perl! https://metacpan.org/pod/Inline::ASM

print "9 + 16 = ", add(9, 16), "\n";
print "9 - 16 = ", subtract(9, 16), "\n";
 
use Inline ASM => 'DATA', 
           AS => 'as',
           PROTO => {add => 'int(int,int)'};
 
use Inline ASM => 'DATA',
           AS => 'nasm',
           ASFLAGS => '-f elf',
           PROTO => {subtract => 'int(int,int)'};
 
__END__
__ASM__
 
.text
.globl    add
 
add:      movl 4(%esp),%eax
          addl 8(%esp),%eax
          ret
__ASM__
          GLOBAL subtract
          SECTION .text
 
subtract: mov eax,[esp+4]
          sub eax,[esp+8]
          ret

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

так давай этот бенчмарк на питоне с такими же вставками и сравним с gcc intrinsics code.

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

Ну для UTF-8 нужно тоже поддержку включить, как минимум добавить: -Dchar=wchar_t -Dprintf=wprintf...

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

на перле хотел сказать, чего сольёт то напишешь всё ассемблерным кодом

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

Ну если еще взять RPerl... %) Но мне лень разбираться в этих задачах, писать чето, мех.

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

Ну это не все флаги, мне их лень подбирать. -include /usr/include/wchar.h нужна... там потом сизоф править..

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

да почему бы эти интринсики не сделать в виде модуля для питона для той же самой реализации cpython?

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

И не забывай, что в CPython значения обёрнуты в объекты.

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

-Dchar=wchar_t

Ога-ога, и ты потерял инкремент указателя единичкой.

i-rinat ★★★★★ ()

Захожу нет-нет почитать... Только у меня от примеров течёт кровь из глаз? Открытие нового окна выглядит как раздутая лапша, которая занимает меньше места в тексте.

Зачем всё это, если текстовое программирование такое же графическое, как и эти блок-схемы ?

Мне одному кажется, что ТС просто мышевоз\раб, который будет рвать жопу, лишь бы не писать ?

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

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

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

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

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

1)Меня терзают смутные сомнения, и скорее всего получится так, что всё это добро в виде 30 блок-схем, поместится в 10 строк когда на каком нибудь R или чём нибудь другом.

2) Уже такие маленькие примеры требуют зума, соответственно разбираться в этом всём становится сложнее, хотя графическое программирование должно было упростить восприятие. Боюсь представить эквивалент например 100 строк питон кода.

Да восприятие КОДА упростилось, ему на смену пришло восприятие БЛОК-СХЕМ, и судя по примерам из тем, второе явно воспринимается тяжелее.

3)ТС не видит фундаментальных различий текста и графики, он предлагает создать картину 1х1 км и изобразить «Войну и мир» на ней, что бы не читать 2 тома. Звучит глупо, да, так же глупо как представить ядро современной ОС в блок-схемах, всё это ещё как-то воспринимается в пределах простых примеров, но на реальных больших проектах просто будет кашей из блок-схем.

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

дальше уже сделаем

А может быть даже сделаем

Ты единомышленника нашел что ли?

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

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

Ну так на Лабвью ведь даже библиотек для HTTPS или парсинга HTML нет - и то на нем сделать этот пример мне удобнее.

Меня терзают смутные сомнения, и скорее всего получится так, что всё это добро в виде 30 блок-схем, поместится в 10 строк когда на каком нибудь R или чём нибудь другом.

Для начала поди да выучи тот R. И почему именно R? Столько уже текстовых языков наплодили. «Каждой задаче свой инструмент». Многие из них интерпретируемые, то есть медленные и требуют жирных рантаймов. Многие - ООПнутые, что тоже ведет к раздутию. Одна прога на R, вторая на Python, третья на NodeJS - вот и получаем современный бульйон из говнокода.

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

Уже такие маленькие примеры требуют зума

В Лабвью его нет, а в Метапроге планирую добавить.

он предлагает создать картину 1х1 км и изобразить «Войну и мир» на ней, что бы не читать 2 тома. Звучит глупо, да, так же глупо как представить ядро современной ОС в блок-схемах

Ты хоть раз в жизни пользовался wikimapia.org, картами гугла, яндекса итп? Карта мира - огромная схема, на которой благодаря зуму и поиску каждый находит что хочет. Слабо переписать карту мира в тексте? А то схема без зума будет огромная и запутанная, а в тексте она намного проще и понятнее, так ведь?

metaprog ()

чего темы с этим метапрогом так популярны? неужели нормальных IDE нет?

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

чего темы с этим метапрогом так популярны?

Идеальный баланс. Недостаточно, чтобы банить и удалять, но достаточно, чтобы держать флейм в стабильном горении.

Немного напоминает управляемую ядерную реакцию. За такими темами — будущее энергетики.

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

перекот ради перекота, just for fun, которое так любит автор, в чем он признался в самом начале. Как говорится, лишь бы клей по подвалам не нюхал, посмотрим когда ему надоест )

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

__attribute__((unused))

Я использую макрос: #define UNUSED(var) void(var). Это более переносимый вариант.

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

С ним все так, кроме м4, которой лично мне глубоко отвратителен. На всякий случай уточню, что я им пользовался и умею готовить.

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

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

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

Ну так на Лабвью ведь даже библиотек для HTTPS или парсинга HTML нет - и то на нем сделать этот пример мне удобнее.

Аргумент из разряда «Да мне на руках ходить удобнее»

Для начала поди да выучи тот R.

А что твой метапрог сам выучиться что ли?

И почему именно R? Столько уже текстовых языков наплодили. «Каждой задаче свой инструмент». Многие из них интерпретируемые, то есть медленные и требуют жирных рантаймов. Многие - ООПнутые, что тоже ведет к раздутию. Одна прога на R, вторая на Python, третья на NodeJS - вот и получаем современный бульйон из говнокода.

Ну так много языков где нет этих жирных рантаймов, где-то они есть. В метапроге какой рантайм можно поинтересоваться ? Пока я нет готового решения, мы лишь слышим дифирамбы про несуществующий проект «в нём будет». А по факту нужно обсуждать, то что есть СЕЙЧАС, а сейчас объективно хуже .

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

У тебя что-то с восприятием, сложнее в чём? Семантика, синтаксис ? Примеры хоть есть, одного и того-же на языках «посложнее» где воспринимается по другому?

Пока все эти «аргументы» уровня - «Для меня цикл из c++\python\rust сложнее воспринимается » выглядят как лепет ребёнка, ибо для любого человека знакомого с программированием все основные конструкции современных языков (а в си нет сложных конструкций) выглядят одинаково на 90%.

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

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

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

В 2019 году логику прописывать в тексте, ты мне еще предложи перейти в консоль и отказаться от гуя.

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

В Лабвью его нет, а в Метапроге планирую добавить.

Соболезную метапроге.

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

Вообще карта это карта, а схема это схема, но да ладно. Я открою тебе секрет зума на картах не было десятки тысяч лет до конца 20 века.

Люди так же находили всё что есть на картах, но дилетант как ты со своими " wikimapia.org, картами гугла, яндекса и тп?" которые имеют неправильные масштабы и вообще по своей сути ничего не стоят без навигации по ним - будут сидеть в своих картах и зумить по пол часа, в то время как какой-нибудь дядька откроет атлас, по содержанию откроет страницу и поводя 1 минуту пальцем всё прекрасно поймёт.

Это не спич за старое, просто ты слишком завышаешь значимость оказуаливающей стороны прогресса.

Слабо переписать карту мира в тексте? А то схема без зума будет огромная и запутанная, а в тексте она намного проще и понятнее, так ведь?

Понимаешь, если твой метапрог это «Карта мира Google» или любая другая, то текстовый код это " Большая совестная энциклопедия". По итогу ты можешь крутить свой «зум» 10 лет, мне же даже не надо ничего крутить я просто буду знать намного больше тебя.

Ты не понимаешь самого главного, в программировании уже дано не стоит вопрос «сложных конструкций», они уже давно записываются лаконично и коротко. По этому твоё визуальное программирование паразитирует на понимании и знаниях. Это то же самое, что ты встречаешь с профессором исторических наук, и держа в руке GoogleMaps заявляешь, что знаешь о мире не меньше него.

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

Для начала поди да выучи тот R.

А что твой метапрог сам выучиться что ли?

А я учить R не хочу. Что он умеет такого чтобы я его учил?

В метапроге какой рантайм можно поинтересоваться?

Такой же как у Си и использованных сишных инклюдов.

Пока я нет готового решения

Идет обсуждение разработки. Читать заголовки тем умеешь?

сложнее в чём? Семантика, синтаксис?

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

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

Не совсем. Я свободно общаюсь с иностранцами на английском, но все же русский и украинский мне ближе.

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

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

Английский, опять же, я знаю хорошо.

дядька откроет атлас, по содержанию откроет страницу и поводя 1 минуту пальцем всё прекрасно поймёт

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

в программировании уже дано не стоит вопрос «сложных конструкций», они уже давно записываются лаконично и коротко

И непонятно. Текстовые языки программирования плодятся как мухи, но софт становится только хуже и хуже, уже 4 гб ОЗУ и 2 ядер процессора мало даже для сраного браузера с офисом!

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

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

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от shpinog

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

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

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

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

Весь мир переходит к текстовым описаниям процессов

К джавскриптам и питонам? По-моему это деградация, а не прогресс.

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

Меня забавляют личности, радостно видящие говно у соседа, но не видящие еще большего зла в «своей» бандократиии.

metaprog ()

Мой знакомый заинтересовался проектом metaprog, но не может найти как с вами связаться.

Его почта и телефон: Александр kilokaban@yandex.ru +7 901 584-96-04

Просит вас написать/позвонить.

L_user ()

Какие требования для запуска чата? Tor нужно ставить?

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

А, проглядел. Нужен. Он на xp пойдет? Что лучше скачать что бы не мучится? Bundle или Browser?

VarfolomeyKote4ka ()
Ограничение на отправку комментариев: