Объявить окончательное удовольствие в интерфейсе

Я пишу кооперативный многопоточный движок в Котлине. Я пытаюсь написать интерфейс следующим образом:

interface Processor { var suspendAction: (Continuation<Any>) -> Unit inline suspend fun yield() = suspendCoroutine(suspendAction) suspend fun process(inbox: Inbox) = Unit } 

yield() – это сервис, который я хочу предоставить всем разработчикам этого интерфейса. Поскольку каждый виртуальный сайт вызова представляет собой барьер для встраивания, и поскольку каждая точка входа в suspend fun имеет свои затраты, по соображениям производительности мне нужна эта функция, чтобы быть final , но Котлин не позволяет мне этого. Я нашел обходной способ превращения yield() в расширение fun:

 inline suspend fun Processor.yield() = suspendCoroutine(suspendAction) 

Я хотел бы спросить, используют ли случаи использования, поскольку это может мотивировать дизайнеров языка Kotlin, чтобы позволить final fun в interface .

Обратите внимание, что в отличие от типичных сценариев приостановки ожидания для ввода-вывода здесь yield() встречается в потоке с высокой интенсивностью процессора.

Intereting Posts
Единичный тест на функцию расширения Kotlin на Android SDK Classes Связывание с JMM классами, определенными asm из Kotlin с использованием Gradle Kotlin повторяемые @annotations не работают на jdk-8 Android Data Binding и Kotlin Как я могу разбить String на массив в Kotlin? Как показать голландский месяц с использованием Joda DateTime Доступ к свойствам закрывающего класса почему kotlin использует === сравнить примитивный тип, равный друг другу, если они имеют одинаковое значение Загрузка локальных файлов на Google Диск с помощью приложения Диска и без API Как распределить конфигурацию котла Kotlin по нескольким проектам Gradle? Функция расширения Kotlin доступа к частному полю Java Повторный набор API-вызовов: как убедиться, что после вызова api значение не равно нулю? Есть ли какая-нибудь библиотека для работы с монадами на котлин? Как создать переменные в родительском контексте Разделите раму google-vision на два