Lua-5.3.0-rc4 dla Atari ST.

No i udało się skompilować w PureC 😉 Binarka, gdyby ktoś chciał się pobawić (148KB), tutaj.

lua530rc4

Lua530rc4 jest nawet trochę szybsze od 503 z 2006 roku.

iterator_closure_generator5Interpreter zdaje się działać na miarę możliwości platformy, powyżej ST spotyka iteratory, generatory i domknięcia 😉

f2c

Dla większych serii danych i dużych ilości obliczeń w Lua 5.3.0 różnica GCC vs PureC nie jest już tak duża: jeśli policzymy 30 elementów nieszczęsnego Fibonacciego, 30 razy w pętli, to czas wykonania dla binarki skompilowanej GCC wynosi: 1591x5ms=7,955s a dla PureC 1495x5ms=7,475s. Różnica 6.7%. W 5.2.3 2186x5ms=10,930s. 46% vs 6.7% robi różnicę ;). Dla małych skryptów różnica oczywiście da się we znaki, a 3x większy rozmiar binarki na wolniejszych dyskach da sporą różnicę czasu wykonania.

Niewiarygodne jest to, że da się taki projekt w 2015 skompilować w PureC, który ma 22 lata :]

I jeszcze jeden przykład, tym razem OOP w Lua:

OO_luaJasne, proste i przejrzyste, a możliwości implementacji OOP „po swojemu” ogromne (brak narzuconego modelu obiektowego).

Lua dla Freemint.

luaLua jest szybki, mały, dynamicznie typowany i wypasiony. Jest konsola interaktywna, można skompilować skrypt do bytecodu, są „list comprehensions” i sporo tego, co lubię z Pythona… Co ważniejsze: jak widać powyżej, jest szybko. Powiedziałbym nawet że bardzo szybko. Binarka Lua-5.2.3 dla Atari ST (skompilowana GCC-4.6.4) dla zainteresowanych tutaj. Tym razem niestety na Mist w trybie STEroids jest wolniej niż w Hatari (68020). A co dziwniejsze: w ST Mint uruchomienie bytecodu jest wolniejsze od interpretowanego pliku .lua (w Hatari też), a we Freemint w Aranym jest 2x szybsze (czego należałoby się spodziewać). Zwariować można. Nie zmienia to faktu, że Lua jest najszybszym językiem tego rodzaju, z jakim miałem do czynienia.

Update: Poniżej zrzut ekranu z Lua-5.0.2 (link do webarchives) skompilowanego PureC w 2006 przez Thorstena Butschke:
lua_purecJak widać Lua jest sporo szybszy. Może po prostu GCC kiepsko optymalizuje kod, chociaż nie chce mi się w to wierzyć. Z drugiej strony wersja 5.0.2 skompilowana GCC-4.6 działa tak samo szybko jak 5.2.3 i nie daje mi spokoju, że 16-bitowy retro-kompilator daje szybszy kod… Może to kwestia manipulacji 32-bitowymi typami danych w GCC, a może narzut starej wersji Mintlib/stdlib w ST Mint i/lub libgcc, ciężko stwierdzić. Binarka Lua-5.2.3 skompilowana GCC jest w każdym razie w pełni funkcjonalna, a kompilacja w PureC to taki mój eksperyment. Swoją drogą to bardzo fajny kompilator i IDE. Tutaj jest paczka z plikami projektu Lua-5.0.2 dla PureC, więc warto  powalczyć ;).

Update: Udało mi się w PureC 1.1 skompilować Lua-5.0.3:purec_lua503Binarka (wrzucam tutaj) działa w STMint znacznie szybciej niż kompilacje gcc.
lua503W Vbcc Lua-5.2.3 się kompiluje, ale działa nieprawidłowo (złe parsowanie plików i obsługa konsoli interaktywnej, pewnie dałoby się ogarnąć). AHCC odpada na starcie. Niby aktywnie rozwijany (ostatnia wersja z września 2014), ale nie radzi sobie już na etapie dołączania plików nagłówkowych, a komunikaty są mało pomocne w znalezieniu rozwiązania. Próbuje skompilować wersję 5.2.3 w PureC (2 moduły się jeszcze nie budują i niestety jeden z nich wymaga modyfikacji lub przepisania skomplikowanego makra). Fajnie byłoby też skompilować Tinypy. Ogólnie dobra okazja, żeby sobie odświeżyć ANSI C.