LINUX.ORG.RU

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

 , , ,


2

3

FAQ

0. Где отсутствующие примеры и пункты FAQ? Как вообще читать эти темы?

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

10. Примеры выдают варнинги при компиляции (у кое-кого еще и сегфолтятся)

Это из-за того, что парсер инклюдов разворачивает всё (в том числе структуры и указатели) до примитивных типов. Если версия гтк отличается от моей - возможны отличия в анатомии структур и сегфолты из-за этого. Эта проблема будет решена, но позже.

11. Как выглядит факториал в графическом представлении?

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

(пока что на Лабвью)

Примеры

Находятся в прошлых темах. Компилировать исходники нужно так:

gcc ./test.c -o ./test $(pkg-config --cflags --libs gtk+-3.0)

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

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

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

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

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

Прототип чата:

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

Показывалка языка локализации через seltocale (кстати, у кого что показывает?)

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

Прототип чата с прокруткой:

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



Последнее исправление: CYB3R (всего исправлений: 10)

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

и полная жопа программе, ни она, ни графический редактор не откроют испорченный бинарный конфиг

Ды даже ФС восстановить можно, а тут конфиг %)

Вроде как реестр надёжнее, но это путь винды и гнома.

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

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

Поддержка многих тулкитов нужна только монстрам а-ля libre office, chromium... ТСу уже множество раз рассказывали про преимущества ООП, а он всё стоит на своём. Вот и обратная сторона «не буду жрать то, что дают». В описании каждого паттерна в википедии описано какие проблемы он решает. Чтобы ТС обратился к ООП ему нужно хорошенько попрыгать по граблям и разбить себе лоб. Чтобы нормально обучить паттернам не достаточно «вот это делается так». Нужно «решаешь такую-то задачу, а получается говнокод, а если применить такой-то паттерн вот так, то говнокод превращается в нормальный код». И ещё объективные критерии говнокода (легко ли расширять, нет ли слишком большой связанности и т.п.).

Кстати, критерии текстового говнокода более-менее сформированы (хоть и нужно учитывать специфику ЯП и фреймворка). А как сформировать критерии: эта диаграмма - говно или отличная? Один только критерий «легко понять» не годится, иначе бы питон был бы «ЯП на все случаи жизни», а сишка была бы «образцом говнокода», ибо на сишке часто пишут низкоуровневые и сложные вещи, где нужны знания и работа мозгом, а куча кода на питоне (не весь) - всякая обвязка, где не нужно включать мозг.

И да, для оценки диаграммы её должны понимать все судьи, а не только ТС. Кто знает, сколько раз ТСу писали «на твоих мазюках диаграммах ничего не понятно».

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

В любом случае, нужно писать wrapper, чтобы был один api для разных тулкитов. Без этой обёртки поддержка кода превратится в ад.

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

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

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

Как даже Грязный Билли говорил в своё время,

There’s only really one metric to me for future software development, which is – do you write less code to get the same thing done?

И в этом я совершенно с ним согласен. И неважно в данном контексте, идёт ли речь о количестве строк, лексем или блоков в диаграмме. Чем меньше их будет, тем лучше. Но при упрощении логической структуры о том, что нужно get the same thing done, тоже нельзя забывать. Отсюда и возникли REBOL/Red, Clojure/ClojureScript, ReactJS/React Native и прочие технологии, которые так не любят профессоры кислых Сей вроде ТС с Илюхой. Они в этом видят только пожирание вычислительных ресурсов. На то, что код при этом получается куда компактнее и выразительнее, им по барабану.

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

Чем меньше их будет, тем лучше

Согласен, весьма объективно. Только надо воспринимать это как ориентир, «путеводную звезду», а не как религиозную догму. Ведь в особых случаях другие приоритеты. В ядрах ОС, real-time... (не надо продолжать «меряться реалтаймами») производительность гораздо важнее короткого кода. Каждый первый охуевает когда впервые видит реализацию стандартных библиотек C и C++ - там специфичные требования к коду. Также динамическая типизация а-ля питон, js... Для мелких проектов ощутимо сокращает объём кода, но при разрастании кодовой базы «стреляет в ногу». Нужен баланс между объёмом кода и надёжностью.

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

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

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

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

IDE под хаскель имеются, но они не нужны

нужны

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

у хескеля нету предсказуемости

есть

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

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

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

какой битовый сдвиг? это оператор обращения к элементу структуры на которую указывает variable node. ну как ты пишешь такую систему не зная элементарных вещей?

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

И как так я управляюсь с Лабвью, не зная элементарных вещей, необходимых для прграммироваия в тексте? Просто! Все потому что там интуитивный графический интерфейс и порог входа на порядок ниже.

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

То есть, -> это по указателю на структуру?

А можно ли вместо этого сделать так?

struct Node *node;
*(Node).value = 0;
metaprog
() автор топика
Ответ на: комментарий от iluha16

Лабвью открыло мне возможность делать программы и при этом не писать код.

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

Алгоритмических различий никаких? Только лишь синтаксический сахар? И ради этого придумали целый новый оператор?

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

Каких только кракозябр не понапридумывают ради удобства программирования в тексте. Новички в ужасе, зато у «бывалых» ЧСВ от их знания аж зашкаливает.

К счастью, Си этим вроде не сильно страдает, синтаксис простой, транслятор диаграмм на него сделать не очень сложно.

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

Есть в планах. Но не переписать, а пересобрать диаграммы, переделать:)

Си при этом, возможно, все равно останется как один из вариантов бекенда. Да и мой Си ты видел. Как тут не вспомнить цитату Линуса:

It's mostly in C, but most people wouldn't call what I write C

https://groups.google.com/d/msg/comp.os.minix/dlNtH7RRrGA/ru3QgAOM-7UJ

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

Чуть короче. Но вводит новичков в ступор. Хорошо что есть ЛОР, где можно спросить что это за хреновина, а так было бы тяжело.

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

Я пока ничего особенного на гтк не сделал, всего лишь пробные примеры и допилка еще лабвьюшного прототипа. Нуклеар решил пощупать, чтобы сравнить с гтк. К тому же, нуклеар с SDL2 обещает быть намного более кросплатформенным.

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

Потому что они тоже были новичками. Но ладно, сишные-то стандарты менять уже ни к чему. Лучше заменить все графикой:)

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

Очень важные вопросы.

Есть область рисования диаграммы, грубо говоря - окошко. Нужна функция, которая узнает каким виджетом занята точка в нужных координатах (х, у). Есть ли это в готовом виде в нуклеаре? А в гтк? В лабвьюшном прототипе я это дело сам скрутил: выдает номер объекта диаграммы если место занято и «0» если пусто.

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

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

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

Нужна функция, которая узнает каким виджетом занята точка в нужных координатах (х, у). Есть ли это в готовом виде в нуклеаре? А в гтк? В лабвьюшном прототипе я это дело сам скрутил: выдает номер объекта диаграммы если место занято и «0» если пусто.

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

Плюс нужна функция, узнающая проходит ли в заданной точке линия.

Тоже лучше сам напиши.

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

В примере все есть! https://github.com/vurtun/nuklear/blob/master/demo/node_editor.c#L308

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

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

Как раз кракозябр в твоих диаграммах побольше будет. Если б ещё документашка по ним хоть какая-нибудь была...

К счастью, Си этим вроде не сильно страдает

Так это сишная стрелочка и есть.

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

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

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

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

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

Но тут вопрос как, например, удалять эти линии?

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

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

Как пользователь это будет делать?

metaprog
() автор топика
Ответ на: комментарий от metaprog
int lines[30] = {1,1,1,1 ...}

while(1) { // цикл приложения
  begin_draw();

  if(button_clicked()) // если кнопка нажата 
    lines[5] = 0; // 5 линию больше никогда рисуем

  for(int i = 0;i < 30;i++) {
    if(lines[i]) draw_line(...);
  }

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

Документировать сами концепты, а не всякие текстовые команды и параметры, разумеется.

Убери слово «текстовые» — команды и параметры никуда не денутся. У тебя есть некий набор УГО (условных графических обозначений) - фигурки всякие, разные типы линий между ними. Вот по ним должно быть описание, что конкретный УГО означает, какие типы связей к нему могут подходить, что на входе, что на выходе.

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

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

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

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

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

Однозначно будут вставки сишного кода там, где это будет проще.

И превратится метапрог в дракона %)

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

Потом заменим на диаграммы, когда руки дойдут.

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