Я разрабатываю язык и виртуальную машину. Язык основан на классах, динамически типизирован и имеет статическую область видимости.
Примерный класс выглядит так:
class Foo
{
var bar
{
function get { return bar; }
function set(value) { bar = value; }
}
function f1() {...}
function f2() {...}
}
Переменные экземпляра, объявленные внутри класса, защищены, и к ним могут обращаться функции установки/получения. Функции, объявленные внутри класса, являются общедоступными.
Во время выполнения переменные экземпляра могут храниться в массиве, поэтому в этом примере bar будет храниться в индексе 0 этого массива, и компилятор будет генерировать правильную инструкцию LOAD 0 в своей функции-получателе.
А как насчет других функций? Использование массива для хранения функций, безусловно, приведет к более быстрому доступу во время выполнения, чем использование хэш-таблицы, но мне интересно, какие могут быть недостатки. Я имею в виду, что если я захочу поддерживать возможность добавления функций в класс во время выполнения? Как насчет переопределения?
Каковы преимущества использования хеш-таблицы для хранения методов вместо обычного массива?
foo
,bar
,baz
, то соответствует лиobj.bar
где-то еще в кодеLOAD 0
илиLOAD 1
? - person   schedule 19.01.2015