Loglan'82: Różnice pomiędzy wersjami
(→Wybrane Przykłady) |
(→Bibliografia) |
||
(Nie pokazano 40 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 1: | Linia 1: | ||
+ | Niniejsze repozytorium Loglanu oferuje następujące zasoby: [[DokumentacjaLoglanu |dokumentację]], [[Kompilatory|kompilatory]], [[wybrane przykłady|zestaw programów przykładowych]], [[Badania podstawowe|raporty i publikacje zawierające wyniki badań naukowych]] dzięki, którym mógł powstać Loglan.<br /> | ||
+ | == Dlaczego warto obejrzeć te strony? == | ||
Język programowania obiektowego i rozproszonego ma wiele cech, które czynią z niego narzędzie programowania lepsze od innych: | Język programowania obiektowego i rozproszonego ma wiele cech, które czynią z niego narzędzie programowania lepsze od innych: | ||
* Ma unikalny, tani i bezpieczny system zarządzania obiektami, por. | * Ma unikalny, tani i bezpieczny system zarządzania obiektami, por. | ||
Linia 18: | Linia 20: | ||
::* jeśli chcesz to możesz programować w Loglanie w ramach większych projektów programistycznych obejmujących specyfikowanie struktur danych i algorytmów, implementację specyfikacji czyli programowanie i weryfikację poprawności modułów oprogramowania względem specyfikacji. | ::* jeśli chcesz to możesz programować w Loglanie w ramach większych projektów programistycznych obejmujących specyfikowanie struktur danych i algorytmów, implementację specyfikacji czyli programowanie i weryfikację poprawności modułów oprogramowania względem specyfikacji. | ||
* '''Badaczy''' -- Ponieważ język programowania obiektowego, powstał w wyniku poszukiwania odpowiedzi na kilka problemów: | * '''Badaczy''' -- Ponieważ język programowania obiektowego, powstał w wyniku poszukiwania odpowiedzi na kilka problemów: | ||
− | ::* czy można połączyć dwie metody tworzenia modułów: zagnieżdżanie oraz dziedziczenie? Zanim zezwoliliśmy na zagnieżdżanie i dziedziczenie klas musieliśmy odpowiedzięc na kolejne pytania | + | ::* czy można połączyć dwie metody tworzenia modułów: zagnieżdżanie oraz dziedziczenie? Zanim zezwoliliśmy na zagnieżdżanie i dziedziczenie klas musieliśmy odpowiedzięc na kolejne pytania: |
:::* Jak zapewnić statyczne dowiązanie wystąpienia identyfikatora z wystąpieniem odpowiedniej jego deklaracji? | :::* Jak zapewnić statyczne dowiązanie wystąpienia identyfikatora z wystąpieniem odpowiedniej jego deklaracji? | ||
:::* Jak określić, która klasa jest dziedziczona przez ...? | :::* Jak określić, która klasa jest dziedziczona przez ...? | ||
Linia 26: | Linia 28: | ||
::* Czy można bezpiecznie i efektywnie usuwać obiekty już niepotrzebne? | ::* Czy można bezpiecznie i efektywnie usuwać obiekty już niepotrzebne? | ||
::* Jak zdefiniować semantykę współprogramów w sposób wolny od sprzeczności? | ::* Jak zdefiniować semantykę współprogramów w sposób wolny od sprzeczności? | ||
+ | |||
+ | Nie przekonaliśmy Cię? Nie szkodzi. Pomyśl czy nie chciałbyś by Twój ulubiony język programowania został wyposażony w jedną lub więcej cech o których opowiadamy. Podyskutuj o tym z dostawcą Twojego kompilatora. Może się uda wprowadzić jakieś zmiany? | ||
+ | |||
== [[DokumentacjaLoglanu|→ Dokumentacja]] == | == [[DokumentacjaLoglanu|→ Dokumentacja]] == | ||
+ | Zachęcamy do przeczytania [[Media:Loglan1.pdf | podręcznika Loglanu]], możesz zacząć od [[Media:Loglanmi.pdf |mikropodręcznika]]. Wątpliwości pomoże rozstrzygnąć lektura [[Media:Report82.pdf |Raportu języka]] i/lub [[Media:Userman2W.pdf |podręcznika użytkownika]]. | ||
+ | |||
Przy całym bogactwie narzędzi programotwórczych składnia Loglanu jest zwarta i przejrzysta. [[Media:Quickref.pdf| Obejrzyj zwięzłą prezentację języka Loglan'82]] | Przy całym bogactwie narzędzi programotwórczych składnia Loglanu jest zwarta i przejrzysta. [[Media:Quickref.pdf| Obejrzyj zwięzłą prezentację języka Loglan'82]] | ||
Linia 38: | Linia 45: | ||
Umieszczamy tu kilka [[Wybrane przykłady|wybranych przykładów]] programów napisanych w Loglanie'82 | Umieszczamy tu kilka [[Wybrane przykłady|wybranych przykładów]] programów napisanych w Loglanie'82 | ||
+ | === Proste programy === | ||
+ | Bisekcja | ||
− | Program mnożenia macierzy metodą Winograda | + | Potęgowanie binarne |
+ | |||
+ | Sortowanie bąbelkowe | ||
+ | |||
+ | Sortowanie insertionsort | ||
+ | |||
+ | Iloczyn skalarny | ||
+ | |||
+ | Mnożenie macierzy | ||
+ | |||
+ | |||
+ | Program mnożenia macierzy metodą Winograda. Zobacz dowód. | ||
::[[Media:Winograd.pdf]] | ::[[Media:Winograd.pdf]] | ||
+ | |||
=== Klasy i obiekty === | === Klasy i obiekty === | ||
− | Funkcje i procedury mogą dziedziczyć z klas | + | Funkcje i procedury mogą dziedziczyć z klas. Zobacz jakie to ciekawe. |
− | ::[[Media: | + | ::[[Media:Heapsort.pdf]] |
− | === | + | |
+ | === Współprogramy === | ||
+ | W tym podrozdziale przedstawimy wiele przykładów zastosowania współprogramów (''ang.'' coroutine) poczynając od prostych jak modelowanie układu producent-konsument do coraz bardziej nieoczekiwanych i jakże pożytecznych. | ||
+ | |||
+ | ::[[Media:TOWHANC.pdf]] - program Wieże Hanoi w którym zamiast procedury rekurencyjnej wykorzystuje się współprogramy. Porównaj obie wersje tego programu (nie zapomnij usunąć instrukcje drukowania i zmierz czasy. | ||
::[[Media:MERGE.pdf]] - program i jego omówienie | ::[[Media:MERGE.pdf]] - program i jego omówienie | ||
::[[Media:TREEGEN.pdf]] - program i dowód poprawności | ::[[Media:TREEGEN.pdf]] - program i dowód poprawności | ||
+ | |||
+ | === Moduły procesów i obiekty aktywne === | ||
+ | |||
+ | Moduł '''process''' nie jest zwykłą klasą, Obiekty procesów zachowują się inaczej niż obiekty klas. Obiekty procesów mozna też nazywać ''agentami''. Obiekt procesu powstaje w efekcie obliczenia wartości wyrażenia obiektowego '''new''' MojProces(nr, inne_argumenty). | ||
+ | Zwróćmy uwagę na pierwszy parametr aktualny - jego wartością musi być liczba naturalna < 255. Wartość rożna od zera wskazuje na której maszynie wirtualnej zostanie alokowany nowopowstający obiekt procesu. Wartość= 0 informuje, że obiekt zostanie alokowany na tym samym procesorze. | ||
+ | |||
+ | Obiekt utworzony nie udostępnia niczego - wszystkie jego atrybuty są prywatne, obiekt pozostaje w stanie pasywnym. | ||
+ | |||
+ | Jeśli wykonano instrukcję przypisania <br /> | ||
+ | x:= '''new''' MojProces(nr, inne_argumenty);<br /> | ||
+ | to można taki pasywny obiekt x aktywować wykonując instrukcję resume(x) | ||
+ | |||
+ | Procesor na którym obiekt x jest alokowany, zaczyna uruchamiać instrukcje agenta x współbieznie z innymi agenatami alokowanymi na tym procesorze. | ||
+ | |||
+ | W sumie więc na wieloprocesorowej, sieciowej maszynie wirtualnej Loglanu może pracować wielu agentów w mieszanym trybie obliczeń rozproszonych (w sieci) i obliczeń współbieznych. | ||
+ | |||
+ | Agent może zawiesić swoje wykonywanie i przejść ze stanu Aktywny do stanu Pasywny wykonując polecnie stop. | ||
+ | |||
+ | Komunikacja pomiędzy agentami odbywa się wg protokołu obcego wołania metod (''ang.'' alien call) obmyślonego przez Bolka Ciesielskiego. | ||
+ | |||
+ | ==== Alien call ==== | ||
+ | Obiekty procesów czyli agenci wykonują swoje instrukcje niezależnie od siebie i równocześnie. Do przekazania innemu obiektowi procesu informacji uzywa się obcego wołania metod. | ||
+ | |||
+ | '''Składnia''' (w pewnym uproszczeniu)<br /> | ||
+ | W obiekcie ''y'' wykonywane jest polecenie | ||
+ | |||
+ | call x.metd(args)<br /> | ||
+ | |||
+ | '''Semantyka alien call'''<br /> | ||
+ | Mówiąc obrazowo agent ''y'' zwraca się do agenta ''x'' z prośbą: wykonaj dla mnie twoją metodę ''metd'' z pzekazanymi przeze mnie parametrami aktualnymi ''args''. | ||
+ | |||
+ | Agent ''y'' przechodzi w stan Oczekiwanie. | ||
+ | By agent ''x'' zaczął wykonywać zlecenie musza być spełnione trzy warunki wstępne: | ||
+ | * wartość zmiennej ''x'' musi być różna od '''none''', | ||
+ | * agent ''x'' musi być w stanie Aktywny, | ||
+ | * metoda ''metd'' agenta ''x'' musi być aktualnie udostępniona (agent ''x'' może swoje metody udostępniać lub blokować.) | ||
+ | |||
+ | Instrukcja | ||
+ | enable metd, metd2; zwiększa zbiór metod udostępnionych przez agenta ''x'' o te dwie metody.<br /> | ||
+ | Instrukcja | ||
+ | disable metd, met3; blokuje te metody usuwając je ze zbioru metod udostępnionych przez agenta ''x''.<br /> | ||
+ | |||
+ | Przebieg wykonywania polecenia call x.metd(args)<br /> | ||
+ | Agent ''x'' zapisuje zbiór udostępnionych metod (do późniejszego odtworzenia), | ||
+ | Wszytkie metody agenta ''x'' zostają zablokowane. | ||
+ | Agent ''x'' wykonuje instrukcję procedury, | ||
+ | ... | ||
== [[kompilatory|→ Kompilatory]] == | == [[kompilatory|→ Kompilatory]] == | ||
W tej chwili mamy do zaoferowania [[kompilatory]] na platformę Linuxową i na Windows. | W tej chwili mamy do zaoferowania [[kompilatory]] na platformę Linuxową i na Windows. | ||
+ | |||
+ | Trwają prace nad ujednoliceniem żródeł i przeniesieniem środowiska na platformę wxwidgets. | ||
+ | Konsultuj [[https://sourceforge.net/projects/loglan82/]]. | ||
== [[Badania podstawowe|→ Badania podstawowe]] == | == [[Badania podstawowe|→ Badania podstawowe]] == | ||
− | Zanim powstał nasz język | + | Zanim powstał nasz język i jego kompilator zadaliśmy sobie wiele pytań, przeprowadziliśmy badania dotyczące m.in. następujących pytań. Nie jest nam znany przykład innego języka programowania z tak poważnym ''wsadem'' intelektualnym. Być może z tego powodu Loglan'82 wyprzedza inne języki programowania o dziesiatki lat. Tak! Loglan ma już 33 lata i nie widać by ktoś go miał dogonic w niedalekiej przyszłości. |
− | * Czy możliwe jest programowane, usuwanie niepotrzebnych obiektów - bezpieczne tj. wolne od zjawiska wiszacych referencji i przy tym niedrogie? [[bezpieczna dealokacja obiektów]] | + | * '''P1''': Czy możliwe jest programowane, usuwanie niepotrzebnych obiektów - ''bezpieczne'' tj. wolne od zjawiska wiszacych referencji i przy tym niedrogie? zob.[[bezpieczna dealokacja obiektów]] |
− | * W jaki sposób wyznaczyć klase dziedziczoną, znając jej nazwę? W programie loglanowskim może pojawic sie wiele klas o tej samej nazwie na różnych poziomach drzewa zagnieżdżonych modułów? | + | * '''P2''': W jaki sposób wyznaczyć klase dziedziczoną, znając jej nazwę? W programie loglanowskim może pojawic sie wiele klas o tej samej nazwie na różnych poziomach drzewa zagnieżdżonych modułów? |
− | * Jak zarządzać obiektami współprogramów by uniknąć sprzeczności jakie pojawiły sie w innych językach programowania z coroutinami? | + | * '''P3''': Gdzie szukać deklaracji identyfikatora ''i'', który pojawia się w jakomś miejscu programu? Jest to pytanie o definicję statycznego wiązania wystąpień aplikacyjnych z odpowiednimi deklaracjami identyfikatorów. |
− | * Jak ma przebiegać tworzenie i zarządzanie obiektami procesów? | + | * '''P4''': Czy znany z Algolu'60 i Pascala mechanizm adresowania wielkośći nielokalnych (tzw. mechaniz Display Vector'a Dijkstry można zastosować w językach takich jak Loglan (i teraz Java)? |
− | * Jakie narzędzia wybrać do komunikacji i synchronizacji obliczeń współbieznych? | + | * '''P5''': Jak zarządzać obiektami współprogramów by uniknąć sprzeczności jakie pojawiły sie w innych językach programowania z coroutinami? |
− | * Jak zarządzać obliczeniami rozproszonymi? | + | * '''P6''': Jak ma przebiegać tworzenie i zarządzanie obiektami procesów? |
+ | * '''P7''': Jakie narzędzia wybrać do komunikacji i synchronizacji obliczeń współbieznych? | ||
+ | * '''P8''': Jak zarządzać obliczeniami rozproszonymi? | ||
+ | * '''P9''': Jak opisać obliczenia równoległe (podać ich matematyczny model)? Czy różnią się od obliczeń rozproszonych i od obliczeń współbieżnych? | ||
Wyniki uzyskane podczas prac nad Loglanem okazały się przydatne w analizie języka Java. Mogą znaleźć zastosowanie w innych językach. | Wyniki uzyskane podczas prac nad Loglanem okazały się przydatne w analizie języka Java. Mogą znaleźć zastosowanie w innych językach. | ||
+ | |||
+ | == Bibliografia == | ||
+ | # [AlgoLog] [[Media:Algorithmic_Logic.pdf | {{cytuj książkę |odn=tak| nazwisko = Mirkowska| imię = Grażyna | nazwisko2 = Salwicki | imię2 = Andrzej | tytuł = Algorithmic Logic | wydawca = PWN | miejsce = Warszawa | data = 1987 | strony = 298-348}}]] | ||
+ | # [BKLO] [[Media:4autorow.pdf | {{cytuj pismo | odn=tak | nazwisko = Bartol | imię = W.M. | nazwisko2= Kreczmar | imię2 = A. | nazwisko3 = Litwiniuk | imię3 = A.I.| nazwisko4 = Oktaba|imię4 = H.| tytuł = Semantics and Implementation of Prefixing on many Levels | czasopismo = Springer LNCS vol.148 | rok= 1980 |tom = 148 | strony = 45 - 80 |url=http://lem12.uksw.edu.pl/wiki/Plik:4autorow.pdf}}]] | ||
+ | # [LKKS] [[Media: Bericht8410.pdf | {{cytuj pismo | odn=tak | nazwisko = Langmaack | imię = Hans | nazwisko2= Kreczmar | imię2 = A. | nazwisko3 = Krause | imię3 = M.| nazwisko4 = Salwicki|imię4 = A.| tytuł = Specification and Implementation Problems of Programming Languages Proper for Hierarchical Data Types | czasopismo = Technical Reports of Institut fuer Informatik | rok= 1984 |tom = 10 | strony = 1 - 70 |url=http://lem12.uksw.edu.pl/wiki/Plik:Bericht8410.pdf }}]] | ||
+ | # [KLKW] {{Cytuj książkę| odn=tak|nazwisko=Krause|imię=Manfred| nazwisko2= Langmaack|imię2=Hans| nazwisko3= Kreczmar| imię3=Antoni| nazwisko4= Warpechowski|imię4=Marek| tytuł= Concatenation of program modules, an algebraic approach to the semantic and implementation problems | wydawca=Springer LNCS v. 208 | miejsce = Berlin| rok = 1986|strony = 134 - 156 }} | ||
+ | # [Kreczmar, Cioni 1984] [[Media:Programmed-deallocation-without-Dangling-Reference-I.pdf |{{Cytuj pismo| odn=tak | imię=Antoni | nazwisko=Kreczmar| imię2=Gianna | nazwisko2=Cioni |tytuł=Programmed deallocation without dangling reference |czasopismo=Information Processing Letters |strony=179-187 |rok=1984|url=http://lem12.uksw.edu.pl/images/5/54/Programmed-deallocation-without-Dangling-Reference-I.pdf}}]] | ||
+ | # [Cioni,Kreczmar, Vitale 1989] {{Cytuj książkę|odn=tak | nazwisko = Cioni | imię = Gianna | tytuł = Storage Management | wydawca = Academic Press | miejsce = London | data = 1989 | strony = 341-366 | isbn = 0121746909 | nazwisko2 = Kreczmar | imię2 = Antoni | nazwisko3 = Vitale | imię3 = Ricardo | tytuł tomu = Advanced Programming Methodologies|}} | ||
+ | # [Mirkowska,Salwicki,1980] {{Cytuj pismo | odn=tak | nazwisko=Mirkowska |imię=Grażyna | nazwisko2=Salwicki |imię2=Andrzej |tytuł= On axiomatic definition of MAX model of concurrency | url=http://lem12.uksw.edu.pl/images/f/f0/AxMAX.pdf }} | ||
+ | # [Ciesielski, 1988] Media: ArtBolkaCiesielskiego1988.pdf |{{Cytuj pismo | nazwisko=Ciesielski | url= http://lem12.uksw.edu.pl/wiki/Plik:ArtBolkaCiesielskiego1988.pdf | imię=Bolek | tytuł= Realizacja procesów rozproszonych w Loglanie'82 | | ||
+ | Master's thesis, Instytut Informatyki UW, Warszawa, 1988 }}]]. | ||
+ | # [Warpechowski,2018] {{Cytuj pismo | odn=tak | nazwisko=Warpechowski |imię=Marek | |tytuł= On the determination of extended classes and some other problems in Java programming language | url=http://lem12.uksw.edu.pl/images/1/18/WarpechowskiTezaDokt.pdf }} | ||
+ | # [Salwicki, Muldner 1981] [{{Cytuj pismo | odn=tak | nazwisko=Salwicki | imię= Andrzej | imię2=Tomasz | nazwisko2=Muldner | tytuł=Algorithmic Properties of Concurrent Programs| czasopismo=Logics of Programs | data=1981 | strony=169-197 | wydawca=Springer LNCS 125 |miejsce=Berlin }}] | ||
<big><span style="color: Green">Zobacz pełniejszą, angielską [[Fundamental research|wersję]] tej strony.</span></big> | <big><span style="color: Green">Zobacz pełniejszą, angielską [[Fundamental research|wersję]] tej strony.</span></big> | ||
+ | == [[Historia projektu Loglan|→ Historia projektu Loglan]] == | ||
+ | ===Początki=== | ||
+ | W r. 1977 w Instytucie Maszyn Matematycznych "MERA" powstała definicja języka Loglan i podręcznik programowania. Zespół autoró: A. Salwicki, Tomasz Mueldner, Wiesława M. Bartol i Hanna Oktaba. Dokumenty te przekonały profesora Andrzeja Janickiego o realizowalności pomysłu. | ||
+ | Zjednoczenie MERA zawarło umowę (grant) z Instytutem Informatyki UW, o opracowanie definicji języka i kompilatora na komputery Mera 400.<br /> | ||
+ | |||
+ | Nieco informacji o historii projektu Loglan'82 możesz znaleźć tu | ||
+ | http://lem12.uksw.edu.pl/wiki/Plik:Zaproszenie-do-wspolpracy.pdf | ||
Aktualna wersja na dzień 10:13, 14 cze 2020
Niniejsze repozytorium Loglanu oferuje następujące zasoby: dokumentację, kompilatory, zestaw programów przykładowych, raporty i publikacje zawierające wyniki badań naukowych dzięki, którym mógł powstać Loglan.
Spis treści
Dlaczego warto obejrzeć te strony?
Język programowania obiektowego i rozproszonego ma wiele cech, które czynią z niego narzędzie programowania lepsze od innych:
- Ma unikalny, tani i bezpieczny system zarządzania obiektami, por.
- Oprócz modułów klas (class) oferuje moduły współprogramów (coroutine) i procesów (process). Możesz więc tworzyc nie tylko obiekty klas, ale także obiekty współprogramów i obiekty procesów.
- Loglanowskie maszyny wirtualne mogą się łączyć (przez sieć) w wirtualny, wieloprocesorowy komputer loglanowski by wspólnie wykonywać program(y),
- Obiekty procesów (krótko: wątki) mogą być alokowane na różnych węzłach sieci połączonych maszyn wirtualnych, bądź na tym samym komputerze. Oznacza to, że Loglan ma jeden model obliczeń współbieżnych i rozproszonych (mniej uczenia się).
- Loglan'82 oferuje własny, oryginalny i w pełni obiektowy protokół komunikacji pomiędzy obiektami wątków tzw. obce wołanie metod (ang. alien call).
- Każdy wątek może stworzyć swój system współprogramów i zarządzać nim.
Mamy nadzieję, że informacje zawarte na tych stronach okażą się interesujące dla:
- Ambitnych programistów -- język Loglan'82 oferuje garść konstrukcji i rozwiązań nieznanych w innych językach programowania :
- Jeśli chcesz świadomie zarządzać pamięcią obiektów i uniknąć przy tym niebezpiecznego zjawiska wiszacych referencji to spróbuj instrukcji kill( ),
- Jeśli oprogramowanie, które tworzysz ma służyć obliczeniom współbieżnym, lub rozproszonym lub jakiejś ich kombinacji to wybierz Loglan'82 z jego jednym modelem obejmującym wszystkie te rozdaje obliczeń, zredukuje to znacznie koszty opanowania programowania współbieżnego i/lub rozproszonego,
- Na pewno warto zapoznać sie z protokołem obcego wołania metod wątku A podczas wykonywania instrukcji wątku B, jest to oryginalny wynalazek znany jak dotąd tylko w Loglanie,
- Jeśli masz zamiar zaprogramować obliczenia quasi-współbieżne to zapoznaj się z współprogramami (coroutines)
- Nauczycieli -- Loglan'82 jest dobrym wyborem:
- jeśli chcesz przedstawić wszystkie narzędzia i metody programowania obiektowego unikając przy tym przechodzenia od jednego do kolejnego języka programowania dla zilustrowania kolejnych narzędzi programowania obiektowego.
- jeśli chcesz to możesz programować w Loglanie w ramach większych projektów programistycznych obejmujących specyfikowanie struktur danych i algorytmów, implementację specyfikacji czyli programowanie i weryfikację poprawności modułów oprogramowania względem specyfikacji.
- Badaczy -- Ponieważ język programowania obiektowego, powstał w wyniku poszukiwania odpowiedzi na kilka problemów:
- czy można połączyć dwie metody tworzenia modułów: zagnieżdżanie oraz dziedziczenie? Zanim zezwoliliśmy na zagnieżdżanie i dziedziczenie klas musieliśmy odpowiedzięc na kolejne pytania:
- Jak zapewnić statyczne dowiązanie wystąpienia identyfikatora z wystąpieniem odpowiedniej jego deklaracji?
- Jak określić, która klasa jest dziedziczona przez ...?
- Czy można odziedziczyć klasę A w funkcji f?
- Czy zarządzanie pamięcią obiektów musi doprowadzać do zjawiska wiszących referencji?
- Czy zaśmiecanie pamięci może być skutecznie zwalczane przez jej odśmiecanie tj. garbage collection?
- Czy można bezpiecznie i efektywnie usuwać obiekty już niepotrzebne?
- Jak zdefiniować semantykę współprogramów w sposób wolny od sprzeczności?
Nie przekonaliśmy Cię? Nie szkodzi. Pomyśl czy nie chciałbyś by Twój ulubiony język programowania został wyposażony w jedną lub więcej cech o których opowiadamy. Podyskutuj o tym z dostawcą Twojego kompilatora. Może się uda wprowadzić jakieś zmiany?
→ Dokumentacja
Zachęcamy do przeczytania podręcznika Loglanu, możesz zacząć od mikropodręcznika. Wątpliwości pomoże rozstrzygnąć lektura Raportu języka i/lub podręcznika użytkownika.
Przy całym bogactwie narzędzi programotwórczych składnia Loglanu jest zwarta i przejrzysta. Obejrzyj zwięzłą prezentację języka Loglan'82
Nie jest naszym zadaniem rozstrzygać, która ortografia jest lepsza? ta Loglanu? czy tez ta Javy i C++?
Obejrzyj porównanie cech semantycznych kilku języków programowania obiektowego. Porównaj różne języki programowania obiektowego
Wybrane Przykłady
This page is under construction
Umieszczamy tu kilka wybranych przykładów programów napisanych w Loglanie'82
Proste programy
Bisekcja
Potęgowanie binarne
Sortowanie bąbelkowe
Sortowanie insertionsort
Iloczyn skalarny
Mnożenie macierzy
Program mnożenia macierzy metodą Winograda. Zobacz dowód.
Klasy i obiekty
Funkcje i procedury mogą dziedziczyć z klas. Zobacz jakie to ciekawe.
Współprogramy
W tym podrozdziale przedstawimy wiele przykładów zastosowania współprogramów (ang. coroutine) poczynając od prostych jak modelowanie układu producent-konsument do coraz bardziej nieoczekiwanych i jakże pożytecznych.
- Media:TOWHANC.pdf - program Wieże Hanoi w którym zamiast procedury rekurencyjnej wykorzystuje się współprogramy. Porównaj obie wersje tego programu (nie zapomnij usunąć instrukcje drukowania i zmierz czasy.
- Media:MERGE.pdf - program i jego omówienie
- Media:TREEGEN.pdf - program i dowód poprawności
Moduły procesów i obiekty aktywne
Moduł process nie jest zwykłą klasą, Obiekty procesów zachowują się inaczej niż obiekty klas. Obiekty procesów mozna też nazywać agentami. Obiekt procesu powstaje w efekcie obliczenia wartości wyrażenia obiektowego new MojProces(nr, inne_argumenty). Zwróćmy uwagę na pierwszy parametr aktualny - jego wartością musi być liczba naturalna < 255. Wartość rożna od zera wskazuje na której maszynie wirtualnej zostanie alokowany nowopowstający obiekt procesu. Wartość= 0 informuje, że obiekt zostanie alokowany na tym samym procesorze.
Obiekt utworzony nie udostępnia niczego - wszystkie jego atrybuty są prywatne, obiekt pozostaje w stanie pasywnym.
Jeśli wykonano instrukcję przypisania
x:= new MojProces(nr, inne_argumenty);
to można taki pasywny obiekt x aktywować wykonując instrukcję resume(x)
Procesor na którym obiekt x jest alokowany, zaczyna uruchamiać instrukcje agenta x współbieznie z innymi agenatami alokowanymi na tym procesorze.
W sumie więc na wieloprocesorowej, sieciowej maszynie wirtualnej Loglanu może pracować wielu agentów w mieszanym trybie obliczeń rozproszonych (w sieci) i obliczeń współbieznych.
Agent może zawiesić swoje wykonywanie i przejść ze stanu Aktywny do stanu Pasywny wykonując polecnie stop.
Komunikacja pomiędzy agentami odbywa się wg protokołu obcego wołania metod (ang. alien call) obmyślonego przez Bolka Ciesielskiego.
Alien call
Obiekty procesów czyli agenci wykonują swoje instrukcje niezależnie od siebie i równocześnie. Do przekazania innemu obiektowi procesu informacji uzywa się obcego wołania metod.
Składnia (w pewnym uproszczeniu)
W obiekcie y wykonywane jest polecenie
call x.metd(args)
Semantyka alien call
Mówiąc obrazowo agent y zwraca się do agenta x z prośbą: wykonaj dla mnie twoją metodę metd z pzekazanymi przeze mnie parametrami aktualnymi args.
Agent y przechodzi w stan Oczekiwanie. By agent x zaczął wykonywać zlecenie musza być spełnione trzy warunki wstępne:
- wartość zmiennej x musi być różna od none,
- agent x musi być w stanie Aktywny,
- metoda metd agenta x musi być aktualnie udostępniona (agent x może swoje metody udostępniać lub blokować.)
Instrukcja
enable metd, metd2; zwiększa zbiór metod udostępnionych przez agenta x o te dwie metody.
Instrukcja
disable metd, met3; blokuje te metody usuwając je ze zbioru metod udostępnionych przez agenta x.
Przebieg wykonywania polecenia call x.metd(args)
Agent x zapisuje zbiór udostępnionych metod (do późniejszego odtworzenia),
Wszytkie metody agenta x zostają zablokowane.
Agent x wykonuje instrukcję procedury,
...
→ Kompilatory
W tej chwili mamy do zaoferowania kompilatory na platformę Linuxową i na Windows.
Trwają prace nad ujednoliceniem żródeł i przeniesieniem środowiska na platformę wxwidgets. Konsultuj [[1]].
→ Badania podstawowe
Zanim powstał nasz język i jego kompilator zadaliśmy sobie wiele pytań, przeprowadziliśmy badania dotyczące m.in. następujących pytań. Nie jest nam znany przykład innego języka programowania z tak poważnym wsadem intelektualnym. Być może z tego powodu Loglan'82 wyprzedza inne języki programowania o dziesiatki lat. Tak! Loglan ma już 33 lata i nie widać by ktoś go miał dogonic w niedalekiej przyszłości.
- P1: Czy możliwe jest programowane, usuwanie niepotrzebnych obiektów - bezpieczne tj. wolne od zjawiska wiszacych referencji i przy tym niedrogie? zob.bezpieczna dealokacja obiektów
- P2: W jaki sposób wyznaczyć klase dziedziczoną, znając jej nazwę? W programie loglanowskim może pojawic sie wiele klas o tej samej nazwie na różnych poziomach drzewa zagnieżdżonych modułów?
- P3: Gdzie szukać deklaracji identyfikatora i, który pojawia się w jakomś miejscu programu? Jest to pytanie o definicję statycznego wiązania wystąpień aplikacyjnych z odpowiednimi deklaracjami identyfikatorów.
- P4: Czy znany z Algolu'60 i Pascala mechanizm adresowania wielkośći nielokalnych (tzw. mechaniz Display Vector'a Dijkstry można zastosować w językach takich jak Loglan (i teraz Java)?
- P5: Jak zarządzać obiektami współprogramów by uniknąć sprzeczności jakie pojawiły sie w innych językach programowania z coroutinami?
- P6: Jak ma przebiegać tworzenie i zarządzanie obiektami procesów?
- P7: Jakie narzędzia wybrać do komunikacji i synchronizacji obliczeń współbieznych?
- P8: Jak zarządzać obliczeniami rozproszonymi?
- P9: Jak opisać obliczenia równoległe (podać ich matematyczny model)? Czy różnią się od obliczeń rozproszonych i od obliczeń współbieżnych?
Wyniki uzyskane podczas prac nad Loglanem okazały się przydatne w analizie języka Java. Mogą znaleźć zastosowanie w innych językach.
Bibliografia
- [AlgoLog] Grażyna Mirkowska, Andrzej Salwicki: Algorithmic Logic. Warszawa: PWN, 1987, s. 298-348.
- [BKLO] W.M. Bartol, A. Kreczmar, A.I. Litwiniuk, H. Oktaba. [http://lem12.uksw.edu.pl/wiki/Plik:4autorow.pdf Semantics and Implementation of Prefixing on many Levels]. „Springer LNCS vol.148”, s. 45 - 80, 1980.
- [LKKS] Hans Langmaack, A. Kreczmar, M. Krause, A. Salwicki. [http://lem12.uksw.edu.pl/wiki/Plik:Bericht8410.pdf Specification and Implementation Problems of Programming Languages Proper for Hierarchical Data Types]. „Technical Reports of Institut fuer Informatik”, s. 1 - 70, 1984.
- [KLKW] Manfred Krause, Hans Langmaack, Antoni Kreczmar, Marek Warpechowski: Concatenation of program modules, an algebraic approach to the semantic and implementation problems. Berlin: Springer LNCS v. 208, 1986, s. 134 - 156.
- [Kreczmar, Cioni 1984] Antoni Kreczmar, Gianna Cioni. [http://lem12.uksw.edu.pl/images/5/54/Programmed-deallocation-without-Dangling-Reference-I.pdf Programmed deallocation without dangling reference]. „Information Processing Letters”, s. 179-187, 1984.
- [Cioni,Kreczmar, Vitale 1989] Gianna Cioni, Antoni Kreczmar, Ricardo Vitale: Storage Management. T. Advanced Programming Methodologies. London: Academic Press, 1989, s. 341-366. ISBN 0121746909.
- [Mirkowska,Salwicki,1980] Grażyna Mirkowska, Andrzej Salwicki. On axiomatic definition of MAX model of concurrency. .
- [Ciesielski, 1988] Media: ArtBolkaCiesielskiego1988.pdf |Bolek Ciesielski. Realizacja procesów rozproszonych w Loglanie'82. .]].
- [Warpechowski,2018] Marek Warpechowski. On the determination of extended classes and some other problems in Java programming language. .
- [Salwicki, Muldner 1981] [Andrzej Salwicki, Tomasz Muldner. Algorithmic Properties of Concurrent Programs. „Logics of Programs”, s. 169-197, 1981. Berlin: Springer LNCS 125.]
Zobacz pełniejszą, angielską wersję tej strony.
→ Historia projektu Loglan
Początki
W r. 1977 w Instytucie Maszyn Matematycznych "MERA" powstała definicja języka Loglan i podręcznik programowania. Zespół autoró: A. Salwicki, Tomasz Mueldner, Wiesława M. Bartol i Hanna Oktaba. Dokumenty te przekonały profesora Andrzeja Janickiego o realizowalności pomysłu.
Zjednoczenie MERA zawarło umowę (grant) z Instytutem Informatyki UW, o opracowanie definicji języka i kompilatora na komputery Mera 400.
Nieco informacji o historii projektu Loglan'82 możesz znaleźć tu http://lem12.uksw.edu.pl/wiki/Plik:Zaproszenie-do-wspolpracy.pdf