В настоящее время я разрабатываю динамически типизированный язык.Быстрый поиск атрибутов в динамически типизированном языке?
Одной из основных проблем, с которыми я столкнулся во время разработки, является выполнение быстрых поисков символов времени выполнения.
Для общих, бесплатных глобальных и локальных символов я просто индексирую их и позволяю каждой области (глобальной или локальной) хранить массив символов и быстро искать их с помощью индекса. Я очень доволен этим подходом.
Однако для атрибутов в объектах проблема намного сложнее. Я не могу использовать для них одну и ту же схему индексирования, потому что я понятия не имею, к какому объекту я обращаюсь сейчас, поэтому я не знаю, какой индекс использовать!
Вот пример в питоне, который отражает то, что я хочу работать на моем языке:
class A:
def __init__(self):
self.a = 10
self.c = 30
class B:
def __init__(self):
self.c = 20
def test():
if random():
foo = A()
else:
foo = B()
# There could even be an eval here that sets foo
# to something different or removes attribute c from foo.
print foo.c
Кто-нибудь знает какие-то трюки, чтобы сделать взгляд вверх быстро? Я знаю о хэш-картах и деревьях, поэтому мне интересно, есть ли способы сделать это так же эффективно, как и мой другой поиск.
Включает ли ваш язык все другие вещи, которые делают это сложным в целом, например, добавление и удаление атрибутов объекта в течение его жизненного цикла и 'getattr' /' setattr'/'delattr'? – delnan
Да! Я не знаю о методах * attr, но, возможно, будет возможно изменить объект и атрибуты в течение его жизни. – monoceres