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

можно откомпилировать питон можно написать драйвер на тайпдефах потому что не метапрог, а академик будет

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

А ты через графический браузер погугли.

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

все по концепции, как тут где-то выкладывали, да. Чтоб Линус Торвальдс на стадионе Динамо работал.

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

Это сложная концепция из текстового программирования. Если ты не понимаешь текстового программирования, не получится тебе объяснить. Очень завязано на текст.

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

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

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

можно откомпилировать питон

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

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

Вики гласит, что это

форма организации простой интерактивной среды программирования в рамках средств интерфейса командной строки

Не годится. Ты мне бинарник сделай, а не интерпретаторы пихай куда не надо.

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

Питон настолько плох, что скомпилировать можно только его ограниченное подмножество?

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

сначала спроси понимает ли он, что такое компиляция, а то ведь выяснится, что и этого нет.

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

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

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

Сомневаюсь, что он оценит. Он сейчас на пике (см. иллюстрацию к его любимому Эффекту Даннинга-Крюгера).

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

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

10 разных ЯП под разные задачи, рантайм каждого по гигабайту ОЗУ со старта.

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

Ты мне бинарник сделай

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

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

что такое бинарник?

Строка из машиного кода и данных, которыми машинный код оперирует.

что такое рантайм?

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

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

Вменяемые ЯП в компиляции не нуждаются

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

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

А ещё можно довести до абсурда (js jit-ится - js компилируемый - js не нужен).

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

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

которыми машинный код оперирует.
машинный код оперирует.
код оперирует.

Попробуй еще раз.

Дополнительные бинарники, которые надо установить и запустить

попробуй еще раз.

ossa ★★
()
Ответ на: комментарий от i-rinat
static char *heap;

main() {
	char *i, *s, *a = "12345678";
	auto c;
	for(i = 0;i < sizeof(a);) {
		c = i; free(heap); 
		s = realloc(heap, 3);
		/* KILL REBFORCER */											0
		[s] = a[c++]; 1[s] = a[c];
		/* KILL LIKESYS */											2
		[s] = 0;
		printf((char[]){*++s,*--s,(int)i++&0}, i++);
	}
}
./a.out 
21436587
Deleted
()
Ответ на: комментарий от metaprog

Зачем? Скорость и независимость от питоньего рантайма.

На лицо бездумное поклонение идолам.

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

i-rinat ★★★★★
()
Ответ на: комментарий от metaprog
dmitry@ibm-pc:~$ cat main.py
a = 12345678
s = str(a); int(''.join(b + a for a, b in zip(s[::2], s[1::2])))
print s

dmitry@ibm-pc:~$ nuitka --standalone main.py

dmitry@ibm-pc:main.dist$ du -h .
57M	.

dmitry@ibm-pc:main.dist$ ./main
12345678
Deleted
()
Ответ на: комментарий от Deleted

Не то вывожу в принте, ну короч результ ясен, 60 мб.

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

интерпретируемые ЯП как правило более гибкие и в умелых руках позволяют творить магию, которая сильно сокращает объём работы

И бесят до чертиков, когда глючат и не работают. С питоном такое часто случается.

Вот Лабвью куда интереснее.

https://www.youtube.com/watch?v=1Rx6AXhF31I

При чем оно не интерпретируется, а именно компилируется:

http://www.ni.com/tutorial/11472/en/

LabVIEW is a compiled language, which can be surprising because during typical G development, there is no explicit compile step. Instead, you make a change to your VI and simply press the Run button to execute it. Compilation means that the G code you write is translated into native machine code and is then executed directly by the host computer. An alternative to this approach is interpretation, where programs are indirectly executed by another software program (called the interpreter) instead of directly by the computer.

Nothing about the LabVIEW language requires it to be either compiled or interpreted; in fact, the first version of LabVIEW used an interpreter. In later versions, the compiler replaced the interpreter to boost VI run-time performance, which is a common differentiator for compilers relative to interpreters. Interpreters tend to be easier to write and maintain at the cost of slower run-time performance, while compilers tend to be more complex to implement but offer faster execution times. One of the primary benefits of the LabVIEW compiler is that improvements made to the compiler are seen by all VIs without the need for any changes. In fact, one of the primary focuses for the 2010 release of LabVIEW was optimizations inside the compiler to speed VI execution time.

Лучше не придумаешь.

Но достоинства Лабвью с лихвой компенсируются идиотской политикой копирастов из NI. Они делают все от них зависящее, чтобы ограничить использование Лабвью: огораживают копирастией, патентами и конскими ценами за лицензию (от 300 баксов за виндовскую версию, от 3000 за линуксовую).

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

Основная цель Метапрога - взять все лучшее из Лабвью, не переняв его недостатков.

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

А ты подкинь полтос на лекарство.

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

И бесят до чертиков, когда глючат и не работают

Здесь вообще не зависит: компилируемый или интерпретируемый.

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

Я вообще имел в виду интроспекцию и прочую «магию». Тебе сейчас это не нужно. Это ещё мощнее и сложнее, чем основы ООП.

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

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

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

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

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

Код должен быть простым и кратким

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

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

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

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

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

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