[#62]
Re: GameX - pomysł na zwiększenie produkcji gier
@smith,
post #59
Mam dwa pomysły na interpreter, pierwszy to ten o którym napisałem, przy czym uzyskiwanie adresów funkcji nie stanowi problemu, bo będą one odczytywane z predefiniowanej tablicy adresów funkcji, zaś liczba parametrów rzeczywiście może być zmienna. Żeby to rozwiązać kolejka poleceń do interpretacji mogłaby być w postaci ciągu danych, gdzie wielkość jednego rozkazu może być różna, a nie tablicy z elementami jednakowych rozmiarów. W przypadku gdy jest to ciąg, program będzie wiedział ile miejsca zajmuje każde polecenie (+ ewentualne parametry) i o tyle zwiększał licznik rozkazów. Kwestia adresów skoków byłaby rozwiązana w taki sposób, że jeśli jakieś miejsce w programie miałoby być oznaczone etykietą to kompilator zapamiętywałby to miejsce (np. na stosie bądź innym sposobie przechowywania danych) i później pobierałby ten adres skoku w przypadku napotkania polecenia skoku, końca pętli. Jeśli chodzi o to, że w tym systemie każde polecenie będzie wywoływało funkcję, czyli trzeba będzie zapamiętać rejestry itp. to sądzę, że taki sposób interpretacji programu nie spowoduje odczuwalnego spadku prędkości. Jeśli jednak ktoś zechce żeby było szybciej jest drugi sposób na interpreter:
W drugim (trudniejszym) sposobie kompilator działałby inaczej ponieważ uwzględniałby funkcje inline, tj. budowałby program w taki sposób, że byłby to już program w zasadzie wykonywany przez procesor, pobierałby funkcje typu inline i umieszczał w kodzie. Oczywiście jakieś większe funkcje nie byłyby konwertowane do inline, czyli byłyby wykonywane tak jak w sposobie pierwszym. Tylko, że tu już bliski krok do asemblera więc może nie zapędzajmy się tak daleko.
Co do zmiennych (które są odnośnikami do danych ładowanych z pliku) to należy podejść troszkę inaczej do tego języka aniżeli do zwykłego C. Zmienna typu picture nie będzie wskaźnikiem w zwykłym tego słowa znaczeniu. Raczej pasuje bardziej tu słowo "odnośnik", czyli nazwa której przypisano pewną informacje, tutaj - obrazek. Wszędzie tam gdzie będziemy chcieli zastosować dane zawarte pod tą nazwą będziemy stosowali te zmienne, przy czym dane, których dotyczą, będą tylko do odczytu. Sama zmienna również będzie mogła być modyfikowana tylko przez powołane do tego polecenia, bo jeśli dotyczą one jakichś załadowanych danych, to nie możemy stracić wartości tej zmiennej (czyli odnośnika do danych), dopóki te dane rezydują w pamięci. Co do funkcji, to będą one na pewno mogły zwracać jakąś wartość i pobierać parametry, czy zastosuję przekazywanie parametrów przez wartość, czy referencję to jeszcze nie wiem. Sposób przechowywania zmiennych lokalnych - sądzę, że interpreter powinien robić użytek z rejestrów procesora na ile to możliwe, jeśli się tam nie zmieszczą, to powinien użyć stosu programu, bądź własnego stosu.
Parser to rzecz, nad którą pracowałbym na końcu. Chciałbym zachować przejrzystość języka dlatego nie chciałbym wprowadzać zbyt skomplikowanej składni.
Nie wiem na jakiej zasadzie działa interpreter oraz kompilator AMOSa więc trudno mi powiedzieć czy jest mało, czy dużo punktów wspólnych. AMOS rzeczywiście wydaje się być bliski temu projektowi ze względu na zastosowanie, ale jak w rzeczywistości jest dopiero zobaczymy.
Sporo technicznych aspektów interpretera poruszył Smith (a Asman zadał wcześniej bardzo dobre pytania), projekt tego typu jest naprawdę duży, w zasadzie to należałoby oddzielić dyskusję nt. specyfikacji technicznej od rozmowy nt. funkcji pakietu. Mi nie pozostaje za to nic innego jak zamiary przemienić w czyn i po prostu zabrać się do pracy nad tym pakietem. Mam nadzieję, że praca nad nim sprawi, że będę lepiej pisał projekty, a marzeniem jest by stał się on szeroko stosowanym pakietem do pisania gier na Amigę (choć do tego długa droga). Od czegoś trzeba zacząć, a początek jest najważniejszy, metodą małych kroków opracuję system tworzenia jakiegoś wybranego prostego gatunku gier.
Na koniec tego posta chciałbym przypomnieć, że Asman napisał artykuł do magazynu PPA #6, który już zamówiłem na temat pisania własnej gry dla AmigaOS. Czekam na numer, aż do mnie dotrze i z chęcią przeczytam ten artykuł, do czego namawiam również inne osoby które chciałyby spróbować swoich sił w pisaniu na Amigę. Myślę, że dowiem się z niego czegoś interesującego, może będzie stanowić inspirację podczas pisania pakietu.
Ostatnia modyfikacja: 09.10.2011 18:29:36