LINUX.ORG.RU

[design patterns] обход AST: visitor или виртуальные методы?


0

0

Привет!

Как нынче у компиляторщиков принято писать tree walkers на Java и ей подобных языках: использовать паттерн Visitor или просто делать виртуальные методы eval(), format() и так далее по необходимости? Что есть Right Thing?

Ответ на: комментарий от theos

>>В яве (вроде?) нет формального определения NotNullable<T>

http://robaustin.wikidot.com/annotations-and-notnull

Как они думают делать контейнеры для хранения своего муляжа NotNullable<T>? Или типа «в контейнер будет лежать просто Т, а насчет NotNullable<T> — уж как повезет»?

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от anonymous

визитор — это реализация double dispatch средствами single dispatch, через коллбеки. Оно будет не нужно с нормальными generic методами и нормальным мультидиспатчем. «Визитор может сломаться» и означает, что пытаются запихнуть более многомерную диспетчеризацию в одномерную.

Мультиметоды это классно, но их почти нигде нет. Я не спорю, что визитор это кривой костыль, прикрывающий отсутствие мультиметодов.

Legioner ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

Как они думают делать контейнеры для хранения своего муляжа NotNullable<T>

Очень просто - так же как из любой коллекции легко сделать синхронизируемую,

newList = Collections.synchronizedList(notSynchronisedList)

Так же и для не-хранящего-наллы:

newList = notNullList(anyList)

notNullList пишется за пару минут.

theos ★★★
()
Ответ на: комментарий от LamerOk

не понял. Написать метод проверяющий что ссылка не null очень просто. и зачем их делать несколько непонятно. Или такая аннтоация бы автоматически его вызывала? А статические ворнинги можно выдавать при помощи аннотаций из 6 джавы/

theos ★★★
()
Ответ на: комментарий от LamerOk

> Это не ко мне, это к Влору.

Ты похоже ничего не понял.

З.Ы. уж если бы критиковать мое предложение, то за тормозность исключений.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

Ты, я надеюсь, понимаешь, что сама идея «вызывать функцию» для преобразования указателя к ссылке бредова донельзя?

LamerOk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.