2010-08-16 2 views
3

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

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

ответ

4

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

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

+0

Кроме того, Ruby очень полагается на блоки (блокировки). Большинство контуров Ruby реализованы с использованием закрытий. Также, вероятно, одна из причин плохого имени, которая следует за реалиями Ruby для их плохой производительности. :) –

2

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^