для тестирования приватного форка Nanojit понадобилось сделать к нему какой-то язык. и я подумал: а почему бы этому языку не быть обероном? на проект пока потрачено три дня, сейчас может скомпилировать и запустить примерно такое:
## Код:
```
MODULE n0test_00;

IMPORT Log;

TYPE
  INT = INTEGER;

  MyRec = RECORD
    a: INT;
    b: REAL;
  END;

VAR
  a0: INT;
  r0: MyRec;

BEGIN
  r0.a := 666_69;
  r0.b := 666.999;
  Log.String("HI"+"!");
  Log.Ln;
  Log.String("r0.a=");
  Log.Int(r0.a);
  Log.Ln;
  Log.String("r0.b=");
  Log.Real(r0.b);
  Log.Ln;
  a0 := 69;
  Log.String("a0=");
  Log.Int(a0);
  Log.Ln;
  Log.Real(66.9);
  Log.Ln;
  Log.String("a0(real)=");
  Log.Real(a0);
  Log.Ln;
  Log.Real(6.69);
  Log.Ln;
  Log.Int(660 + 9);
  (*Log.Int("BOO!");*)
  Log.Ln;
  Log.Int(29AH);
  Log.Ln;
  Log.Int(16%29A);
  Log.Ln();
  Log.Int($29A);
  Log.Ln();
END n0test_00.
```

на самом деле это сильно больше чем может показаться: почти полный компилятор. вся внутренняя механика типов, переменных, процедур (они есть, их только объявлять пока нельзя ;-), модулей — на месте. компилятор многопроходный: source → ast → ast-materialized → lir → native code.

теоретически Nanojit поддерживает x86, x86_64 и arm (32), но практически мне весь этот зоопарк тупо нечем собирать. под шинду и 32-бит x86 пинус, однако, собирается. и даже работает.

это так, early announce. доведение до полноценной реализации (с Kernel, написаном на самом NanoOberon) возможно, но не гарантируется.

исходные тексты компилятора я, может, выложу в итоге. правда, они во-первых, на крестах, а во-вторых, совершенно бесполезны без моего форка Nanojit, который выложен не будет. но чисто посмотреть — почему бы и да.

с Nanojit есть некоторые проблемы (он в целом не особо предназначен для подобного рода издевательств), но тем не менее держится вполне неплохо. дополнительное SSA-представление я не делал как раз затем, чтобы посмотреть, на что способен Nanojit при вот таком тупом использовании «в лоб».

а. если вдруг из текста не очень ясно. NanoOberon не умеет делать бинарники, и уметь не будет. только взлетать с нуля из исходных текстов на обероне. ну, сам компилятор — бинарник, на крестах (потому что Nanojit на крестах), а остальное всё из обероновских исходников на лету. я бы и компилятор на обероне сделал, но тогда взлетать нечем. ;-)