Информация об изменениях

Сообщение Re[42]: MS забило на дотнет. Питону - да, сишарпу - нет? от 01.09.2021 9:28

Изменено 01.09.2021 10:28 Serginio1

Re[42]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, vdimas, Вы писали:

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


S>>Ну сейчас сделано как итератор с MoveNext.


V>Сейчас при создании экземпляра асинхронного автомата обязательно создаётся делегат, а это дорого.

V>Теперь есть возможность не создавать этот делегат.
Ну как здесь пишут https://habr.com/ru/post/260217/ возвращает он интерфейс IAsyncStateMachine с двумя методами
https://docs.microsoft.com/ru-ru/dotnet/api/system.runtime.compilerservices.iasyncstatemachine?view=net-5.0

MoveNext()
Перемещает конечный автомат в его следующее состояние.
SetStateMachine(IAsyncStateMachine)
Настраивает конечный автомат с размещенной в куче репликой.


Состояние то это класс. Кроме адреса функции нужно еще и ссылку на класс.
Хотя в Delphi для обмана Win Api и COM генерили методы заглушки где в регистр записывался this для Api, а для COM корректировалось смещение, так как интерфейсов много и для каждого интерфейса генерировалась своя тлб со ссылкой на интерфейс просто поле со смещением от реального this
В .Net так нельзя но сделать
public struct Merhod<T,Y>
{
public  T obj;
public  Func<Y> func
}


Пусть обзовут не делегатом и вызывают напрямую как метод объекта
Re[42]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, vdimas, Вы писали:

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


S>>Ну сейчас сделано как итератор с MoveNext.


V>Сейчас при создании экземпляра асинхронного автомата обязательно создаётся делегат, а это дорого.

V>Теперь есть возможность не создавать этот делегат.
Ну как здесь пишут https://habr.com/ru/post/260217/ возвращает он интерфейс IAsyncStateMachine с двумя методами
https://docs.microsoft.com/ru-ru/dotnet/api/system.runtime.compilerservices.iasyncstatemachine?view=net-5.0

MoveNext()
Перемещает конечный автомат в его следующее состояние.
SetStateMachine(IAsyncStateMachine)
Настраивает конечный автомат с размещенной в куче репликой.


Состояние то это класс. Кроме адреса функции нужно еще и ссылку на класс.
Хотя в Delphi для обмана Win Api и COM генерили методы заглушки где в регистр записывался this для Api, а для COM корректировалось смещение, так как интерфейсов много и для каждого интерфейса генерировалась своя тлб со ссылкой на интерфейс просто поле со смещением от реального this
В .Net так нельзя но сделать
public struct Merhod<T,Y>
{
public  T obj;
public  Func<Y> func
}


Пусть обзовут не делегатом и вызывают напрямую как метод объекта

Кстати можно посмотреть на селекторы
https://docs.microsoft.com/ru-ru/xamarin/ios/internals/architecture

Во-первых, необходимо предоставить способ доступа Objective-C к C#, который выполняется с помощью селекторов. Селектор — это сообщение, которое отправляется объекту или классу. Objective-C Это делается с помощью функций objc_msgSend . Дополнительные сведения об использовании селекторов см. в руководстве по средствам Objective-C выбора . Также должен быть способ предоставления управляемого кода Objective-C , который более сложен из-за того факта, что Objective-C нет ничего знать об управляемом коде. Чтобы обойти это, мы используем Registrars . Эти сведения более подробно описаны в следующем разделе.