LINUX.ORG.RU

На что лучше натравливать тайпчекер?

 ,


0

1

На AST или на исходник? Как вообще принято? Я склоняюсь к тому что на исходник, потому-что, если можно проверить по исходнику, то зачем, собственно строить AST — то будет лишний шаг. Или есть какой то смысл сначала построить AST, а уже по нему чекать?

Как ты собираешься работать с исходником не имея AST? Расскажи, например, как ты исключительно по исходнику, определишь какие переменные задекларированны в определенном скоупе, или вообще, обратишься к какому-либо скоупу\переменной\сущности, если у тебя этих сущностей нет - одна большая строка в виде исходного кода?

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

Я так полагаю, что можно вычислить тип переменной в любом окружении по сигнатуре ее объявления, например myVar = new Array  — разве неясен тут тип идентификатора из исходника? Какая разница, в каком окружении она находится?

numbershnumber
() автор топика
Ответ на: комментарий от numbershnumber

myVar = new SomeCustomClass

И SomeCustomClass один в одном файле и дрогой в другом.

И это не говоря уже о более сложных сценариях.

AST тут единственный вариант.

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

И как ты без контекста узнаешь какой класс из какого файла использовать для проверки? В этом как рза вся проблема.

Ну и не говоря о том, что без AST понять где определение переменной, а где - нет, невозможно.

alexru ★★★★
()
Последнее исправление: alexru (всего исправлений: 1)

Из чего следует генерировать код целевой платформы? Из AST или из исходника? Как вообще принято? Я склоняюсь к тому что из исходника, потому-что, если можно сгенерировать из исходника, то зачем, собственно строить AST — то будет лишний шаг. Или есть какой то смысл сначала построить AST, а уже по нему генерировать код целевой платформы?

// Орфография и пунктуация оригинала сохранены в максимально возможной мере

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

Типа, в каких то случаях AST вообще не строится, а все транслируется в низлежащий код, это ты хотел сказать? Ну и что с того?

Если вопрос поставлен таким образом, как в теме, предполагается, что AST будет строится в любом случае, вопрос только в том, как удобней произвести проверку типов

numbershnumber
() автор топика
Ответ на: комментарий от numbershnumber

Ты без AST не имеешь никакого контекста. Как ты определишь что в выражении a.foo(x) и a и foo и x вообще существуют, и какой у них тип, если не имеешь никакой структуры в памяти, кроме сплошного текста?

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

Как ты без AST поймешь, что myVar = new Array это декларация переменной, а не строка в комментарии?

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

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

numbershnumber
() автор топика

Принято проверять типы в AST.

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