LINUX.ORG.RU

C++20 и 2D Graphics

 ,


0

9

Исходник: https://isocpp.org/files/img/wg21-timeline-2017-11.png

Оказывается, все проблемы C++ уже решены, и теперь можно приступать к самой важной части системного языка - 2D графике.

Вопрос: что за безумие происходит в комитете C++? Зачем системному языку, да и вообще любому языку, 2D графика в std? Тем более, по слухам, они собираются использовать убогий cairo.

Из подобных языков приходит в голову только tcl/tk и red.

★★★★★

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

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

Объясняю на пальцах: stb_truetype - это либа для забирания контуров силовом из файла шрифтов. Мне такое не нужно.

Мне нужно: вот шрифт, вот строка, вот стили, вот холст - рисуй.

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

Объясняю на пальцах: stb_truetype - это либа для забирания контуров силовом из файла шрифтов.

Мне не нужно это объяснять. Мне прекрасно известно, для чего предназначена stb_truetype.

Мне такое не нужно.

В одном из первых своих общений вы ныли по поводу freetype.

Мне нужно: вот шрифт, вот строка, вот стили, вот холст - рисуй.

Вы возмущались зависимостью от freetype. Я вам предложил вместо нее stb_truetype. Но вы упорно продолжаете демонстрировать свое полное непонимание предмета разговора.

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

Какой ещё предмет разговора? Я сказал, что для нормальной отрисовки текста нужно много зависимостей. А вы продолжаете предлагать мне либу, которая ничего не умеет.

RazrFalcon ★★★★★
() автор топика
Ответ на: комментарий от quantum-troll

Возможности ловли паники ограниченны по сравнению с исключениями.

Чем ограничены?

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

Вот как изобразите, тогда и приходите спорить.

И что ты этим хотел сказать?

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

DarkEld3r ★★★★★
()

Python тянет с собой GUI графику, которая не годится для нормальных приложений, разве что на любителя и ничего. С C++ может больше толку будет.

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

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

«Есть» и «можно сделать» — немного разные понятия. Ты говоришь: «Но ведь сделать почти совсем просто, поэтому можно считать, что исключения есть.», — я говорю, что «есть» не должно быть с оговорками. Этот разговор из той же оперы, что и «В любом ЯП есть ООП, надо только его изобразить».

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

Ты говоришь: «Но ведь сделать почти совсем просто, поэтому можно считать, что исключения есть.»

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

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

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

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

Начнем с того, что поддержки паники может просто не быть в рантайме (panic=abort).

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

Ты говоришь: «Но ведь сделать почти совсем просто, поэтому можно считать, что исключения есть.»

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

Точно так же сделать не получится, потому что исключения не влияют на тип функции, в которой они порождаются. В Расте у функций, в которых могут возникнуть исключительные ситуации, тип Result<T, E>, а не T. Исключения тупо удобнее. Это не значит, что они хороши.

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

Естественно, ведь в Расте полноценная работа с ошибками, которая позволяет решать все сопутствующие задачи. Да даже коды возврата в Си позволяют добиться аналогичного :-), откуда возьмутся примеры, невыполнимые в рамках любого подхода?

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

Какой ещё предмет разговора?

Этот - «Есть такая страшная штука, как отрисовка шрифтов.»

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

И?

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

Ну значит и freetype ничего не умеет.

andreyu ★★★★★
()

кайро в стд - это конечно жесть. вообще запиливать софтварную 2д-графику в 2020 году, имея софтварную реализацию opengl из коробки в llvmpipe, в стандартную библиотеку, с непопулярной библиотекой в качестве референса - это имхо что-то из области психических отклонений.

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

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

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

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

Вы хотите сказать, что вам хватило месяца, чтобы свободно оперировать такими понятиями, как ADL, SFINAE и CRTP?

Ну, вообще-то, в этих понятиях нет ничего сложного. Даже чуть меньше, я бы сказал. Что, впрочем, не отменяет того, что «профессиональное понимание» за месяц — это, конечно, рофл.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от RazrFalcon

OpenGL и рендер TTF. Остальное можно написать самому. И OpenGL кстати не обязательно, ты можешь софтварно блиттить текстуру на экран.

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

Остальное можно написать самому.

Просто лол. Всё сишники на одно лицо.

Повторяю ещё раз: есть нормальная отрисовка текста, а есть рисование глифов друг за другом.

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

Просто лол. Всё сишники на одно лицо.

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

Повторяю ещё раз: есть нормальная отрисовка текста, а есть рисование глифов друг за другом.

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

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

a1batross ★★★★★
()

А вообще. Хорошо же, что пилят. Тут кто-то из первых комментаторов упоминал паскалевый graph. Для первых шагов в виде Hello World лучше не придумаешь, тем более когда оно есть из коробки.

В С++ много чего было уже хорошо, ещё с того момента, как он был транслируемым в Си языком. Оставалось только делать «удобно».

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

Нда... Сишник - это диагноз.

Pango - 38 KLOC, harfbuzz - 40 KLOC.

Вопрос: зачем мне переизобретать велосипед (при условии, что я не сишник)?

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

ты никогда не задумавался почему эти кайры, панги и харфбазы не использует никто кроме друзей-товарищей с freedesktop.org, а вместо этого люди вовсю используют freetype например?

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

Нда... Сишник - это диагноз.

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

Вопрос: зачем мне переизобретать велосипед (при условии, что я не сишник)?

Так я понимаю, ты не хочешь лишних зависимостей?

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

Мне без разницы. Я лишь указал, что из будет много и сократить их нельзя.

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

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

Вы хотите сказать, что вам хватило месяца, чтобы свободно оперировать такими понятиями, как ADL, SFINAE и CRTP?

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

Напомнило бессмертное «компьютеры - это просто, там же только нули и единицы».

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

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

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

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

Qt поверх harfbuzz.

qt работает «поверх harfbuzz» точно также как и «поверх freetype», т.е. в общем случае никак, а в частном случае - это опция сборки кутэ. гтк «работает поверх pango+harfbuzz» примерно вот так:

List of GTK+ dependencies
GTK+ depends on several libraries:

GLib
cairo
Pango
ATK
gdk-pixbuf

To run GTK+ programs you will also need:

gettext-runtime
fontconfig
--> freetype <--
expat
libpng
zlib

удачи в рендеринге шрифтов.

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

А мне нужно отрисовывать все языки.

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

Но тут небежали сишники со своим мирком latin-1/КОИ-8.

Говори за своих сишников. У меня мирок юникода, где мне интересны только ограниченный набор кириллицы и латиницы. :3 А проблемы арабов будут решать сами арабы, потому что только они знают свой язык.

[offtopic]У меня вообще с арабами всё очень плохо. Они мне шлют описание при краше на отдельную почту. Я открываю, а там всё на арабском. Забиваю в переводчик и описание краша превращается в молитву. [/offtopic]

a1batross ★★★★★
()
Последнее исправление: a1batross (всего исправлений: 2)
Ответ на: комментарий от RazrFalcon

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

зачем лезешь тогда? хотя ты уже почти добрался до сути. железо со временем менеятся и новый компилятор с++ должен перекомпиливать старую программу под новое железо. перекомпилить 2д-графику под 3д-железо может быть не только очень сложно, а даже невозможно. поэтому в с и с++ такие вещи традиционно делаются в виде библиотек часто специализированных в какой-то одной сложной области. эти библиотеки теоретически могут обновить себя под новое железо и новый компилятор. вот так это всё и работало, и продолжает работать последние 30 лет или типа того, и поэтому вся индустрия на с и с++, а не на каком-нибудь паскалике с модулем graph.

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

Так в чём твоя проблема тогда?

В том, что в std хотят пропихнуть полурабочий мусор.

мне интересны только ограниченный набор кириллицы и латиницы.

А у меня весь unicode, ибо я не знаю что придёт в качестве входных данных.

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

В том, что в std хотят пропихнуть полурабочий мусор

Ну почему полурабочий? Для определенных целей вполне сойдет. А если так хочется подискутировать на тему неполноценности std, то давай начнем с того, что стандартные контейнеры там очень неудобные.

Могу только посочувствовать.

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

Я за двадцать лет до сих пор вменяемого описания префиксного и постфиксного даблплюса/минуса не нашел

http://en.cppreference.com/w/cpp/language/operators
чем не устроило?

1. Там английский

2. Нет никаких объяснений, как будут работать конструкции:

a[i]=i++;


или всякие инкременты в циклах.

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

Могу только посочувствовать.

Да я уже бегу с тонущего корабля.

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

После 1 можно было не продолжать.
PS. Это справочник, а не учебник, чтобы обьяснять про "всякие инкременты в циклах".
PPS. Код неконформный.

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

Нет никаких объяснений, как будут работать конструкции:

Тебе об этом любой компилятор скажет, если предупреждения читать будешь.

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

PS. Это справочник, а не учебник, чтобы обьяснять про «всякие инкременты в циклах».
PPS. Код неконформный.
Тебе об этом любой компилятор скажет, если предупреждения читать будешь.

Вот я и говорю, что за двадцать лет не нашел ни одного вменяемого объяснения по работе префексных-постфиксных инкрементов/декрементов.

Или вот на ум пришло:

int i=1;
int a=(++i*2) - (--i*2);


И не надо рассказывать что так никто не пишет. Каждый х считает своим долгом засунуть граничное поведение в проект.

Мы выгребали даже с обычным умножением и делением, ибо у них приоритеты одинаковые. А разные компилеры действуют по-разному: один вначале сделает умножение а другой вначале деление в простом выражении int a=5*2/3. Но тут хоть понятно что происходит и как бороться. А в этих префиксах-постфиксах приоритет операций скобками уже не расставишь, все на уровне выражения.

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

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

Вот я и говорю, что за двадцать лет не нашел ни одного вменяемого объяснения по работе префексных-постфиксных инкрементов/декрементов.

В посте, на который я отвечал, требовалось "описание". Я дал ссылку на каноничные сигнатуры. Теперь требуется уже "обьяснение". Чтож, ссылка тоже есть http://en.cppreference.com/w/cpp/language/operator_incdec (и оттуда http://en.cppreference.com/w/cpp/language/eval_order). На этом сайте, кстати говоря, не только английский.

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

Обоже, это чтоа?

int n3 = ++ ++n1;

Прям так жостко, нигде выше про отдельную конструкцию ++ не написали, и тут ннна! И никакого пояснения.

Или это эквивалентно int n3 = ++(++n1); ?

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

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

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

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

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

Много видел людей кто обломался в изучении C++, но чтоб облом наступил на операции инкремента... Чувак, ты уникален.

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

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

Достаточно подробное описание языка в стандарте. У Страуструпа же всё достаточно строго описано без лишних разжёвываний.

Много видел людей кто обломался в изучении C++, но чтоб облом наступил на операции инкремента

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

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

В стандарте описание просто полное, но его тут явно не надо. Тут и K&R бы наверно хватило.

товарищ Xintrea не в обломе и имеет проект MyTetra с открытым кодом

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

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