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)

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

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

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

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

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

Неочевидный

Идиоматически здесь неочевидно только двоеточие, а так конструкция, однозначно читаемая как «Условие? Херакс1, иначе херакс2» вполне себе очевидна. Просто за двоеточием чаще закреплена роль оператора диапазона, нежели «иначе». А так всё компактно и читаемо.

Проблема здесь совсем в другом — тернарный оператор в Си и подобных ему языках является костылём, подпоркой изначально ущербному дизайну, поскольку был введён чисто потому, что конструкция if не возвращает никакого значения и попытка получить от неё результат синтаксически неверна что в C, что в JS, что в некоторых других ЯП. В хороших же ЯП абсолютно все разрешённые выражения являются вычисляемыми. Они могут возвращать андейфайнды, наны, нуллы, нилы, чёрта лысого, но попытка взять их результат никогда не приведёт к синтаксической ошибке.

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

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

а как правильно заюзать данную фичу в JS?

if (1) 5; else 2;
<- 5
x = if (1) 5; else 2;
SyntaxError: expected expression, got keyword 'if'[Learn More]

знаю ruby где if возвращает результат. вот там стд либ реально продуманная и очень красивая и последовательная. js мне гораздо меньше нравится.

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

В присваивании — только тернарником, вот же вам интерпретатор нужным цветом по ненужному говорит, что ожидает выражение там, где вы ему скармливаете оператор.

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

уже понял, местного js гуру невнимательно прочитал.

iluha16
()

Что там с конкурсом? Все кто хотели предложили свои варианты для пиктограмм?

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

Полагаю, ты ждал несколько иного результата

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

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

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

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

iluha16
()
Ответ на: комментарий от Deleted
//clang sockaddr_test.c -std=c99 -pedantic -O2 -o test -lSDL2 -lGLESv2 -lm

int main(int argc, char **argv){
struct {
unsigned short int sin_family;
unsigned short int sin_port;
struct {
unsigned long int s_addr;
} sin_addr;
char sin_zero[7];
} metaprog_instance_0_8262442935555737601_junction_5562572915605350401;

struct {
unsigned short int sin_family;
unsigned short int sin_port;
struct {
unsigned long int s_addr;
} sin_addr;
char sin_zero[7];
} metaprog_instance_0_3919427819432921089__7158408156748161025__structure_constant_6033721645320783873;

metaprog_instance_0_8262442935555737601_junction_5562572915605350401 = metaprog_instance_0_3919427819432921089__7158408156748161025__structure_constant_6033721645320783873;

}

Выдает ошибку при компиляции:

sockaddr_test.c:23:70: error: assigning to 'struct (anonymous struct at
      sockaddr_test.c:5:1)' from incompatible type 'struct (anonymous struct at
      sockaddr_test.c:14:1)'
  ...= metaprog_instance_0_3919427819432921089__7158408156748161025__structure_constant_6033721645320783873;

Типы же полностью одинаковые, что тут не так?

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

На сетевые события сразу с асинхронщиной без gio? Плиз ткни пальцем на пример.

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

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

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

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

struct test1 {
    int i;
};

struct test2 {
    int i;
};

int main()
{
    struct test1 t1;
    struct test2 t2;
    t1 = t2; // так нельзя.
}

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

По мне так одинаковые.

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

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

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

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

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

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

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

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

Давай цитату

Пожалуйста, цитата:

  1. Берёшь учебник;
  2. открываешь;
  3. читаешь;
  4. PROFIT!
i-rinat ★★★★★
()
Ответ на: комментарий от metaprog

LOL

И этот человек собрался революционизировать программирование! Пытается использовать Си, но не может освоить базовых понятий. Ты вообще на что надеешься с таким-то поведением?

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

K&R это не учебник, а такое неформальное описание языка Си с примерами. В конце есть указатель, любое непонятное тебе понятие, тот же тернарный оператор, можно найти и прочитать за две минуты, а не ждать два часа, когда тебе на ЛОРе котечка ответит. Ты же почему-то думаешь, что тебе должны помогать, отвечать на вопросы, ответ на которые находится ну максимум за 10 минут. Почему?

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

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

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

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

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

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

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

Могу. Но буду троллить. Что на такое ответить? Тут не в жопу посылать надо, но это максимум куда можно послать более-менее в рамках правил форума.

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

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

Итак, что мешает присваивать структуры одинакового типа? Стандарт? Как это обходить? Только так?

http://www.c-cpp.ru/books/prisvaivanie-struktur

Больше никак?

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

спрашиваю решения у сведущих людей. И ожидаю конструктива

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

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

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

Себя ты тоже презираешь?

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

Мы отклонились от первоначальной темы вопроса и ведем срач.

Тут вся тема — срач. Это единственный её смысл.

Ты чуть ли не явно заявляешь, что учить Си не будешь. (А может, и явно, мне лень искать). Вместо этого тратишь своё время и время других на попытки выяснить конкретные вопросы, ответы на которые не можешь понять, потому что ответ затрагивает другие темы, которые ты учить не хочешь. Как тут вообще возможен конструктив, если ты не стараешься? Я думал, ты это специально делаешь, ради лулзов. Нет, что ли?

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

Да, мои вопросы могут быть глупыми. И что? Это то, чем тебе проще всего помочь с разработкой Метапрога. Котечка уже много раз выручал и экономил мое время и он почему-то не страдает снобизмом и приносит пользу проекту, так как хочет видеть релиз Метапрога. А тебе абы поржать.

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

Нет. Я реально разрабатываю Метапрог, и выложил кучу доказательств этому. Но учить даже Си особым желанием не горю. Тем более тут есть куча людей, уже знающих Си и готовых подсказать если что. Это - главная причина моего пребывания тут.

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

А то что я ленюсь - так черт побери, я еще и работаю над Метапрогом (пока что в Лабвью), и делаю это в свое свободное время, тысячу баксов в месяц мне за это не платят. Так что имею право и полениться, при этом надеясь на понимание.

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

Это то, чем тебе проще всего помочь с разработкой Метапрога.

Почему ты считаешь, что я хочу помогать с разработкой?

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

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

И поэтому он тебя в тупики загоняет постоянно, ага. Он вообще «молодец» — потешаться так, чтобы объект потех считал, что ему на самом деле помогают, это талант. Правда, я считаю, что это всё же слишком жестоко, поэтому если потешаюсь, то делаю это явно, чтобы не давать ложных надежд. Как я уже сказал, это жестоко, так не надо делать.

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

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

Тогда все остальные имеют право поразвлекаться тут. Мы занимаемся этим в свободное от работы время, и нам за это не платят. Надеемся на твоё понимание.

мне за это не платят

Знаешь, все хотели бы заниматься своими проектами, и чтобы им за это ещё и платили. Но так мало у кого бывает.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.