Tworzę analizator języków ezoterycznych w JavaScript.
Kod: http://webcm.pastebin.pl/9578
Zrobiłem śmietnik w kodzie, więc trzeba by go jeszcze ulepszyć.
Wspólne czy oddzielne metody?
Każdy język ma swoje własne zmienne: memory, cell, loopAt, depth, cursor, last, out... i metody: start(), next() i stop(). Zrobiłem tak, aby móc potem dodać obsługę Whitespace i zwiększyć wydajność kodu BF.
Nie jestem pewny, czy to tak powinno być, gdyż zwiększa to rozmiar pliku .js, a zmiana w strukturze obiektu wymaga dokonania zmian we wszystkich językach (BF, Ook). Łatwiej popełnić błąd podczas zmian. Może lepiej przenieść te własności do globalnego zasięgu (czyli do obiektu window) albo uprościć niektóre zadania w inny sposób? Macie pomysł, jak przepisać kod?
Whitespace
To bardziej skomplikowany język. Operuje się na stosie i kopcu, a do tego dochodzą etykiety (label). Wartości raczej odczytuje się ze stosu, więc nie potrzeba 2 tabelek z pamięcią. Pozostaje tylko pytanie, czy w ogóle dodawać jego obsługę - czy nie powstanie tylko więcej komplikacji. Wtedy jednak wspólne funkcje dla wszystkich języków mogą nie zdać egzaminu, choć na 100% pewny nie jestem (może coś da się wykombinować).
Wydajność
Wydajność interpretatora jest na razie kiepska - skomplikowany kod przycina przeglądarkę na długo i zwiększa użycie pamięci do ogromnych rozmiarów. Mam pomysł, jak rozwiązać problem - setInterval(), który wykona np. 200 akcji co 100 ms. Nie wiem, czy to też rozwiąże problem z użyciem pamięci. Może macie lepsze pomysły?