Почему ошибки статического типа в этом примере кода сообщаются только во время выполнения Rascal?
Согласно документации Rascal, язык статически типизирован. Однако ошибки типа сообщаются только во время выполнения.
Например, когда я создаю этот модуль, я ожидаю ошибку типа, потому что я присваиваю переменную типа int:
module Example
void example() {
int x = 1.0;
println(x);
}
Когда я импортирую модуль в REPL и, наконец, запускаю функцию:
rascal>import Example;
ok
rascal>example()
|project://Test/src/Example.rsc|(39,7,<4,6>,<4,13>): Expected int, but got real
☞ Advice
2 ответа
Документация опережает план для Rascal. Rascal имеет систему типов, которую можно статически проверять, но средство проверки типов еще не интегрировано.
В настоящее время интерпретатор проверяет типы во время выполнения. Обратите внимание, что сообщения об ошибках, которые он сообщает, содержат только "статические типы". Интерпретатор выполняет одновременно абстрактную интерпретацию и конкретную интерпретацию (запуск) кода. Это позволило нам быстро развить язык, потому что код для интерпретации и проверки типов для каждой конструкции тесно переплетены.
Когда мы вводим этап проверки типов, мы надеемся использовать типы и разрешенные имена, чтобы ускорить интерпретатор, упростить код интерпретатора и, конечно же, быстрее получить ошибки для программиста.
У Rascal есть статическая проверка типов, которая написана на самом Rascal. Он охватывает большую часть языка (в настоящее время единственная неподдерживаемая функция - это параметры ключевых слов). Чтобы использовать его, щелкните правой кнопкой мыши файл Rascal, открытый в Eclipse (с помощью плагина Rascal), выберите "Experimental", затем "Run static checker". Как видно из названия меню, это экспериментальный вариант, поэтому, пожалуйста, сообщите нам, если вы обнаружите проблемы.