Loglan'82
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?
Spis treści
→ 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: Czy istnieje różnica pomiędzy obliczeniami współbieznymi a równoległymi i rozproszonymi?
Wyniki uzyskane podczas prac nad Loglanem okazały się przydatne w analizie języka Java. Mogą znaleźć zastosowanie w innych językach.
Zobacz pełniejszą, angielską wersję tej strony.