Loglan dla innych języków programowania: Różnice pomiędzy wersjami

Z Lem
Skocz do: nawigacji, wyszukiwania
(Bibliografia)
(Łączenie maszyn wirtualnych w wieloprocesorowy wirtualny komputer)
 
(Nie pokazano 38 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
 +
Wiele rozwiązań wynalezionych podczas prac nad Loglanem może okazać się pomocne w innych, "młodszych" językach programowania.
 
== Wyznaczanie bezpośredniej superklasy ==
 
== Wyznaczanie bezpośredniej superklasy ==
 
Nasze doświadczenie uzyskane podczas  pracy nad Loglanem'82 okazało się przydatne w sformułowaniu i rozwiązaniu natępującego zagadnienia występującego w języku Java: ''w jaki sposób należy wyznaczać bezpośrednią superklasę danej klasy?''
 
Nasze doświadczenie uzyskane podczas  pracy nad Loglanem'82 okazało się przydatne w sformułowaniu i rozwiązaniu natępującego zagadnienia występującego w języku Java: ''w jaki sposób należy wyznaczać bezpośrednią superklasę danej klasy?''
== Kreczmara system zarządzania pamięcia obiektów ==
+
Sformułowaliśmy warunki jakie ma spełniać rozwiązanie problemu i podaliśmy dwa algorytmy. Przeprowadziliśmy ich analizę.  Algorytm w wersji deterministycznej może być stosowany przez kompilatory Javy. Jego prostsza wersja może być stosowana w kompilatorach Loglanu. 
Prof. Antoni Kreczmar(1945 - 1996) opracował kompletny system zarządzania obiektami[zob.{{odn|ref=nie|Kreczmar|Cioni|1984}}]. System dostarcza operacji
+
Zobacz [{{odn|ref=nie|Langmaack|Salwicki|Warpechowski|2009}},{{odn|ref=nie|Langmaack|Salwicki|Warpechowski|2008}},{{odn|ref=nie|Langmaack|Salwicki|2013}}]
 +
 
 +
== Kreczmara system zarządzania pamięcią obiektów ==
 +
Prof. [http://pl.wikipedia.org/wiki/Antoni_Kreczmar Antoni Kreczmar] opracował kompletny system zarządzania obiektami[zob.{{odn|ref=nie|Kreczmar|Cioni|1984}},{{odn|ref=nie|Cioni|Kreczmar|Vitale|1989}}]. System dostarcza operacji
 
* wspomagających powstanie obiektu - '''new''',
 
* wspomagających powstanie obiektu - '''new''',
 
* sprawdzających legalność operacji dostępu do atrybutów obiektu,
 
* sprawdzających legalność operacji dostępu do atrybutów obiektu,
Linia 18: Linia 22:
 
|  '''Instrukcja''' ||&nbsp;&nbsp;&nbsp;&nbsp; kill(x<sub>i</sub>) ||&nbsp;&nbsp;&nbsp;&nbsp; delete(x<sub>i</sub>) ||  ''x<sub>1</sub>=null;x<sub>2</sub>=null; ...  x<sub>n</sub>=null;''<br>Po wykonaniu instrukcji ''gc()'' obiekt zostanie usunięty.
 
|  '''Instrukcja''' ||&nbsp;&nbsp;&nbsp;&nbsp; kill(x<sub>i</sub>) ||&nbsp;&nbsp;&nbsp;&nbsp; delete(x<sub>i</sub>) ||  ''x<sub>1</sub>=null;x<sub>2</sub>=null; ...  x<sub>n</sub>=null;''<br>Po wykonaniu instrukcji ''gc()'' obiekt zostanie usunięty.
 
|-
 
|-
| '''Po''' || Wszystkie zmienne przyjęły wartość '''none'''. Obiekt został usunięty. || Obiekt ''o'' został usunięty. ''x'' ma wartość null. Inne zmienne wskazują na zwolnione pole - jest to '''groźny''' błąd - ''wiszącej referencji''. || Obiekt został usunięty, pod warunkiem, że nie zapomniano o żadnej zmiennej wskazującej na obiekt ''o''.<ref>Sytuacja w Pythonie wymaga dłuzszego opisu.</ref>
+
| '''Po''' || Wszystkie zmienne przyjęły wartość '''none'''. Obiekt został usunięty. || Obiekt ''o'' został usunięty. ''x'' ma wartość null. Inne zmienne wskazują na zwolnione pole - jest to '''groźny''' błąd - ''wiszącej referencji''. || Obiekt został usunięty, pod warunkiem, że nie zapomniano o żadnej zmiennej wskazującej na obiekt ''o''.<ref>Sytuacja w Pythonie wymaga dłuzszego opisu. Programista może mianowicie niektóre referencje do obiektu o określić jako słabe. Zwalnia go to z obowiązku pamiętania, że takie referencje do obiektu o istnieją. Wystarczy usunąć tylko silne referencje do obiektu, by przy odśmiecaniu obiekt ten został usunięty.</ref>
 
|-
 
|-
 
|'''Koszt'''|| Stały (nieduży) || Stały (nieduży). || Znaczny, zależny od liczby zmiennych wskazujących na obiekt i od łącznego rozmiaru pamięci obiektowej (koszt operacji ''gc()'').
 
|'''Koszt'''|| Stały (nieduży) || Stały (nieduży). || Znaczny, zależny od liczby zmiennych wskazujących na obiekt i od łącznego rozmiaru pamięci obiektowej (koszt operacji ''gc()'').
 
|-
 
|-
|'''Ryzyko'''|| Brak.<br>Próba dostępu do obiektu podnosi wyjątek ''reference to none''.  || Duże prawdopodobieństwo błędu ''wiszących referencji''<br> Duże prawdopodobieństwo błędu sprzecznych informacji || Spore szanse na to, że programista zapomni usunąć, którąś referencję do niepotrzebnego obiektu.  
+
|'''Ryzyko'''<ref>wystąpienia błędu wiszącej referencji, bądź błędu zaśmiecenia pamięci (''ang''.memory leak)</ref>|| Brak(!).<br>Każda próba dostępu do obiektu ''o'' zgłosi wyjątek ''reference to none''.  || Duże prawdopodobieństwo błędu ''wiszących referencji''<br> Duże prawdopodobieństwo błędu sprzecznych informacji || Spore szanse na to, że programista zapomni usunąć, którąś referencję do niepotrzebnego obiektu.  
 
|}
 
|}
 +
 
== Protokół obcego wołania metod w obiektach wątkach ==
 
== Protokół obcego wołania metod w obiektach wątkach ==
Ta oryginalna koncepcja zasługuje na uwagę.
+
Ta oryginalna koncepcja zasługuje na uwagę. Niewątpliwie jest to odmiana protokołu RPC. Jest znacznie prostsza od RPC, CORBA i RMI(Java) ponieważ porozumiewające się obiekty procesów  pochodzą z jednego programu rozproszonego w sieci. Dzięki temu mozna się obejść bez 'stubów' i 'skeletonów'.
 +
Najważniejsze jest to, że komunikacja polega na wywoływaniu metod w zdalnym obiekcie procesu i że metody te sam proces może dynamicznie
 +
upubliczniać lub chować.
 +
 
 
==  Łączenie maszyn wirtualnych w wieloprocesorowy wirtualny komputer ==
 
==  Łączenie maszyn wirtualnych w wieloprocesorowy wirtualny komputer ==
Koncepcja sprawdzona w Loglanie'82 może być przydatna w innych systemach.
+
Każda maszyna wirtualna Loglanu VLP ma zdolność łączenia się z innymi maszynami VLP (i rozłączania). Dzięki temu program podczas tworzenia nowego obiektu procesy może wskazać na którym komputerze ma być alokowany nowy obiekt procesu.
 +
 
 +
Podobny pomysł występuje w bibliotekach PVM i MPI. Różnica polega na tym, że w bibliotekach tych procesy nie tworzą wątków.
  
 
== Przypisy ==
 
== Przypisy ==
 
<references/>
 
<references/>
 
== Bibliografia ==
 
== Bibliografia ==
# [Langmaack, Salwicki, Warpechowski 2009 ] {{cytuj pismo|odn=tak|imię=Hans|nazwisko=Langmaack|imię2=Andrzej|nazwisko2=Salwicki|imię3=Marek|nazwisko3=Warpechowski |tytuł=On an algorithm determining direct superclasses in Java and similar languages with inner classes—Its correctness, completeness and uniqueness of solutions|czasopismo=Information and Computation |rok=2009|tom=89 |strony=389-410 }}
+
# [Langmaack, Salwicki, Warpechowski 2009 ] {{cytuj pismo|nazwisko=Langmaack|imię=Hans|imię2=Andrzej|nazwisko2=Salwicki|imię3=Marek|nazwisko3=Warpechowski|tytuł=On an algorithm determining direct superclasses in Java and similar languages with inner classes—Its correctness, completeness and uniqueness of solutions|czasopismo=Information and Computation|rok=2009|tom=89|strony=389-410|odn=tak}}
# [Langmaack, Salwicki, Warpechowski 2008 ] {{cytuj pismo|odn=tak|imię=Hans|nazwisko=Langmaack|imię2=Andrzej|nazwisko2=Salwicki|imię3=Marek|nazwisko3=Warpechowski |tytuł=A deterministic algorithm elaborating direct superclasses in Java-like languages
+
# [Langmaack, Salwicki, Warpechowski 2008 ] {{cytuj pismo|nazwisko=Langmaack|imię=Hans|imię2=Andrzej|nazwisko2=Salwicki|imię3=Marek|nazwisko3=Warpechowski |tytuł=A deterministic algorithm elaborating direct superclasses in Java-like languages|czasopismo=Fundamenta Informaticae  |rok=2008 |strony=389-410|odn=tak }}
|czasopismo=Fundamenta Informaticae  |rok=2008 |strony=389-410 }}
+
# [Langmaack, Salwicki 2013 ] {{cytuj pismo|nazwisko=Langmaack|imię=Hans|imię2=Andrzej|nazwisko2=Salwicki| tytuł=Some Methodological Remarks Inspired by the Paper "On inner classes" by A. Igarashi and B. Pierce|czasopismo=Fundamenta Informaticae  |rok=2013 |strony=227 - 274|odn=tak }}
# [Langmaack, Salwicki, Warpechowski 2013 ] {{cytuj pismo|odn=tak|imię=Hans|nazwisko=Langmaack|imię2=Andrzej|nazwisko2=Salwicki|imię3=Marek|nazwisko3=Warpechowski |tytuł=Some Methodological Remarks Inspired by the Paper "On inner classes" by A. Igarashi and B. Pierce
+
# [Kreczmar, Cioni 1984]  {{cytuj pismo|nazwisko=Kreczmar|imię=Antoni| imię2=Gianna | nazwisko2=Cioni|tytuł=Programmed deallocation without dangling reference |czasopismo=Information Processing Letters |data=1984 |strony=179-187|odn=tak   }}
|czasopismo=Fundamenta Informaticae  |rok=2013 |strony=227 - 274 }}
+
# [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}}
# [Kreczmar, Cioni 1984]  {{cytuj pismo| odn=tak | imię=Antoni | nazwisko=Kreczmar| imię2=Gianna | nazwisko2=Cioni |
+
tytuł=Programmed deallocation without dangling reference |czasopismo=Information Processing Letters |data=1984 |strony=179-187  }}
+

Aktualna wersja na dzień 20:48, 31 mar 2013

Wiele rozwiązań wynalezionych podczas prac nad Loglanem może okazać się pomocne w innych, "młodszych" językach programowania.

Wyznaczanie bezpośredniej superklasy

Nasze doświadczenie uzyskane podczas pracy nad Loglanem'82 okazało się przydatne w sformułowaniu i rozwiązaniu natępującego zagadnienia występującego w języku Java: w jaki sposób należy wyznaczać bezpośrednią superklasę danej klasy? Sformułowaliśmy warunki jakie ma spełniać rozwiązanie problemu i podaliśmy dwa algorytmy. Przeprowadziliśmy ich analizę. Algorytm w wersji deterministycznej może być stosowany przez kompilatory Javy. Jego prostsza wersja może być stosowana w kompilatorach Loglanu. Zobacz [Langmaack, Salwicki i Warpechowski 2009 ↓,Langmaack, Salwicki i Warpechowski 2008 ↓,Langmaack i Salwicki 2013 ↓]

Kreczmara system zarządzania pamięcią obiektów

Prof. Antoni Kreczmar opracował kompletny system zarządzania obiektami[zob.Kreczmar i Cioni 1984 ↓,Cioni, Kreczmar i Vitale 1989 ↓]. System dostarcza operacji

  • wspomagających powstanie obiektu - new,
  • sprawdzających legalność operacji dostępu do atrybutów obiektu,
  • usuwania obiektu na żądanie,
  • defragmentacji i odśmiecania pamięci obiektowej. [zob. ]


Porównaj sposoby pozbywania się niepotrzebnych obiektów

Loglan'82 C++ Java, Python
Przed
Na pewien obiekt o wskazują zmienne x1,x2, ... , xn.
Instrukcja      kill(xi)      delete(xi) x1=null;x2=null; ... xn=null;
Po wykonaniu instrukcji gc() obiekt zostanie usunięty.
Po Wszystkie zmienne przyjęły wartość none. Obiekt został usunięty. Obiekt o został usunięty. x ma wartość null. Inne zmienne wskazują na zwolnione pole - jest to groźny błąd - wiszącej referencji. Obiekt został usunięty, pod warunkiem, że nie zapomniano o żadnej zmiennej wskazującej na obiekt o.[1]
Koszt Stały (nieduży) Stały (nieduży). Znaczny, zależny od liczby zmiennych wskazujących na obiekt i od łącznego rozmiaru pamięci obiektowej (koszt operacji gc()).
Ryzyko[2] Brak(!).
Każda próba dostępu do obiektu o zgłosi wyjątek reference to none.
Duże prawdopodobieństwo błędu wiszących referencji
Duże prawdopodobieństwo błędu sprzecznych informacji
Spore szanse na to, że programista zapomni usunąć, którąś referencję do niepotrzebnego obiektu.

Protokół obcego wołania metod w obiektach wątkach

Ta oryginalna koncepcja zasługuje na uwagę. Niewątpliwie jest to odmiana protokołu RPC. Jest znacznie prostsza od RPC, CORBA i RMI(Java) ponieważ porozumiewające się obiekty procesów pochodzą z jednego programu rozproszonego w sieci. Dzięki temu mozna się obejść bez 'stubów' i 'skeletonów'. Najważniejsze jest to, że komunikacja polega na wywoływaniu metod w zdalnym obiekcie procesu i że metody te sam proces może dynamicznie upubliczniać lub chować.

Łączenie maszyn wirtualnych w wieloprocesorowy wirtualny komputer

Każda maszyna wirtualna Loglanu VLP ma zdolność łączenia się z innymi maszynami VLP (i rozłączania). Dzięki temu program podczas tworzenia nowego obiektu procesy może wskazać na którym komputerze ma być alokowany nowy obiekt procesu.

Podobny pomysł występuje w bibliotekach PVM i MPI. Różnica polega na tym, że w bibliotekach tych procesy nie tworzą wątków.

Przypisy

  1. Sytuacja w Pythonie wymaga dłuzszego opisu. Programista może mianowicie niektóre referencje do obiektu o określić jako słabe. Zwalnia go to z obowiązku pamiętania, że takie referencje do obiektu o istnieją. Wystarczy usunąć tylko silne referencje do obiektu, by przy odśmiecaniu obiekt ten został usunięty.
  2. wystąpienia błędu wiszącej referencji, bądź błędu zaśmiecenia pamięci (ang.memory leak)

Bibliografia

  1. [Langmaack, Salwicki, Warpechowski 2009 ] Hans Langmaack, Andrzej Salwicki, Marek Warpechowski. On an algorithm determining direct superclasses in Java and similar languages with inner classes—Its correctness, completeness and uniqueness of solutions. „Information and Computation”, s. 389-410, 2009. 
  2. [Langmaack, Salwicki, Warpechowski 2008 ] Hans Langmaack, Andrzej Salwicki, Marek Warpechowski. A deterministic algorithm elaborating direct superclasses in Java-like languages. „Fundamenta Informaticae”, s. 389-410, 2008. 
  3. [Langmaack, Salwicki 2013 ] Hans Langmaack, Andrzej Salwicki. Some Methodological Remarks Inspired by the Paper "On inner classes" by A. Igarashi and B. Pierce. „Fundamenta Informaticae”, s. 227 - 274, 2013. 
  4. [Kreczmar, Cioni 1984] Antoni Kreczmar, Gianna Cioni. Programmed deallocation without dangling reference. „Information Processing Letters”, s. 179-187, 1984. 
  5. [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.