Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:miw08_ruleruntimel [2008/04/07 21:19]
miw
pl:miw:miw08_ruleruntimel [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== Opis ====== ====== Opis ======
 +__**Projekt zakończony**__
 +
 Andrzej, Jasiński, [[jasiu@tuxpowered.net]] Andrzej, Jasiński, [[jasiu@tuxpowered.net]]
  
Linia 8: Linia 10:
 ====== Spotkania ====== ====== Spotkania ======
  
- +[[pl:miw:miw08_ruleruntimel:spotkania]]
-===== 08.03.04 ===== +
-TODO: +
-  * arch komp, ew. zgodność arch wam z hlvm, jvm +
-  * czy są/były bezp. impl. prologu na JVM +
- +
-     ​.NET +
-     http://​www.dcs.ed.ac.uk/​home/​stg/​Psharp/​ +
-     http://​hodroj.net/​cs/​files/​3/​default.aspx +
-      +
-     JAVA VM +
-     ​http://​www.binnetcorp.com/​OpenCode/​free_prolog.html +
-     ​http://​sourceforge.net/​projects/​prologpluscg ​ (ale chyba to niezupełnie to) +
-     ​http://​alice.unibo.it/​xwiki/​bin/​view/​Tuprolog/​ +
-     Z tym, że są to raczej parsery prolog->​java i dopiero uruchomienie +
- +
-  * możliwość translacji, implementacji WAM na HLVM/JVM +
- +
-translacja kodu Prolog -> Java -> ByteCode jak najbardziej,​ z tego co jest napisane w internecie Prolog -> uruchomienie na JVM już raczej nie (inne języki niż Java podobno ciężko uruchuchomić). Co do HLVM to twórcy piszą na stronie, że ich celem jest umożliwienie uruchamiania na HLVM programów pisanych m.in. w Prolog-u. +
- +
- +
-===== 080318 ===== +
-  * przegląd http://​www.robert-tolksdorf.de/​vmlanguages.html +
-  * listy dyskusyjne hlvm +
- +
-===== 080408 ===== +
-  * zarys sprawozdania,​ na razie w wiki: +
-    * co to jest hlvm, założenia,​ cele +
-    * stan faktyczny na 03.2008 +
-    * czy (i jak?) //​teoretycznie//​ dałoby się uruchomić prolog na hlvm (na podst. ich dokum) +
-    * podejścia do urucham prologu na JVM +
-    * podejścia Prolog->​bytecode... +
-      * jinni, etc+
  
 ====== Projekt ====== ====== Projekt ======
Linia 48: Linia 18:
  
 Co do list HLVM to wyglądają na martwe (o ile dobrze patrze do ostatni wpis jest z 2007 roku) i brak jest informacji odnośnie tworzenia pluginów do HLVM. Co do list HLVM to wyglądają na martwe (o ile dobrze patrze do ostatni wpis jest z 2007 roku) i brak jest informacji odnośnie tworzenia pluginów do HLVM.
 +
  
  
 ====== Sprawozdanie ====== ====== Sprawozdanie ======
-  -Czym jest HLVM, celezałożenia.  +==1. Cel projektu == 
-    HLVM jest(będzie) zestawem narzędzi do tworzenia języków programowania. Głównymi celami autorów HLVM jest zajęcie się aspektami kompilacji, optymalizacji oraz uruchamiania programów napisanych w tworzonym języku. HLVM jest osadzone na wierzchu LLVM (Low Level Virtual Mashine) która zajmuje się generacją kodu, optymalizacją,​ kompilacją JIT itp. HLVM obsługuje języki dynamiczne tj. takie które wymagają kompilacji w locie bądź umożliwiają interpretację. HLVM jest oparty o system wtyczek co zwiększa elastyczność. Zadaniem wtyczki jest przekształcenie kodu źródłowego tworzonego języka do postaci drzewa AST a pozostałymi czynnościami (kompilacja,​ uruchomienie) zajmuje się HLVM. Ponieważ jest wspólne środowisko uruchomieniowe dla wszystkich języków daje to możliwość współdziałania programów napisanych w różnych językach (choć nie ma na to gwarancji). +Celem projektu było zbadanie możliwości użycia maszyn wirtualny do uruchamiania programów napisanych w Prologu. Szczególnie należało przeanalizować możliwości wirtualnej maszyny Javy (JVM) oraz tzw. HLVM (High Level Virtual Machine) oraz LLVM (Low Level Virtual Machine). Należało sprawdzić jakie są możliwosci translacji i uruchomienia kodu Prologa (a dokładniej reprezentacji WAM) na wyżej wymienionych maszynach. 
-  -Stan faktyczny na kwiecień. + 
-W chwili obecnej HLVM wydaje się być martwy – ostatnie wpisy na listach dyskusyjnych oraz ostatnie aktualizacje CVS są z ubiegłego roku. Dokumentacja jest w stanie szczątkowym. Wszystko to powoduje, że HLVM nie jest jeszcze gotowy do użycia. +==2. Sprawozdanie == 
-  -Jak teoretycznie uruchomić prolog na HLVM. +1. WAM (WarrenAbstract Machine) 
-Twórcy HLVM twierdzą, że będzie możliwość uruchamiania programów napisanych w Prologu. Język definiuje się w postaci pliku XML np: +WAM jest abstrakcyjną maszyną wirtualną opracowaną przez Davia H. D. Warrena w 1983r. ​ WAM służy do wykonywania programów napisanych w języku Prolog. Składa się z pamięci oraz zestawu instrukcji. Głównym celem jest umożliwienie łatwiejszej translacji kodu napisanego w Prologu na kod maszynowy. Jest to możliwedzięki temuże reprezentacja WAM jest niższego poziomu niż Prolog, i jest łatwiejsza do interpretacji. 
-http://​hlvm.org/​src/​test/​return0/​helloworld.hlx +Model pamięci WAM jest dość skomplikowany:​  
-W chwili obecnej analizuję możliwość ​uruchamiania Prolog-a na LLVM, prawdopodobnie wymagałoby to napisania ​programu ​w C/C++ (LLVM obsługuje tylko źródła w języku C o C++ oraz niekompletnie Javę). +-sterta (stos globalny): do przechowywania złożonych term 
-  -Prolog można ​uruchamiać na wirtualnej maszynie Javy na dwa sposoby: +-stos lokalny (przechowuje punkty nawrotu i ramki “środowiska” (enviroment frame)) 
-    -Wykonać translację kodu Prolog-a ​do Javy a następnie ​taki kod Javy skompilować i uruchomić (Prolog Cafe: http://​kaminari.istc.kobe-u.ac.jp/​PrologCafe/​) +-trail (wykorszystywany do usuwania zmiennych przy nawrotach) 
-    ​-Dokonać translacji wprost ​do bytecode zrozumiałego dla JVM a następnie ​za pomocą własnych class loaderów załadowanie takiego bytecodu ​uruchomienie go (unika się kodu pośredniego javy+2Możliwości uruchamiania programów Prologa w innych maszynach wirtualnych 
-  ​-Istnieją programy umożliwiające translację (kompilację) kodu Prolog-a ​do bytecode np JINNI +    ​2.1 JVM 
-JINNI posiada napisaną w Javie implementację WAM. Kod źródłowy prolog-kompiluje się w interpreterze JINNI (ucompile(InFiles,​BasicFile,​OutFile))Jako rezultat otrzymuje ​się bytcode który następnie można uruchomić ​przez komendę : java -cp ".;​prolog.zip"​ prolog.kernel.Main <​plik.bp>​ gdzie prolog.zip jest archiwum dostarczonym z JINNI. Istnieje również MINERVA ​(też komercyjna), która ​posiada własną maszynę wirtualną i kompiluje kod prolog-a ​do bytecodu a następnie sama uruchamia w Javie+Prolog można uruchamiać na wirtualnej maszynie Javy na dwa sposoby: ​  
 +      *wykonać translację kodu Prolog-a do Javy a następnie taki kod Javy skompilować i uruchomić (Prolog Cafe: http://​kaminari.istc.kobe-u.ac.jp/​PrologCafe/​) 
 +      *Dokonać translacji wprost do bytecode zrozumiałego dla JVM a następnie za pomocą własnych class loaderów załadowanie takiego bytecodu i uruchomienie go (unika się kodu pośredniego javy) Istnieją programy umożliwiające translację (kompilację) kodu Prolog-a do bytecode np JINNI JINNI posiada napisaną w Javie implementację WAM. Kod źródłowy prolog-a kompiluje się w interpreterze JINNI (ucompile(InFiles,​BasicFile,​OutFile)). Jako rezultat otrzymuje się bytcode który następnie można uruchomić przez komendę : java -cp “.;​prolog.zip” prolog.kernel.Main <​plik.bp>​ gdzie prolog.zip jest archiwum dostarczonym z JINNI. Istnieje również MINERVA (też komercyjna),​ która posiada własną maszynę wirtualną i kompiluje kod prolog-a do bytecodu a następnie sama uruchamia w Javie.  
 +    2.2 HLVM 
 +HLVM jest(będzie) zestawem narzędzi do tworzenia języków programowania. Głównymi celami autorów HLVM jest zajęcie się aspektami kompilacji, optymalizacji oraz uruchamiania programów napisanych w tworzonym języku. HLVM jest osadzone na wierzchu LLVM (Low Level Virtual Mashine) która zajmuje się generacją kodu, optymalizacją,​ kompilacją JIT itp. HLVM obsługuje języki dynamiczne tj. takie które wymagają kompilacji w locie bądź umożliwiają interpretację. HLVM jest oparty o system wtyczek co zwiększa elastyczność. Zadaniem wtyczki jest przekształcenie kodu źródłowego tworzonego języka do postaci drzewa AST a pozostałymi czynnościami (kompilacja,​ uruchomienie) zajmuje się HLVM. Ponieważ jest wspólne środowisko uruchomieniowe dla wszystkich języków daje to możliwość współdziałania programów napisanych w różnych językach (choć nie ma na to gwarancji).  
 +      *Stan faktyczny na kwiecień. 
 +W chwili obecnej HLVM wydaje się być martwy – ostatnie wpisy na listach dyskusyjnych oraz ostatnie aktualizacje CVS są z ubiegłego roku. Dokumentacja jest w stanie szczątkowym. Wszystko to powoduje, że HLVM nie jest jeszcze gotowy do użycia.  
 +      *Jak teoretycznie uruchomić prolog na HLVM.  
 +Twórcy HLVM twierdzą, że będzie możliwość uruchamiania programów napisanych w Prologu. Język definiuje się w postaci pliku XML np: http://​hlvm.org/​src/​test/​return0/​helloworld.hlx ​Ponieważ dokumentacja jest bardzo szczątkowa i nie opisuje praktycznie nic ponad powyższe helloworld trudno jest mówić “jak” można uruchomić prologa w HLVM. 
 +    2.3 LLVM 
 +Z przeczytanej dokumentacji oraz wikipedii (http://​en.wikipedia.org/​wiki/​Low_Level_Virtual_Machine) wynika, że LLVM ma zastosowanie do języków proceduralnych. Stąd odpada ​możliwość napisania ​wprost kompilatora dla Prologa przy użyciu LLVM. Możliwe natomiast wydaje się napisanie iterpretera ​w C/C++ (czyli praktycznie napisanie czegoś na kształt SWI-Prolog) ​następnie dopiero poddanie takiego programu do obróbki w LLVM.  ​Tłumaczenie kodu Prologu na w czyste LLVM wydaje się bardzo kłopotliwe. Pomimo, że Prolog ​rozkłada się na kod WAM który ​można ​łatwiej przekształcać, to korzysta bardzo intensywnie z rejestrów (nawroty, punkty wyboru itp) przez co tłumaczenie do LLVM może być skomplikowane. Być może dałoby się to zrealizować przez dodanie ​do wywołań funkcji dodatkowego parametru z opisem stanu funkcji. Bardziej realne wydaje się zaimplementowanie maszyny WAM przy pomocy LLVM a następnie ​interpretacja kodu WAM przy użyciu tejże maszynyRejestry można zasymulować przez globalne tablice.  
 +  3. Inne uwagi 
 +Można wykonać kompilację programu napisane w Prologu ​do postaci WAM albo tzw MiniAssembly (pseudo-asembler) ​a następnie ​taki kod połączyć z biliboteką dostarczoną przez GNUProlog ​otrzymać program który można uruchamiać bezpośrednio ​(nie trzeba żadnej wirtualnej maszyny). 
 +==3. Wnioski== 
 +Z analizy wynika, ​że uruchamianie kodu Progolga sprowadza się do przetłumaczenia poleceń WAM do postaci zgodnej z daną maszyną wirtualną, ​następnie interpretacja tychże poleceń przez zaimplementowaną ​danym jezyku maszyną WAMBezpośrednia translacja wydaje ​się cięzka (albo wręcz niemożliwa) głównie ze względu ​na skomplikowane opracje na rejestrach i pamięci wykonywane ​przez WAMOpisane maszyny wirtutalne ​(poza HLVM, która ​jest martwa) nadają się do języków proceduralnych takich jak Java czy C++. 
  
 ====== Materiały ====== ====== Materiały ======
Linia 72: Linia 58:
 http://​www.artima.com/​insidejvm/​ed2/​ - książka traktująca o budowie JVM http://​www.artima.com/​insidejvm/​ed2/​ - książka traktująca o budowie JVM
  
 +http://​www.eecs.umich.edu/​gasm/​papers/​wam.html - opis WAM
 +
 +http://​www.gprolog.org/​manual/​html_node/​gprolog008.html
pl/miw/miw08_ruleruntimel.1207595977.txt.gz · ostatnio zmienione: 2019/06/27 15:58 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0