NekoVM

NekoVM
Oryginalni autorzy Nicolas Cannasse
Deweloperzy
Pierwsze wydanie 2005 ; 18 lat temu ( 2005 )
Wersja stabilna
2.3.0 / 24 października 2019 ; 3 lata temu ( 2019-10-24 )
Magazyn
Napisane w C
System operacyjny Windows , macOS , Linux
Platforma IA-32 , x86-64
Licencja MIT
Strona internetowa nekovm .org /doc /vm /

NekoVM to maszyna wirtualna opracowana przez Nicolasa Cannasse w ramach prac badawczo-rozwojowych (R&D) dwóch niezależnych twórców gier wideo w Bordeaux we Francji : najpierw w Motion Twin , a następnie w Shiro Games . Językiem ojczystym NekoVM jest kod bajtowy dla dynamicznego języka programowania wysokiego poziomu zwany Neko. To parowanie pozwala na bezpośrednie użycie Neko jako wbudowanego języka skryptowego lub kierowanie NekoVM poprzez kompilację innego języka (takiego jak Haxe ) do kodu bajtowego NekoVM.

Pojęcie

Neko ma kompilator i maszynę wirtualną (VM) z wyrzucaniem elementów bezużytecznych . Kompilator konwertuje źródłowy plik .neko na plik kodu bajtowego .n, który można wykonać za pomocą maszyny wirtualnej. Ponieważ Neko jest pisany dynamicznie bez ustalonych klas, programista musi tylko znaleźć odpowiednie mapowanie środowiska uruchomieniowego (w przeciwieństwie do mapowania typu), aby kod działał poprawnie. Jak podaje Neko FAQ : „... łatwiej jest napisać nowy lub istniejący język na NekoVM niż na CLR / JVM , ponieważ nie musisz mieć do czynienia z systemem typu wysokiego poziomu. Oznacza to również, że języki mogą łatwiej ze sobą współpracować, ponieważ muszą dzielić tylko te same struktury danych, a nie zawsze te same typy”.

Neko wymaga kompilacji przed wykonaniem, podobnie jak inne języki skryptowe, takie jak Apache Groovy . Ponieważ Neko nie musi być interpretowane w czasie wykonywania, działa szybciej. Język Haxe może kompilować się między innymi do kodu Neko.

Maszyna wirtualna

Maszyna wirtualna Neko służy do wykonywania pliku kodu bajtowego Neko, maszyna wirtualna ma również opcję konwersji pliku kodu bajtowego do pliku wykonywalnego (wyjście zmienia się w zależności od docelowego systemu operacyjnego).

Język

Neko
NekoVM logo
Paradygmat Zorientowany obiektowo , ustrukturyzowany , oparty na prototypach , skrypty
Zaprojektowany przez Nicolas Cannasse
Deweloper
Po raz pierwszy pojawiły się 2005 ; 18 lat temu ( 2005 )
Wersja stabilna
2.3.0 / 24 października 2019 ; 3 lata temu ( 2019-10-24 )
Dyscyplina pisania Dynamiczny
Język implementacji OCaml
Platforma NekoVM
system operacyjny Windows , macOS , Linux
Licencja MIT
Rozszerzenia nazw plików .neko .n
Strona internetowa nekovm .org /specs /składnia /

Witaj świecie

 $print  (  "Witaj świecie!"  ); 

Konwersje typów

 
 
  $int  (  "67,87"  );  // Konwertuje napis "67.87" na liczbę całkowitą 67  $float  (  12345  );  // Konwertuje liczbę całkowitą 12345 na liczbę zmiennoprzecinkową 12345.0000  $string  (  $array  (  1  ,  2  ,  3  ));  // Konwertuje tablicę [1,2,3] na ciąg znaków „[1,2,3]” 

Obiekty

   
   
   
   
  o  =  $nowy  (  null  );  // nowy pusty obiekt  o2  =  $new  (  o  );  // tworzy kopię o  o2  =  $new  (  33  );  // jeśli parametr nie jest obiektem, wyrzuć wyjątek  o  .  pole  =  wartość  ;  //ustawia pole na wartość  o  .  pole  ;  // zwraca wartość pola obiektu o 

Metody

   
	

  
  
   
	

  foo  =  funkcja  ()  {  $print  (  this  .  x  );  }  o  =  $nowy  (  null  );  o  .  x  =  3  ;  o  .  słupek  =  funkcja  ()  {  foo  ();  };  o  .  słupek  ();  // drukuje 3 

Zakres funkcji

   
   
	

  
  zmienna  x  =  3  ;  f  =  funkcja  ()  {  $print  (  x  );  }  x  =  4  ;  fa  ();  //drukuj 3 

Prototypy

   
   
  


   
  

  var  proto  =  $nowy  (  null  );  proto  .  foo  =  function  ()  {  $print  (  this  .  msg  )  }  var  o  =  $new  (  null  );  o  .  msg  =  "cześć"  ;  $objsetproto  (  o  ,  proto  );  o  .  foo  ();  // drukuj "cześć" 

 
  $objsetproto  (  o  ,  null  );  // usuń proto  o  .  foo  ();  // wyjątek 

Funkcjonalność internetowa

Neko zawiera moduły serwera Apache mod_neko dla języka Neko i mod_tora do hostowania serwera aplikacji NekoVM tora . W związku z tym może przetwarzać dane wprowadzane przez użytkownika za pomocą żądań GET i POST:

  0
 get_params  =  $loader  .  loadprim  (  "mod_neko@get_params"  ,  );  $print  (  "PARAMY = "  +  get_params  ()); 

Zobacz też

Linki zewnętrzne