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

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

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

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

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

кстати говоря с помощью неуважаемого тобой ООПа можно было бы создать класс объектов с нужной тебе семантикой operator=.

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

На торрентах поищи. Windows 2000 source. Если прямо дам линк - могут хлопнуть за «пиратство».

Кстати, как мы могли забыть, что в LKML слово fuck встречается часто? Или уже нет?

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

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

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

Вопрос по структурам остался. Про memcpy уже говорили?

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

И с юнионами так же... Хотя это надо лезть стандарты читать, но я не думаю что уж так ограничили.

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

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

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

задача 1.

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

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

Вполне посильная для Лабвью задача, если что. Но самая главная проблема - прочитать страницу через https. В Лабвью плохо с готовыми библиотеками, приходится самому велосипедить, а TLS сделать оказалось сложноватым. Придется делать Ctrl+S и парсить полные страницы тем (из кнопки «посмотреть удаленные сообщения»).

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

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

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

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

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

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

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

Я тебя тоже тут не помню, лол.

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

Ну и действительно заслужил же %)

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

Там еще и мат, куда смотрят модераторы?

metaprog
() автор топика
Ответ на: комментарий от metaprog
#include <stdio.h>
#include <string.h>

int main() {
	struct s1 {
		unsigned int sin_family;
		unsigned short sin_port;
		struct {
			unsigned long int s_addr;
		} sin_addr;
		char sin_zero[7];
	} metaprog_instance_1 = { 0 };

	#pragma pack(1)
	
	struct s2 {
		unsigned int sin_family;
		unsigned short sin_port;
		struct {
			unsigned long int s_addr;
		} sin_addr;
		char sin_zero[7];
	} metaprog_instance_2 = { 0 };
	
	metaprog_instance_1.sin_family = 1; metaprog_instance_1.sin_port = 2; metaprog_instance_1.sin_addr.s_addr = 3;
	metaprog_instance_2.sin_family = 5; metaprog_instance_2.sin_port = 6; metaprog_instance_2.sin_addr.s_addr = 7;
	
	printf("metaprog_instance_1: %d, %d, %ld\n", metaprog_instance_1.sin_family, metaprog_instance_1.sin_port, metaprog_instance_1.sin_addr.s_addr);
	printf("metaprog_instance_2: %d, %d, %ld\n", metaprog_instance_2.sin_family, metaprog_instance_2.sin_port, metaprog_instance_2.sin_addr.s_addr);
	
	metaprog_instance_2 = *((struct s2 *)&metaprog_instance_1);
	// или memcpy(&metaprog_instance_2, &metaprog_instance_1, sizeof(metaprog_instance_2));
	
	printf("metaprog_instance_2: %d, %d, %ld\n", metaprog_instance_2.sin_family, metaprog_instance_2.sin_port, metaprog_instance_2.sin_addr.s_addr);
}

Почему после такого копирования с metaprog_instance_2.sin_addr.s_addr происходит что-то странное? Ведь объявления обоих структур полностью одинаковое. Вот так и выстрелишь себе в ногу и рикошетом попадешь еще и в жопу.

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

Да блин, это было ТСу, на то, что если он так вольно будет обращаться со структурами, т.е. вместо использования библиотечных объявлений пытаться свои делать, то Metaprog: универсальная графическая среда программирования [в разработке] часть 7 (комментарий)

cluge
()

Столько ещё сараев не чищено, а автор вместо этого с лабвью развлекается.

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

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

Между тем, я еще и транслятор (и прототип в целом) в Лабвью допиливаю. То что обсуждается здесь - лишь верхушка айсберга. По Лабвью я тут ни одного вопроса не задал. Почему? Да потому что там и так все ясно и понятно!

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

А я все не иду и не иду. Вот незадача-то! Я тебе уже говорил, что такое безумие? Это повторение одного и того же, раз за разом, снова и снова в надежде на иной результат.

Тлдр ты поехавший

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

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

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

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

можно. ты хотя бы man почитал, там и примеры есть. откуда ты выдрал пример кода? из гугла что ли. бери все системные вызовы которые используешь и читай `man 2 <system call>`. намного подробнее чем читать какую то статейку из гугла непонятно кем написанную. если хочешь про сокеты подробно тогда рекомендую W. Richard Stevens. Unix Network Programming.

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