Здравствуйте, Sinclair, Вы писали:
V>>А для моих задач — нет, не дорос еще дотнет.
V>>Под линуха свой интероп, под винду свой, под макос свой.
V>>Реализация банального poll по нескольким хендлам в дотнете безобразная — каждый раз создаётся массив в куче, невозможно ожидать в одном списке сокеты и какие-нить eventfd.
S>Ну так это же выносится в библиотечку размером в несколько килобайт, которая пилится под основные платформы; а всё остальное — platform independent.
Именно так.
Под каждую такую задачку — отдельная мини-борьба с кроссплатформенностью.
Это был просто один из примеров, который дотнет еще не покрыл.
Я не сомневаюсь, что рано или поздно донет покроет последние дыры, как грится, это просто пример того, что "кроссплатформенность" в своей сути — это умение обыгрывать различия платформ на некоем уровне, давая возможность приложению в целевом уровне оставаться одинаковым для большого кол-ва платформ.
И я именно этим занят плотно примерно с 1998-1999-х годов, как и большинство нейтивных разработчиков.
(последние "чисто виндовые" сишники ушли с арены примерно в середине нулевых, их с тех пор слаборазличимое кол-во)
Просто на Си (даже не С++) инструментарий обыгрывания различий удобнее из-за макропроцесора.
"Удобнее" означает меньше трудозатрат в пересчёте на каждое такое обыгрывание.
Плюс, по правилам велосипедостроения, уже очень мало кто изобретает велосипеды, т.к. эти задачи давно и многократно решены, т.е. стоимость "обыгрывания" порой примерно нулевая.
S>Если не хотите выделять каждый раз массив в куче — велком в Span<T>, и можете его хоть в стеке, хоть в пуле, хоть в куче держать. Делов-то.
Вот здесь на входе три массива:
https://docs.microsoft.com/ru-ru/dotnet/api/system.net.sockets.socket.select?view=net-5.0
И унутре было создание массивов, когда я в последний раз смотрел исходники три года назад, портируя нейтивный наш продукт на .Net Core 2.1 на тот момент.
ОК, сейчас проверю опять.
О да, сейчас до 64 элементов создают через stackalloc:
https://github.com/dotnet/runtime/blob/57bfe474518ab5b7cfe6bf7424a79ce3af9d6657/src/libraries/System.Net.Sockets/src/System/Net/Sockets/SocketPal.Windows.cs#L914
Глядишь, к моей пенсии всем этим можно будет пользоваться...
А какие мы были молодые, когда всё это только начиналось? ))