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.
obiekty (aktywne) procesów mają inny scenariusz.
Po pierwsze, ich instrukcje są wykonywane równolegle z instrukcjami innych obiektów aktywnych.
Po drugie, obiekty procesów komunikuje siE ze sobą wg protokołu obcego wołania (ang. alien call)
→ 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.