Какие существующие языковые функции сложнее всего реализовать и почему? - PullRequest
3 голосов
/ 16 августа 2010

Глядя на некоторые языковые функции, я иногда задаюсь вопросом, как же кто-то может реализовать такую ​​функцию.Итак, мой вопрос: какие из многочисленных существующих языковых функций труднее всего реализовать ?Объяснение, почему это так, очень приветствуется (может быть, даже требуется?).

Для поддержания порядка, пожалуйста, только одна функция на пост.

Ответы [ 2 ]

4 голосов
/ 16 августа 2010

MHMH - разве это не спрашивалось раньше?

Эффективная обработка закрытия.Поскольку замыкания используются в Lisp и Smalltalk (там они называются «Block») MUCH чаще, чем почти в любом другом языке программирования, реализация должна быть очень быстрой.Таким образом, распределение стека - это то, что мы хотим для скорости.Но, поскольку «настоящие» замыкания могут пережить свой определяющий фрейм стека методов, необходимо позаботиться о том, чтобы вывести их из стека, если это необходимо.Замыкания полезны везде: обратные вызовы, протоколы перечисления / сбора, длинные скачки, очереди рабочих действий, протоколы наблюдателей, отложенная оценка (фьючерсы и ленивые) и многое другое.Кстати: JavaScript также поддерживает замыкания!

2 голосов
/ 16 августа 2010

Даже самые странные и сложные языковые функции, такие как шаблоны C ++, на самом деле относительно просты в реализации. Что действительно сложно, так это эффективно реализовать эти функции.

Для меня самой сложной особенностью было карри на ML-подобных языках. Тривиально для специальной реализации, довольно сложно, если вы хотите, чтобы она была эффективной на стандартном оборудовании. Подробности смотрите в любой достойной реализации ML.

...