?

Log in

No account? Create an account
Читая обсуждение http://ivan-gandhi.livejournal.com/3329246.html и… - Cyril Pertsev — LiveJournal
September 13th, 2015
02:21 pm

[Link]

Previous Entry Share Next Entry

(91 comments | Leave a comment)

Comments
 
[User Picture]
From:rblaze
Date:September 14th, 2015 08:17 pm (UTC)
(Link)
ABI есть, вот даже документ имеется: https://mentorembedded.github.io/cxx-abi/. То, что MSVC в силу исторических и коммерческих причин ему не следует, это очень грустно, но что поделаешь, как говорят у красноглазиков, виндопроблемы.
[User Picture]
From:soonts
Date:September 14th, 2015 09:36 pm (UTC)
(Link)
>в силу исторических и коммерческих причин ему не следует, это очень грустно
А мне норм.
На венде не нужен этот стандарт. Уже многие десятилетия есть прекрасный ABI, который называется COM.

В отличие от того, что теоретически возможно со стандартным C++ ABI, COM позволяет использовать DLL из любого языка, из дот нета, из петона, и если приспичит, то можно даже из PHP. Там и многопоточность, и исключения, и ещё куча всего, и производительности хватает даже для очень performance critical штук (если оно in-process, конечно).

Если бы в красноглазом мире было нечто подобное, я уверен, что им бы тоже не упёрся этот C++ ABI.
А так у них выбора в общем-то не было, кроме как стандартизировать C++ ABI, и программировать на 30-летней давности C++.
[User Picture]
From:permea_kra
Date:September 14th, 2015 09:53 pm (UTC)
(Link)
>Уже многие десятилетия есть прекрасный ABI, который называется COM.
Это, гм, п-ц а не abi.

>Если бы в красноглазом мире было нечто подобное,
CORBA. Особой популярностью не пользуется.
[User Picture]
From:soonts
Date:September 14th, 2015 10:26 pm (UTC)
(Link)
>п-ц а не abi
Не умеете его готовить.

>CORBA
Это никакой не ABI.
CORBA это стандарт взаимодействия распределённых систем.
В случае in-process COM, используемого из C++, накладные расходы — единственный виртуальный вызов. Так работают Direct3D, Media Foundation, и другие очень требовательные к производительности штуки.
В случае CORBA вы anyway попадаете на сериализацию\десериализацию, что очевидно ставит крест на производительности.
[User Picture]
From:permea_kra
Date:September 16th, 2015 06:45 am (UTC)
(Link)
>Не умеете его готовить.
Что характерно, никогда не стремился. С п-цом дел стараюсь не иметь.

>Это никакой не ABI.
>CORBA это стандарт взаимодействия распределённых систем.

И то, и другое - стандарт доступа к (возможно, удаленному) менеджеру/хранилищу объектов. Разумеется, ни то, ни другое стандартов ABI не являются.

>В случае in-process COM, используемого из C++, накладные расходы — единственный виртуальный вызов. Так работают Direct3D,

Чё-чё-чё?
С каких это пор DirectX стал работать через виртуальные вызовы?
[User Picture]
From:soonts
Date:September 16th, 2015 07:23 am (UTC)
(Link)
>С п-цом дел стараюсь не иметь.
Прекрасная проверенная временем технология.
Очень удачная.
Например весь новый WinAPI (который Windows Runtime) целиком построен на COM-интерфейсах.

>И то, и другое - стандарт доступа к (возможно, удаленному) менеджеру/хранилищу объектов.
На самом высоком уровне абстракции да.
Однако COM включает в себя и ABI тоже, который с определёнными оговорками можно использовать отдельно от его более высокоуровневых фич.

>С каких это пор DirectX стал работать через виртуальные вызовы?
DirectX работает через виртуальные вызовы всю свою историю.
Он весь построен на COM интерфейсах, наследующих от IUnknown (ID3D11Device, IXAudio2, etc).
С точки зрения языка C++, COM интерфейс это pure abstract class c таблицей виртуальных методов, которые можно вызывать.
[User Picture]
From:permea_kra
Date:September 16th, 2015 08:54 am (UTC)
(Link)
>Например весь новый WinAPI (который Windows Runtime) целиком построен на COM-интерфейсах.

Ничего хорошего в этом нет, в общем-то. ООП головного мозга теперь совсем зохавает мир.

>DirectX работает через виртуальные вызовы всю свою историю.

Мда. Я-то помню времена, когда это был чисто сишный АПИ, без всякого COM на поверхности. А тут вы рассказываете про ком.

Все-таки не зря винду считают гнилой платформой того же уровня, что и кофемолки.
[User Picture]
From:soonts
Date:September 16th, 2015 11:01 am (UTC)
(Link)
>ООП головного мозга теперь совсем зохавает мир
Ничего лучше человечество не придумало.
Интерфейс всех современных ОС задизайнен в ООП стиле, даже если он на чистом C с хэндлами, как в Win32 или линупсе.

>Я-то помню времена, когда это был чисто сишный АПИ, без всякого COM на поверхности
У вас значит с памятью что-то. Вот например статья эпохи DirectX 5, из текста которой видно, что COM на поверхности был ещё в DirectX 3:
https://www.microsoft.com/msj/0298/primitive.aspx
[User Picture]
From:permea_kra
Date:September 16th, 2015 11:49 am (UTC)
(Link)
>Интерфейс всех современных ОС задизайнен в ООП стиле, даже если он на чистом C с хэндлами, как в Win32 или линупсе.


Эээ, ненене. ООП там нет. Объекты - есть, ООП точно нет. И слава богу.


>У вас значит с памятью что-то.

*внимательно поглядел матчасть* Действительно. Ну, от майкрософта ничего хорошего ждать и не следовало...
[User Picture]
From:soonts
Date:September 16th, 2015 12:30 pm (UTC)
(Link)
>Объекты - есть, ООП точно нет
Взаимоисключающие параграфы детектед.

>от майкрософта ничего хорошего ждать и не следовало
Тем не менее «ничего хороший» Direct3D почему-то выиграл в конкурентной борьбе у OpenGL:
http://programmers.stackexchange.com/a/88055/25371
[User Picture]
From:permea_kra
Date:September 16th, 2015 02:32 pm (UTC)
(Link)
>Взаимоисключающие параграфы детектед.

Безграмотность детектед.

>Тем не менее «ничего хороший» Direct3D почему-то выиграл в конкурентной борьбе у OpenGL:

Ничего там не выиграно, даже в играх. Афаик ключевые движки (id tech, unreal engine) opengl как минимум поддерживают если на нем не живут.

На мобильном рынке (андроид, ios) directX малозаметен.
[User Picture]
From:soonts
Date:September 17th, 2015 03:40 am (UTC)
(Link)
Хорошо, объясню подробнее.
Первая строчка из википедии:
Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects"
Если вы на чём-то программируете и у вас там есть какие угодно объекты, поздравляю, у вас есть ООП. Все остальные фичи ООП вроде композиции, полиморфизма и ключевого слова class в языке — опциональны.
Поэтому ваше утверждение «Объекты - есть, ООП точно нет» таки взаимоисключающие параграфы.

>ключевые движки (id tech, unreal engine) opengl как минимум поддерживают
Поддерживают на OSX и playstation.
На венде почти 100% современных игр (кроме казуальных вроде майнкрафта и angry birds, которым не нужна производительность) рендерят при помощи Direct3D.
[User Picture]
From:permea_kra
Date:September 17th, 2015 03:58 am (UTC)
(Link)
Ну я ж говорю - безграмотность детектед.

Есть объектное, объектно-ориентированное и прототипное программирование (и языки, их поддерживающие). Во всех трех есть объекты, но парадигмы принципиально разные. Объектное базируется на объектах и сообщениях, объектно-ориентированное - на объектах, интерфейсах и наследовании, прототипное - на объектах и расширении существующих объектов. Примеры языков - smalltalk, java, ecmascript соотвтвенно.

И нет, не надо мне пытаться объяснить, что объектная и прототипные парадикгмы - подвариант объектно-ориентированной. Это не так.


>На венде почти 100% современных игр (кроме казуальных вроде майнкрафта и angry birds, которым не нужна производительность) рендерят при помощи Direct3D.

id Tech 6 is an upcoming OpenGL based game engine under preliminary development by id Software, which will tentatively follow id Tech 5.[1]

id Tech 5 [...] the demo used only a single core with single-threaded OpenGL implementation [...].

Кармак как сидел на opengl, так и сидит (правда, юзает directX для неграфических нужд)
[User Picture]
From:soonts
Date:September 17th, 2015 04:53 am (UTC)
(Link)
>безграмотность детектед
У вас детектед, да.
>Есть объектное
Smalltalk is an object-oriented, dynamically typed, reflective programming language.
>прототипное
Prototype-based programming is a style of object-oriented programming
>Это не так.
Википедия думает, что так. А у вас есть пруфлинки какие-нибудь, или это вы сами так решили?

>id Tech 5
Занимает исчезающе малую долю. 4 года на рынке, 4 выпущенные игры.
Для сравнения, на GameBryo за это время вышли 15 игр, на CryEngine примерно 30, на Unreal Engine порядка 200.
[User Picture]
From:permea_kra
Date:September 17th, 2015 10:38 am (UTC)
(Link)
>is an object-oriented
>is a style of object-oriented programming

Больше читайте идиотов.


>Википедия думает, что так.

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

Принципы того, что называют ООП сейчас (т.е. интерфейсы, объекты, методы, полиморфизм, декомпозиция, UML-моделирование и т.п.) появились после работ Буча в конце 80-х. smalltalk заметно старше, prototype-based стиль появился в Self примерно одного с этими работами возраста, при этом оба подразумевают совершенно иной подход к проектированию. Т.е. несмотря на желание адептов ООП примазаться, это совершенно самостоятельно возникшие концепции, и с ООП у них общего только объекты и наследование

А если вы попытаетесь эти языки засунуть в ООП, то туда же придется засунуть еще и Haskell например, поскольку что-то типа subtyping, inheritance & classes/objects в нем есть =)))). И Си, поскольку на нем все это можно эмулировать. Т.е. термин потеряет классификационную силу, поскольку под него можно будет подвести любой язык.

Разумеется, интерфейс ОС ни разу не ОО, а просто О. В смысле, объекты там есть, методы есть, а вот с наследованием и субтайпингом некоторые сложности, т.е. даже в расширенном смысле их под определение ООП подвести не удастся.

>UT4

UT4 не может быть примером, поскольку он поддерживает И opengl И directX бэкэнды. Да, подвиндой у него два бэкэнда, причем я бы не сказал, что directX-вый лучше, судя по бегло нагугленному бенчмарку. Еще есть Source - у него тоже сейчас два бэкэнда, при том Valve нахваливает именно opengl бэкэнд - который вдобавок еще и сильно более молодой.
My Website Powered by LiveJournal.com