Вам нужна функция getPropertyType. Смотрите этот пост: Получить список атрибутов объекта в Objective-C
Scala выполняет оптимизацию хвостовой рекурсии во время компиляции, как говорили другие плакаты. То есть хвостовая рекурсивная функция преобразуется компилятором в цикл (вызов метода преобразуется в переход), как можно увидеть из трассировки стека при запуске хвостовой рекурсивной функции.
Попробуйте следующий фрагмент:
def boom(n: Int): Nothing = if(n<=0) throw new Exception else boom(n-1)
boom(10)
и проверьте трассировку стека. Он покажет только один вызов функциональной стрелы - поэтому скомпилированный байт-код не является рекурсивным.
Существует предложение реализовать хвостовые вызовы на уровне JVM - что, на мой взгляд, было бы неплохо, поскольку тогда JVM могла бы выполнять оптимизацию времени выполнения, а не просто оптимизацию времени компиляции кода - и, возможно, может означать более гибкую хвостовую рекурсию. По сути, вызов хвостового вызова
будет вести себя точно так же, как обычный метод invoke
, но сбросит стек вызывающего, когда это будет безопасно - в спецификации JVM указано, что кадры стека должны быть сохраняется, поэтому JIT необходимо провести некоторый статический анализ кода, чтобы выяснить, не будут ли кадры стека никогда не использоваться.
Текущее состояние - proto 80% . Я не думаю, что это будет сделано вовремя для Java 7 ( invokedynamic
имеет больший приоритет, и реализация почти завершена), но Java 8 может увидеть это реализованным.
Текущее состояние - proto 80% . Я не думаю, что это будет сделано вовремя для Java 7 ( invokedynamic
имеет больший приоритет, и реализация почти завершена), но Java 8 может увидеть это реализованным.
Текущее состояние - proto 80% . Я не думаю, что это будет сделано вовремя для Java 7 ( invokedynamic
имеет больший приоритет, и реализация почти завершена), но Java 8 может увидеть это реализованным.
Scala 2.7.x поддерживает оптимизацию хвостового вызова для саморекурсии (функция, вызывающая сама себя) конечных методов и локальных функций.
Scala 2.8 может также поставляться с поддержкой библиотеки для трамплина, который представляет собой метод оптимизации взаимно рекурсивных функций.
Большой объем информации о состоянии рекурсии Scala можно найти в блоге Рича Догерти .
Only in very simple cases where the function is self-recursive.
Proof of tail recursion ability.
It looks like Scala 2.8 might be improving tail-recursion recognition, though.