В этой статье есть несколько проблем. Помогите улучшить ее или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения )
|
Оригинальный автор(ы) | Николя Каннасс |
---|---|
Разработчик(и) | |
Первоначальный выпуск | 2005 (2005) |
Стабильный релиз | 2.3.0 / 24 октября 2019 г. (2019-10-24) |
Репозиторий |
|
Написано в | С |
Операционная система | Windows , MacOS , Linux |
Платформа | IA-32 , x86-64 |
Лицензия | Массачусетский технологический институт |
Веб-сайт | nekovm.org/doc/vm |
NekoVM — это виртуальная машина , разработанная Николя Каннассом в рамках научно-исследовательских и опытно-конструкторских работ (НИОКР) двух независимых разработчиков видеоигр в Бордо , Франция : сначала в Motion Twin , а затем в Shiro Games . Родным языком NekoVM является байт-код для высокоуровневого динамически типизированного языка программирования под названием Neko. Такое сочетание позволяет использовать Neko напрямую как встроенный скриптовый язык или нацеливаться на NekoVM, компилируя другой язык (например, Haxe ) в байт-код NekoVM.
Neko имеет компилятор и виртуальную машину (VM) со сборкой мусора . Компилятор преобразует исходный файл .neko в файл байт-кода .n, который может быть выполнен с помощью VM. Поскольку Neko динамически типизирован без фиксированных классов, разработчику нужно только найти правильное сопоставление времени выполнения (в отличие от сопоставления типов данных ), чтобы код выполнялся правильно. Как говорится в Neko FAQ : "...на NekoVM проще написать новый или существующий язык, чем для CLR / JVM , поскольку вам не нужно иметь дело с высокоуровневой системой типов. Кроме того, это означает, что языки могут взаимодействовать легче, поскольку им нужно только совместно использовать одни и те же структуры данных, а не всегда одни и те же типы". [1]
Neko требует компиляции перед выполнением, как и другие языки сценариев, такие как Apache Groovy . Поскольку Neko не нужно интерпретировать во время выполнения, он выполняется быстрее. Язык Haxe может компилироваться в код Neko, среди других целей.
Виртуальная машина Neko используется для выполнения файла байт-кода Neko, виртуальная машина также имеет возможность преобразовывать файл байт-кода в исполняемый файл (выходные данные различаются в зависимости от целевой операционной системы).
Парадигма | Мультипарадигмальный : объектно-ориентированный , структурированный , основанный на прототипах , скриптовый |
---|---|
Разработано | Николя Каннасс |
Разработчик | |
Впервые появился | 2005 (2005) |
Стабильный релиз | 2.3.0 / 24 октября 2019 г. (2019-10-24) |
Дисциплина печати | Динамичный |
Язык реализации | OCaml |
Платформа | NekoVM |
ОС | Windows , MacOS , Linux |
Лицензия | Массачусетский технологический институт |
Расширения имени файла | .неко .н |
Веб-сайт | nekovm.org/specs/синтаксис |
$print ( "Привет, мир!" );
$ int ( "67.87" ); // Преобразует строку "67.87" в целое число 67 $float ( 12345 ); // Преобразует целое число 12345 в число с плавающей точкой 12345.0000 $ string ( $array ( 1,2,3 )); // Преобразует массив [1,2,3] в строку "[1,2,3 ] "
o = $new ( null ); // новый пустой объект o2 = $new ( o ); // создает копию o o2 = $new ( 33 ); // если параметр не является объектом, выбрасывается исключение o . field = value ; // устанавливает поле в значение o . field ; // возвращает значение "field" объекта o
foo = function () { $print ( this . x ); } o = $new ( null ); o . x = 3 ; o . bar = function () { foo (); }; o . bar (); // печатает 3
var x = 3 ; f = function () { $print ( x ); } x = 4 ; f (); // print 3
var proto = $new ( null ); proto . foo = function () { $print ( this . msg ) } вар о = $новый ( ноль ); о . сообщение = «Привет» ; $objsetproto ( о , прото ); о . Фу (); // печатаем «привет» $ objsetproto ( o , null ); // удалить proto o.foo ( ); // исключение
Neko включает в себя модули сервера Apache mod_neko для языка Neko и mod_tora для хостинга сервера приложений NekoVM tora. Таким образом, он может обрабатывать пользовательский ввод с помощью запросов GET и POST:
get_params = $ loader.loadprim ( " mod_neko @get_params" , 0 ); $print ( "PARAMS=" + get_params ());