LINUX.ORG.RU

Сообщения x-code

 

Посоветуйте дистрибутив

Есть старый ноут Roverbook Partner E418L. На него из новых линуксов ничего не ставится:) То зависает при установке, то ошибка какая-то. Т.е. стоит там Мандрива 2006, но нужно поставить что-нибудь новое, 2011 года.

x-code
()

Динамическое связывание в языках программирования

Интересуюсь информацией о «динамическом связывании» функций в традиционных компилируемых языках (не скриптах). Вот два самых известных подхода:

1. сигналы и слоты в QT Сигнал - внешне - «прототип» функции без реализации. Слот - реальная функция-обработчик. Вызов сигнала преобразуется в вызов специальной qt-шной функции отправки сигнала. Вызов происходит с использованием специальных таблиц метаинформации, генерируемых moc-компилятором.

2. сообщения в ObjectiveC В отличие от QT, отдельных именованных «сингалов» и понятий connect/disconnect как таковых нет; методы классов в ObjC («обработчики сообщений») - это по сути аналог слотов; подобно QT, вызывается функция objc_msgSend(). В отличие от QT, вызов происходит путем сопоставления «селекторов», т.е. не символьных имен функций, а 32-битных чисел, что должно давать увеличение скорости вызовов.

Такие динамические вызовы сами по себе - вещь крайне интересная, особенно если эти две концепции грамотно объединить и реализовать на уровне языка. В обоих случаях есть явная общая часть - прямой вызов функции преобразуется в обращение к некоторой промежуточной функции, которой передается идентификатор вызывамой функции в том или ином виде.

Интересно следующее:

* Какие еще реализации динамических вызовов существуют? В каких языках? Как реализованы? (интересует, опять таки, не интерпретируемые скрипты, в которых возможно что угодно:) )

* В каких случаях динамические вызовы позволяют делать что-то такое, что невозможно сделать с помощью указателей на функции/методы («делегатов»)? простейший пример - добавление методов в класс в рантайме в ObjC.

x-code
()

RSS подписка на новые темы