Если есть хорошие идеи или предложения, мы будем рады услышать от вас!
lhk101lhk101@qq.com (ValKmjolnir)
sidi.liang@gmail.com (Sidi)
Введение
Nasal — это язык программирования, синтаксис которого похож на ECMAscript. Он используется в качестве языка сценариев в известном открытом авиационном симуляторе FlightGear. Разработчик этого языка — Andy Ross.
Интерпретатор Nasal был переписан с использованием C++ (-std=c++17) разработчиком ValKmjolnir. Мы выражаем огромную благодарность Andy за создание этого удивительного и лаконичного языка программирования: Andy Ross's nasal interpreter.
Этот проект ранее использовал лицензию MIT (2019/7 ~ 2021/5/4 ~ 2023/5), а с 2023/6 перешёл на лицензию GPL v2.
Почему был переписан интерпретатор Nasal?
Летом 2019 года участники FGPRC жаловались, что отладка в консоли Nasal в Flightgear неудобна. Нужно было потратить время на открытие программного обеспечения и ожидание его загрузки, прежде чем можно было начать отладку. Поэтому я написал новый интерпретатор, чтобы помочь обнаруживать синтаксические ошибки и ошибки времени выполнения.
Я создал лексический анализатор и синтаксический анализатор для Nasal, а также совершенно новый байт-код-виртуальную машину. Этот интерпретатор используется для отладки программ на языке Nasal. Мы обнаружили, что использование этого интерпретатора значительно повышает эффективность обнаружения синтаксических и ошибок времени выполнения.
Вы можете использовать этот язык для написания интересных программ, не связанных с Flightgear, и запускать их с помощью этого интерпретатора. Вы также можете позволить интерпретатору вызывать модули, которые вы написали сами, делая его полезным инструментом в вашем проекте.
Загрузка
В настоящее время доступна предварительная версия (Nightly Build). Предварительная версия интерпретатора для Windows ещё не настроена для соответствующего конвейера. Пожалуйста, проявите терпение или скомпилируйте локально. Мы предоставляем файл Cmake, который можно легко использовать для компиляции в Visual Studio:
Компиляция
Загрузите последний пакет кода и скомпилируйте его. Проект очень компактный и не использует никаких сторонних библиотек. Для компиляции вам понадобятся только компилятор C++ и программа make.
Для платформы Windows (MinGW-w64) убедитесь, что модель потока — «posix thread model», иначе у вас не будет библиотеки потоков.
mingw32-make nasal.exe -j4
Для платформы Windows (Vistual Studio) проект предоставляет файл CMakeLists.txt для создания проекта в Visual Studio.
На платформе Linux / macOS / Unix:
make -j
Вы также можете указать используемый компилятор с помощью одной из следующих команд:
make nasal CXX=... -j
Использование
Если вы пользователь Windows и хотите нормально выводить unicode, вы можете включить кодовую страницу unicode следующим образом:
if (os.platform()=="windows") {
system("chcp 65001");
}
Или используйте std.runtime.windows.set_utf8_output():
use std.runtime;
runtime.windows.set_utf8_output();
Отличия от интерпретатора Andy
Этот интерпретатор использует более строгие проверки синтаксиса, чтобы облегчить отладку. Это строгое требование, иначе отладка будет очень болезненной. ```
Аналогичным образом, встроенный в flightgear интерпретатор nasal также принял подобные меры, поэтому перед использованием переменной необходимо использовать var
для объявления.
В интерпретаторе Andy:
foreach(i; [0, 1, 2, 3])
print(i)
Эта программа может нормально выполняться. Однако на самом деле i
здесь определяется впервые, и var
не используется. Я считаю, что такой дизайн легко запутывает пользователей. Они могут даже не заметить, что i
определяется здесь впервые. Отсутствие использования var
при определении может привести к тому, что программисты будут думать, что i
была определена где-то ещё.
Поэтому в этом интерпретаторе я напрямую использую строгий метод синтаксической проверки, чтобы заставить пользователя обязательно использовать var
для определения новых переменных или итераторов. Если вы забудете добавить это ключевое слово, вы получите следующее:
code: undefined symbol "i"
--> test.nas:1:9
|
1 | foreach(i; [0, 1, 2, 3])
| ^ undefined symbol "i"
code: undefined symbol "i"
--> test.nas:2:11
|
2 | print(i)
| ^ undefined symbol "i"
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )