Здравствуйте, Skorodum, Вы писали: S>Хинт: сложный интерфейс это тригонометрия и OpenGL (или его альтернативы), и хотелось бы использовать этот код на разных платформах, а не писать заново.
А в чём проблема написать этот код на дотнете и использовать на разных платформах?
Собственно некроссплатформенность ГУЯ сводится к двум факторам. Точнее, к одному — мимикрия и интеграция с окружением, в двух аспектах:
1. Мимикрия look and feel (максимальное использование платформенных контролов при построении гуя + самописанных контролов, но ведущих себя как нативные на каждой платформе, включая неочевидное поведение вроде обработки малоизвестных клавиатурных шорткатов, или авто-адаптации внешнего вида при смене системных настроек)
2. Интеграция с окружением (клипборд, всякие send to, встраивание объектов и документов друг в друга, система прав доступа к управляемым объектам)
Когда речь идёт о какой-нибудь трёхмерщине, от этих аспектов проку никакого нет, т.к. ни в одной платформе нет встроенной поддержки. Всё, что такому гую нужно от платформы — какой-то канвас, куда мы будем лить свою картинку. Например, через OpenGL.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Skorodum, Вы писали: S>Вроде по-русски написано: панель современного авто.
В моём современном авто панель написан вообще на джаве. Плюс, по слухам, JS. Ни строчки кода на С++
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Serginio1, Вы писали:
S> Ну вот ты не знаешь о WPF и даже не знаешь где используется? Да практически весь софт под винду. S>Учитывая распространенность .Net на винде. Весь корпоративный софт!
Ага, вот наш софт написан на WPF под винду, а теперь задача запустить все это хозяйство на астралинуксе. И чего? Какие варианты, кроме как выкинуть весь код на WPF на помойку и писать заново? Колхоз с wine не предлагать, СБ не пропустит.
Здравствуйте, Dym On, Вы писали:
S>> Ну вот ты не знаешь о WPF и даже не знаешь где используется? Да практически весь софт под винду. S>>Учитывая распространенность .Net на винде. Весь корпоративный софт! DO>Ага, вот наш софт написан на WPF под винду, а теперь задача запустить все это хозяйство на астралинуксе. И чего? Какие варианты, кроме как выкинуть весь код на WPF на помойку и писать заново? Колхоз с wine не предлагать, СБ не пропустит.
Здравствуйте, Serginio1, Вы писали:
V>>PM в C# у выигрывает у F# с разгромным счётом, ес-но. V>>(сам же ссылки дал — не смотрел, разве?) S> Ну вот мое мнение, что Шарп недотягивает до F#.
В этом месте надо привести конструкции из F#, аналогов которых нет в C# и обратно.
И сравнить, где кого больше. ))
S>Но не суть. ПМ очень удобен как туплами, рекордами, объектами, списками.
ПМ изначально работает с туплами и рекордами.
C# пошёл дальше.
Такое себе...
Каждое определение OneOf<T1, T2, T3> расписано повторно для данного арити.
Соотв., подход ограничен максимально длинным определением из библиотеки.
enum class — плохое предложение, т.к. перечисление получается открытым.
К тому же, эту технику можно реализовать уже сейчас и прямо там же расписано — как именно.
Больший интерес предсталял бы enum struct, бо перечисление получилось бы закрытым с соотв.контролем со стороны компилятора, чтобы обработать все варианты в PM.
V>>В C# для этого завезут ПМ над Span (конкретно для Span<char> уже завезли). S> Это не суть. Просто есть ПМ для списков.
Опиши такой же линкованный список в C# и получишь такой же PM (в чуть другом синтаксисе, но с той же семантикой).
S>Интересно. Спасибо. Но это не ПМ.
Это именно покрытие сценариев из ПМ — выразительное ветвление по видам конструкций данных.
S>ФП в F# мощнее чем в Наскеле?
Нет, намного хуже.
Но ПМ в F# намного мощнее оного в Хаскеле.
S>ФП в С++ уступает C#?
Опережает кратно, но ПМ в языке отсутствует — обитает на библиотечном уровне.
V>>>В F# есть только одна конструкция, неизвестная в C# — это явное ветвление по discriminated union, бо такого встроенного в язык типа данных нет в C#, опять бгг. S>>Кстати S>>https://code-maze.com/csharp-discriminated-unions-with-oneof/
V>Такое себе... V>Каждое определение OneOf<T1, T2, T3> расписано повторно для данного арити. V>Соотв., подход ограничен максимально длинным определением из библиотеки.
S>>https://github.com/dotnet/csharplang/blob/main/proposals/discriminated-unions.md
V>enum class — плохое предложение, т.к. перечисление получается открытым. V>К тому же, эту технику можно реализовать уже сейчас и прямо там же расписано — как именно.
V>Больший интерес предсталял бы enum struct, бо перечисление получилось бы закрытым с соотв.контролем со стороны компилятора, чтобы обработать все варианты в PM.
V>>>В C# для этого завезут ПМ над Span (конкретно для Span<char> уже завезли). S>> Это не суть. Просто есть ПМ для списков.
V>Опиши такой же линкованный список в C# и получишь такой же PM (в чуть другом синтаксисе, но с той же семантикой).
S>>Интересно. Спасибо. Но это не ПМ.
V>Это именно покрытие сценариев из ПМ — выразительное ветвление по видам конструкций данных.
Там подобие OneOf<T1, T2, T3>, которые кстати могут генериться через SG. Нет ограничений. Кстати пример сгенеренный. S>>ФП в F# мощнее чем в Наскеле?
V>Нет, намного хуже. V>Но ПМ в F# намного мощнее оного в Хаскеле.
S>>ФП в С++ уступает C#?
V>Опережает кратно, но ПМ в языке отсутствует — обитает на библиотечном уровне.
Это уже не ПМ. Через SG тоже можно нагенерить близко к шаблонам.
Здравствуйте, Serginio1, Вы писали:
S>>>Интересно. Спасибо. Но это не ПМ. V>>Это именно покрытие сценариев из ПМ — выразительное ветвление по видам конструкций данных. S>Там подобие OneOf<T1, T2, T3>
ПМ изначально предназначался для ветвления по значению discriminated union, т.к. необходимо было из общего типа объединения получить в строготипизированном виде частный тип его значения.
Все остальные "развития ПМ" были и есть непринципиальными/необязательными и представляют из себя не более чем сахар над цепочкой if-elseif-...-else.
И именно в этом месте возможности ПМ у различных языков заметно отличаются, но, положа руку на, это всё сахарок, т.е. не является тем нечто, без чего никак.
Поэтому, исторически так вышло, что наиболее уместно ПМ показывает себя в сценариях, где необходимо диспатчиться по подтипам, имея на руках лишь базовый тип.
В Хаскеле такой ПМ происходит по закрытому объединению, является строгим, не позволит забыть обработать все допустимые варианты DU.
В C# типы открыты, получается малость профанация, хотя и удобно синтаксически. ))
S>>>ФП в С++ уступает C#? V>>Опережает кратно, но ПМ в языке отсутствует — обитает на библиотечном уровне. S>Это уже не ПМ.
Это ты оперируешь чуйкой? ))
Нет размеченных объединений — не нужен ПМ.
В C#, если что, все объекты представляют из себя размеченное объединение System.Object.
Да, я смотрел на это уже, бо в дотнете традиционной головной болью является то, что нормальный логгер принципиально невозможно прикрутить, чтобы реализовать все привычные его св-ва.
Сейчас любая реализация логгера выглядит и работает максимально уродско, и ничего ты с этим не сделаешь.
(распишу подробней, если любопытно)
Фича по ссылке должна помочь сделать всё красиво, в сочетании с interpolation string handler.
А всего-то надо было натравить плюсовиков на дотнет, чтобы рассказали, чего в этом недоделанном дотнете не хватает для беззаботной жизни. ))
Здравствуйте, vdimas, Вы писали:
S>>>>ФП в С++ уступает C#? V>>>Опережает кратно, но ПМ в языке отсутствует — обитает на библиотечном уровне. S>>Это уже не ПМ.
V>Это ты оперируешь чуйкой? )) V>Нет размеченных объединений — не нужен ПМ.
ПМ это встроенный в язык конструкция.
Суть удобство не только писать, но и читать! V>В C#, если что, все объекты представляют из себя размеченное объединение System.Object.
Это не суть. S>> Кстати S>>interceptors понравились для SG. S>>Теперь и существующий код можно подменять! S>>https://github.com/dotnet/roslyn/blob/main/docs/features/interceptors.md
V>Да, я смотрел на это уже, бо в дотнете традиционной головной болью является то, что нормальный логгер принципиально невозможно прикрутить, чтобы реализовать все привычные его св-ва. V>Сейчас любая реализация логгера выглядит и работает максимально уродско, и ничего ты с этим не сделаешь. V>(распишу подробней, если любопытно)
V>Фича по ссылке должна помочь сделать всё красиво, в сочетании с interpolation string handler.
V>А всего-то надо было натравить плюсовиков на дотнет, чтобы рассказали, чего в этом недоделанном дотнете не хватает для беззаботной жизни. ))
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Skorodum, Вы писали: S>>Вроде по-русски написано: панель современного авто. S>В моём современном авто панель написан вообще на джаве. Плюс, по слухам, JS. Ни строчки кода на С++
Что за авто?
Для примера C++/QML официально используется в теслах, мерсах, хюндаях.
Здравствуйте, Sinclair, Вы писали:
S>А в чём проблема написать этот код на дотнете и использовать на разных платформах?
Может и нет проблемы Я тут клещами пытаюсь вытянуть примеры таких приложений.
S>Собственно некроссплатформенность ГУЯ сводится к двум факторам. Точнее, к одному — мимикрия и интеграция с окружением, в двух аспектах: S>1. Мимикрия look and feel (максимальное использование платформенных контролов при построении гуя + самописанных контролов, но ведущих себя как нативные на каждой платформе, включая неочевидное поведение вроде обработки малоизвестных клавиатурных шорткатов, или авто-адаптации внешнего вида при смене системных настроек)
Это все в прошлом. Винда сама использует несколько разных стилей. И ничего.
S>2. Интеграция с окружением (клипборд, всякие send to, встраивание объектов и документов друг в друга, система прав доступа к управляемым объектам)
И еще миллион других вещей: локализация, ориентация лево-право, поддержка нескольких мониторов и т.п.
S>Когда речь идёт о какой-нибудь трёхмерщине, от этих аспектов проку никакого нет, т.к. ни в одной платформе нет встроенной поддержки. Всё, что такому гую нужно от платформы — какой-то канвас, куда мы будем лить свою картинку. Например, через OpenGL.
Так где примеры кросс-платформенных канвасов с поддержкой OpenGL? Я вот знаю Qt
Здравствуйте, Skorodum, Вы писали:
S>Винда сама использует несколько разных стилей. И ничего.
Как раз очень даже чего. Этот бардак пошёл с 8ки, до неё было куда более единообразно.
Здравствуйте, CreatorCray, Вы писали:
CC>Как раз очень даже чего. Этот бардак пошёл с 8ки, до неё было куда более единообразно.
Чего только для старперов типа нас, молодеже это все ок.
Главное тут что, разработчикам приложений не стоит пытаться быть святее папы римскогомайкрософта и мимикрировать под какой-то несуществующий стандарт.
Здравствуйте, Sinclair, Вы писали:
S>Мазда. Для неё даже альтернативные прошивки энтузиасты пилят
Интересно. Там такой открытый интерфейс?
Брал в аренду 6-ку несколько лет назад, там все было красиво.
Здравствуйте, Skorodum, Вы писали: S>Интересно. Там такой открытый интерфейс?
Ну как открытый. Там какая-то рудиментарная проверка происхождения есть, так что нужно что-то шаманить для применения неподписанных прошивок.
А остальное — методом проб, ошибок, и ревёрс инжиниринга.
S>Брал в аренду 6-ку несколько лет назад, там все было красиво.
Да так себе, ничего особенно красивого. Обычный софт от производителей железяк — ни уму, ни сердцу.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Serginio1, Вы писали:
S>OpenGL Skia — это графическая библиотека, обладающая высокой производительностью и работающая на множестве платформ. Она основана на стандартном OpenGL API, но обеспечивает рисование векторной графики и выполнение других задач, связанных со многими графическими операциями.
Первый интересный пример от тебя и тот на С++
По существу: полноценный интрефейс на таком низко-уровнем API писать это очень дорогое удовольствие.
Здравствуйте, Skorodum, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>>OpenGL Skia — это графическая библиотека, обладающая высокой производительностью и работающая на множестве платформ. Она основана на стандартном OpenGL API, но обеспечивает рисование векторной графики и выполнение других задач, связанных со многими графическими операциями. S>Первый интересный пример от тебя и тот на С++ S>По существу: полноценный интрефейс на таком низко-уровнем API писать это очень дорогое удовольствие.
Здравствуйте, Skorodum, Вы писали:
S>>OpenGL Skia — это графическая библиотека, обладающая высокой производительностью и работающая на множестве платформ. Она основана на стандартном OpenGL API, но обеспечивает рисование векторной графики и выполнение других задач, связанных со многими графическими операциями. S>Первый интересный пример от тебя и тот на С++ S>По существу: полноценный интрефейс на таком низко-уровнем API писать это очень дорогое удовольствие.
На шарпе после прихода ref struct и Function Pointers все очень близко в нативу.
Опять же смотри SkiaSharp
и солнце б утром не вставало, когда бы не было меня