Re[4]: Новости C#13. params
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.10.24 09:17
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>Нужно и востребованно. Я уже приводил пример библиотеки, которая собирается под все 6 платформ и используется из всех ЯП простым способом — есть обертки даже для C#.

В некоторых частных случаях действительно, можно написать такую библиотеку, которую можно использовать примерно откуда угодно. Я вам по соседству привёл примеры других случаев, в которых вам не помогут ни Rust, ни C++, ни C. Отсутствие комментариев туда с вашей стороны вполне красноречиво.

S>На C# вы такой в принципе не сможете написать. Попробуйте найти хотя бы одно решение — посмотрим. Уверен что в мире нет ни одной такой библиотеки.

Если ограничить своё понимание "библиотеки" некоторыми частными случаями, то и на C# можно написать библиотеку, которая будет использоваться из любого языка (ежели написать к нему обёртки). Кроссплатформенность вообще проблемой не является, т.к. в дотнете идёт из коробки.

По итогу: выдуманные вами критерии оценки языков не применяются никем, в том числе и вами. Поэтому вопрос о языковых предпочтениях должен решаться на основе каких-то других критериев.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Новости C#13. params
От: Shmj Ниоткуда  
Дата: 22.10.24 09:56
Оценка: :)
Здравствуйте, Sinclair, Вы писали:

S>то и на C# можно написать библиотеку, которая будет использоваться из любого языка (ежели написать к нему обёртки). Кроссплатформенность вообще проблемой не является, т.к. в дотнете идёт из коробки.


Попробуйте. Уверен что ничего не получится, когда столкнетесь с практикой.
Re[6]: Новости C#13. params
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 22.10.24 10:10
Оценка:
Здравствуйте, Shmj, Вы писали:

S>>то и на C# можно написать библиотеку, которая будет использоваться из любого языка (ежели написать к нему обёртки). Кроссплатформенность вообще проблемой не является, т.к. в дотнете идёт из коробки.


S>Попробуйте. Уверен что ничего не получится, когда столкнетесь с практикой.

Ну а самому слабо? Это как про неуловимого Джо, почему он неуловимый.
Тем кому это нужно используют. И прикручивают заголовки. Мне это и большинству просто не нужно.
Но возможность есть!
и солнце б утром не вставало, когда бы не было меня
Re[7]: Новости C#13. params
От: Shmj Ниоткуда  
Дата: 22.10.24 12:11
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>>Попробуйте. Уверен что ничего не получится, когда столкнетесь с практикой.

S> Ну а самому слабо? Это как про неуловимого Джо, почему он неуловимый.

Я даже не представляю как это сделать. Как быть с GC?

S> Тем кому это нужно используют. И прикручивают заголовки. Мне это и большинству просто не нужно.

S>Но возможность есть!

Если бы эта возможность была — ей бы уже воспользовались. Уже как минимум статьи были бы. А так ничего нет.

Более того — на мин. примере оно может и сработает — но для продакшена точно не годится.

Хотите это сделать первым в мире? Вы что-нибудь делали первым в мире?
Re[8]: Новости C#13. params
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 22.10.24 13:07
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>>>Попробуйте. Уверен что ничего не получится, когда столкнетесь с практикой.

S>> Ну а самому слабо? Это как про неуловимого Джо, почему он неуловимый.

S>Я даже не представляю как это сделать. Как быть с GC?

А чем тебе GC мешает? Разные менеджер памяти так он ив C++ есть.
Выкручиваются через копирование или обработку памяти.

S>> Тем кому это нужно используют. И прикручивают заголовки. Мне это и большинству просто не нужно.

S>>Но возможность есть!

S>Если бы эта возможность была — ей бы уже воспользовались. Уже как минимум статьи были бы. А так ничего нет.

Я тебе приводил ссылку на создание заголовков для C++. Значит используют.
https://github.com/dotnet/runtime/issues/100747

S>Более того — на мин. примере оно может и сработает — но для продакшена точно не годится.


S>Хотите это сделать первым в мире? Вы что-нибудь делали первым в мире?

Поверь уже делают. Только не на этом форуме.
и солнце б утром не вставало, когда бы не было меня
Re[9]: Новости C#13. params
От: Shmj Ниоткуда  
Дата: 22.10.24 13:20
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>>Если бы эта возможность была — ей бы уже воспользовались. Уже как минимум статьи были бы. А так ничего нет.

S> Я тебе приводил ссылку на создание заголовков для C++. Значит используют.
S>https://github.com/dotnet/runtime/issues/100747

Это для AOT — не поддержки всех платформ.

S>>Хотите это сделать первым в мире? Вы что-нибудь делали первым в мире?

S> Поверь уже делают. Только не на этом форуме.

Ну приведешь пример хотя бы одной такой библиотеки во Вселенной — поверю.
Re[10]: Новости C#13. params
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 22.10.24 14:19
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>>>Если бы эта возможность была — ей бы уже воспользовались. Уже как минимум статьи были бы. А так ничего нет.

S>> Я тебе приводил ссылку на создание заголовков для C++. Значит используют.
S>>https://github.com/dotnet/runtime/issues/100747

S>Это для AOT — не поддержки всех платформ.

AOT компилируется для всех платформ. Еще раз формируется С++ код со сборщиком мусора.
S>>>Хотите это сделать первым в мире? Вы что-нибудь делали первым в мире?
S>> Поверь уже делают. Только не на этом форуме.

S>Ну приведешь пример хотя бы одной такой библиотеки во Вселенной — поверю.


Я уже давал. https://github.com/dotnet/samples/tree/main/core/nativeaot/NativeLibrary
и солнце б утром не вставало, когда бы не было меня
Re[11]: Новости C#13. params
От: Shmj Ниоткуда  
Дата: 22.10.24 14:36
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>>Это для AOT — не поддержки всех платформ.

S>AOT компилируется для всех платформ. Еще раз формируется С++ код со сборщиком мусора.

Нет — под моб. платформы не собирается.
Re[6]: Новости C#13. params
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.10.24 16:20
Оценка: +2
Здравствуйте, Shmj, Вы писали:
S>Попробуйте. Уверен что ничего не получится, когда столкнетесь с практикой.
Всё прекрасно получится. Например, MS SQL Server, написанный на C++, прекрасно исполнял дотнетовый код вплоть до недавних версий, где это было выпилено за ненадобностью. Делал он это, разумеется, на всех платформах.

Встречное предложение — попробовать столкнуться с практикой и привинтить какую-нибудь типовую header-only library на С++ к проекту на более-менее любом языке. Хоть даже и к С.
Я вам даже подскажу, в чём затруднения, которых вы не видите из-за своей зашоренности:
1. Различия в языковых концепциях. Языки программирования настолько различны, что очень немногие конструкции есть сразу во всех. В большинстве случаев вы не сможете воспользоваться ничем, кроме "голых функций". Плюсовые шаблоны и операторы невозможно употребить ни в одном языке, кроме С++ — и то, при условии, что вы собираете весь код одним и тем же компилятором.
2. Различия в реализации похожих и даже одинаковых концепций. Наследование в Java, Javascript, и C++ реализовано настолько по-разному, что вы не сможете использовать классы, написанные на любом из этих языков, в других языках. Исключения — то же самое: не сможете вы поймать исключение, выброшенное из C++-кода, ни в каком другом языке. Даже если в этом языке тоже есть исключения. Управление памятью — та же беда. Код, написанный для JVM, будет использовать один и тот же менеджер памяти. Код, написанный на С++, использовать из С нужно с великой осторожностью — иначе вы получите трудноуловимые утечки, и вообще undefined behavior на каждом первом шагу.

Как с учётом этого можно утверждать, что на С++ "можно написать библиотеку, которую потом использовать из любого языка на любой платформе", будучи в здравом уме — я хз.
Если же вдруг вы всё это осознавали, и имели в виду, что "примерно из любого языка и платформы есть байндинги к plain С коду", то я поясню: возможность позвать "просто функцию" из библиотеки требует, чтобы на стороне С++ вся функциональность этой библиотеки была выставлена наружу в виде "просто функций". То есть вы не можете выставить наружу допустим, класс Matrix<N, M>, который оборудован операторами сложения и перемножения матриц.
Вам придётся для начала переделать свою библиотеку так, чтобы размерность матрицы была частью её рантайм-заголовка, а не параметрами шаблона. Вы не сможете выставить наружу операторы сложения и умножения этих матриц — вы будете писать функции matrix_add и matrix_multiply. Вы не сможете проверять соответствие размеров операндов статически при компиляции — вам придётся вкрячить код этой проверки в каждую функцию. Вы не сможете бросить исключение в случае несовпадения размеров — вы будете вынуждены пойти на унизительные конвенции вроде "если не получилось, то вернём null-указатель вместо результата". Вы не сможете реализовать никакое автоматическое управление памятью — клиенты вашей библиотеки будут вынуждены вызывать ваши функции create_matrix и release_matrix, а если не позвали — утечка.
В общем и целом, вам проще писать эту библиотеку сразу на C.
При этом полезность этой библиотеки будет в разы ниже её плюсового оригинала. Клиенты исходной библиотеки, которые пишут на С++, могут делать всякие прикольные трюки — например, могут предоставить свой тип элемента матрицы, для которого подходящим образом определены операции сложения и умножения. Ваша С-шная поделка потребует от вас просто выставить наружу десяток перегрузок вида сreate_matrix_int32, сreate_matrix_float, сreate_matrix_double, и так далее. И возможности передать вам пользовательский тип так и не появится. Клиенты библиотеки на С++ могут предоставлять частичные специализации операторов — например, для того, чтобы эффективно перемножать матрицы конкретных размеров, используя специфические для конкретной платформы векторные инструкции. Ничего этого сделать с библиотекой, выставленной наружу через С-шный интерфейс, невозможно.


В итоге, интерфейс вашей библиотеки становится бутылочным горлышком. И даже те клиенты, которые в итоге пишут на С++, не могут воспользоваться этим преимуществом — ведь вы уже искалечили библиотеку ради эфемерной цели "использовать её из любого языка".
Ну, и в таких ограничениях, внезапно, весь код этой библиотеки можно прекрасно написать на C#. Точно так же, как и для С++, никакие специфические возможности платформы использовать не получится. А для plain old C struct есть value-типы. И всё будет прекрасно работать. GC никак не помешает — всё управление памятью будет снаружи. Клиент будет передавать в библиотеку пару указателей на функции malloc и free, и всё размещение динамики будет сделано через них.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[12]: Новости C#13. params
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 22.10.24 16:55
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>>>Это для AOT — не поддержки всех платформ.

S>>AOT компилируется для всех платформ. Еще раз формируется С++ код со сборщиком мусора.

S>Нет — под моб. платформы не собирается.

Это как. Тот же Xamarin собирается под IOS/
Ну и здесь под .Net 9+ https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/?tabs=windows%2Cnet9plus#tabpanel_2_net9plus
и солнце б утром не вставало, когда бы не было меня
Re[7]: nativeaot
От: m2user  
Дата: 22.10.24 17:06
Оценка:
S>Ну, и в таких ограничениях, внезапно, весь код этой библиотеки можно прекрасно написать на C#.

Вы имеете в ввиду что-то типа https://github.com/dotnet/samples/blob/main/core/nativeaot/NativeLibrary/Class1.cs ?
Re[7]: Новости C#13. params
От: Shmj Ниоткуда  
Дата: 22.10.24 18:40
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>Попробуйте. Уверен что ничего не получится, когда столкнетесь с практикой.

S>Всё прекрасно получится. Например, MS SQL Server, написанный на C++, прекрасно исполнял дотнетовый код вплоть до недавних версий, где это было выпилено за ненадобностью. Делал он это, разумеется, на всех платформах.

А на моб. платформах он работал? Отож.

S>Встречное предложение — попробовать столкнуться с практикой и привинтить какую-нибудь типовую header-only library на С++ к проекту на более-менее любом языке. Хоть даже и к С.


Делал и не раз, причем не только h-only.

S>Я вам даже подскажу, в чём затруднения, которых вы не видите из-за своей зашоренности:

S>1. Различия в языковых концепциях. Языки программирования настолько различны, что очень немногие конструкции есть сразу во всех. В большинстве случаев вы не сможете воспользоваться ничем, кроме "голых функций". Плюсовые шаблоны и операторы невозможно употребить ни в одном языке, кроме С++ — и то, при условии, что вы собираете весь код одним и тем же компилятором.
S>2. Различия в реализации похожих и даже одинаковых концепций. Наследование в Java, Javascript, и C++ реализовано настолько по-разному, что вы не сможете использовать классы, написанные на любом из этих языков, в других языках. Исключения — то же самое: не сможете вы поймать исключение, выброшенное из C++-кода, ни в каком другом языке. Даже если в этом языке тоже есть исключения. Управление памятью — та же беда. Код, написанный для JVM, будет использовать один и тот же менеджер памяти. Код, написанный на С++, использовать из С нужно с великой осторожностью — иначе вы получите трудноуловимые утечки, и вообще undefined behavior на каждом первом шагу.

Нужно только делать extern "C". Но это будет 100% собираться под все 6 платформ и работать ВЕЗДЕ. На C# так невозможно в принципе.
Re[13]: Новости C#13. params
От: Shmj Ниоткуда  
Дата: 22.10.24 18:43
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Это как. Тот же Xamarin собирается под IOS/


А позволяет ли он использовать собранные библиотеки из других языков?

S>Ну и здесь под .Net 9+ https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/?tabs=windows%2Cnet9plus#tabpanel_2_net9plus


А ограничения то смотрели? Limitations of Native AOT deployment — No C++/CLI.

Поймите — если бы это было возможно — уже были бы библиотеки. А так вы просто верите что проблем не возникнет, стоит только захотеть.

На самом деле крутые перцы из reddit смотрят сразу на суть — на базу, на фундамент. И языки выбирают по этому признаку. Вы можете 10 лет писать по найму и даже не задумываться об этом — не будет широты охвата — а у них это первый вопрос. Они все сидят с макбуками и iPhone и первый вопрос будет — насколько ЯП позволяет интегрироваться в эту экосистему + во все другие экосистемы.
Re[8]: nativeaot
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 22.10.24 18:49
Оценка:
Здравствуйте, m2user, Вы писали:

S>>Ну, и в таких ограничениях, внезапно, весь код этой библиотеки можно прекрасно написать на C#.


M>Вы имеете в ввиду что-то типа https://github.com/dotnet/samples/blob/main/core/nativeaot/NativeLibrary/Class1.cs ?

Да есть варианты работы с памятью
https://github.com/dotnet/runtime/pull/100623/files#diff-6efaa03fe5e58e6efcff52c135ed0d07594bd03a6827cec592900bce0fabe029
и солнце б утром не вставало, когда бы не было меня
Re[8]: nativeaot
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.10.24 01:35
Оценка:
Здравствуйте, m2user, Вы писали:
M>Вы имеете в ввиду что-то типа https://github.com/dotnet/samples/blob/main/core/nativeaot/NativeLibrary/Class1.cs ?
Да, совершенно верно.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Новости C#13. params
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.10.24 01:41
Оценка:
Здравствуйте, Shmj, Вы писали:

S>А на моб. платформах он работал?

Если и не работал, то нерабочесть его была связана вовсе не с дотнетом. А как раз с кодом на C++

S>Делал и не раз, причем не только h-only.

"не только", my ass.

S>>Я вам даже подскажу, в чём затруднения, которых вы не видите из-за своей зашоренности:

S>Нужно только делать extern "C".
Я одного не могу понять — вы стебётесь или реально настолько некомпетентны?

Как по вашему, подойдёт вот такой библиотечный код для работы из любого языка?
extern "C" Matrix<int> * create_matrix_int(int n, int m)
{
   return new Matrix<int>(n, m);
}
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: Новости C#13. params
От: Shmj Ниоткуда  
Дата: 23.10.24 04:47
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>А на моб. платформах он работал?

S>Если и не работал, то нерабочесть его была связана вовсе не с дотнетом. А как раз с кодом на C++

Смотря какой C++-код генерит — в этом вопрос.

Если на работало — значит C++ -код был завязан на POSIX или еще что, чего в моб. не было.

S>>Делал и не раз, причем не только h-only.

S>"не только", my ass.

Для доступа из других языков обязательно делать C-обертку. Но на .Net вы и этим не сможете проблему решить.

S>>>Я вам даже подскажу, в чём затруднения, которых вы не видите из-за своей зашоренности:

S>>Нужно только делать extern "C".
S>Я одного не могу понять — вы стебётесь или реально настолько некомпетентны?

S>Как по вашему, подойдёт вот такой библиотечный код для работы из любого языка?

S>
S>extern "C" Matrix<int> * create_matrix_int(int n, int m)
S>{
S>   return new Matrix<int>(n, m);
S>}
S>


В extern "C" нужно привести все к формату простого C. Шаблоны на верх не выдавать, исключения перевести в коды ошибок, вместо объектов — либо указатель голый либо даже хандлер.

Т.е. внешний API должен быть упрощенном виде и этого достаточно. А уже внутренне можете все фишки C++ -а юзать.

На C# вы этого под все 6 платформ сделать не сможете. Возможно что через платное решение за штуку баксов от www.remobjects.com — но это совсем другая история, я бы не рекомендовал.
Отредактировано 23.10.2024 4:53 Shmj . Предыдущая версия .
Re[10]: Новости C#13. params
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.10.24 06:47
Оценка: 8 (1)
Здравствуйте, Shmj, Вы писали:
S>Смотря какой C++-код генерит — в этом вопрос.
Вот именно.
S>Если на работало — значит C++ -код был завязан на POSIX или еще что, чего в моб. не было.
Вот именно.
S>Для доступа из других языков обязательно делать C-обертку.\
Перед обёрткой нужно провести кастрацию библиотеки.
S>Но на .Net вы и этим не сможете проблему решить.
И с чего бы это вдруг?


S>В extern "C" нужно привести все к формату простого C. Шаблоны на верх не выдавать, исключения перевести в коды ошибок, вместо объектов — либо указатель голый либо даже хандлер.

Отож. "Привести к формату" можно только то, что приводится к формату. Ну не сможете вы STL привести к формату простого C.
S>Т.е. внешний API должен быть упрощенном виде и этого достаточно. А уже внутренне можете все фишки C++ -а юзать.
Нет, не можете. В обратную сторону всё работает точно так же — если у вас есть коллбэк, то он тоже ограничен. Я же вам пишу, а вы не читаете — попробуйте передать в С-шный qsort джавовскую коллекцию и кастомный компаратор, написанный на джаве. Более того — вы не можете передавать в qsort коллбэк, написанный на полном С++. Не получится выбросить исключение из коллбэка и поймать его в своём коде, вызывающем qsort. Упс, то есть в коде библиотеки вы не можете использовать "все фишки С++" — придётся ограничиться C-совместимыми. Про управление памятью я вам уже писал — либо выставлять наружу свои аналоги malloc/free, либо, наоборот, получать их снаружи.
Не получится вернуть "смарт поинтер", который гарантированно уничтожит объект после выхода из области видимости. Всё. Ничего от вашего С++ не осталось. Борьба с С++ за совместимость с C настолько малоприятна, что проще с самого начала писать библиотеку на С.

S>На C# вы этого под все 6 платформ сделать не сможете.

Да почему не смогу-то? Упорствуете в заблуждениях.
Точно так же смогу, написав C-шную обёртку. С теми же жертвами. Да, в конце концов, неважно, что будет за обёртка — если уж мы взялись оборачивать обёртками, кто мне запретит выставить мою "библиотеку" в виде REST-сервиса? Запустил себе приложение — и вызывай его через HTTP. А уж возможность вызывать REST есть даже на большем количестве платформ и языков, чем умеющих импортировать C-шные динамические и статические либы.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[14]: Новости C#13. params
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 23.10.24 07:50
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>>Это как. Тот же Xamarin собирается под IOS/


S>А позволяет ли он использовать собранные библиотеки из других языков?


S>>Ну и здесь под .Net 9+ https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/?tabs=windows%2Cnet9plus#tabpanel_2_net9plus


S>А ограничения то смотрели? Limitations of Native AOT deployment — No C++/CLI.

C++/CLI это фишка древняя и малоподдерживаемая https://learn.microsoft.com/ru-ru/dotnet/core/porting/cpp-cli

Ограничения для C++/CLI .NET Core
Существуют некоторые важные ограничения для проектов C++/CLI и .NET по сравнению с платформа .NET Framework:

Компиляция проекта C++/CLI в исполняемый файл не поддерживается. Необходимо скомпилировать библиотеку DLL.
Поддержка C++/CLI для .NET доступна только для Windows.
Проекты C++/CLI не могут использовать .NET Standard.
Проекты C++/CLI не поддерживают более новый формат файла проекта в стиле ПАКЕТА SDK. Вместо этого проекты C++/CLI используют тот же формат файла .vcxproj , что и другие проекты Visual Studio C++.
Проекты C++/CLI не могут нацелиться на несколько платформ .NET. Если необходимо создать проект C++/CLI для .NET и платформа .NET Framework, используйте отдельные файлы проекта.
.NET не поддерживает -clr:pure или -clr:safe компиляцию, только более -clr:netcore новый параметр (который эквивалентен -clr платформа .NET Framework).


И сколько таких проектов C++/CLI?

S>Поймите — если бы это было возможно — уже были бы библиотеки. А так вы просто верите что проблем не возникнет, стоит только захотеть.


S>На самом деле крутые перцы из reddit смотрят сразу на суть — на базу, на фундамент. И языки выбирают по этому признаку. Вы можете 10 лет писать по найму и даже не задумываться об этом — не будет широты охвата — а у них это первый вопрос. Они все сидят с макбуками и iPhone и первый вопрос будет — насколько ЯП позволяет интегрироваться в эту экосистему + во все другие экосистемы.


Библиотеки нужны прежде всего для доступа к коду .Net из разных языков.
Есть решения Написание пользовательского хост-приложения .NET для управления средой выполнения .NET из машинного кода

Их используют, но ты библиотек этих не найдешь. Это как "Видишь суслика — нет. А он есть!"
Это же касается и использование нативных библиотек. Сам натив нужен для приложений ускорения и обфускации прежде всего.
А создавать нативные кроссплатформенные библиотеки это уже некий приятный бонус.
и солнце б утром не вставало, когда бы не было меня
Re[11]: Новости C#13. params
От: Shmj Ниоткуда  
Дата: 23.10.24 08:01
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>Но на .Net вы и этим не сможете проблему решить.

S>И с чего бы это вдруг?

Потому что нужна реализация сборщика мусора и прочих фишек .net под все 6 платформ — а этого просто нет.

S>>В extern "C" нужно привести все к формату простого C. Шаблоны на верх не выдавать, исключения перевести в коды ошибок, вместо объектов — либо указатель голый либо даже хандлер.

S>Отож. "Привести к формату" можно только то, что приводится к формату. Ну не сможете вы STL привести к формату простого C.

Внутри библиотеки пользуете все фишки C++ -а. А наружу делаете простые упрощенные обертки в C-стиле. Никаких проблем с этим нет. Библиотеку изменять не нужно.

S>>Т.е. внешний API должен быть упрощенном виде и этого достаточно. А уже внутренне можете все фишки C++ -а юзать.

S> Нет, не можете. В обратную сторону всё работает точно так же — если у вас есть коллбэк, то он тоже ограничен.

Ссылка на функцию стандартизирована.

S>>На C# вы этого под все 6 платформ сделать не сможете.

S>Да почему не смогу-то? Упорствуете в заблуждениях.
S>Точно так же смогу, написав C-шную обёртку. С теми же жертвами. Да, в конце концов, неважно, что будет за обёртка — если уж мы взялись оборачивать обёртками, кто мне запретит выставить мою "библиотеку" в виде REST-сервиса? Запустил себе приложение — и вызывай его через HTTP. А уж возможность вызывать REST есть даже на большем количестве платформ и языков, чем умеющих импортировать C-шные динамические и статические либы.

Выше написал — нет сборщика мусора под все платформы и возможности собрать стандартную .net-библиотеку под все платформы. А C++ — все можно. Даже важные сторонние библиотеки все собираются под все платформы — тот же boost.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.