http://lem12.uksw.edu.pl/index.php?title=Badania_podstawowe&feed=atom&action=historyBadania podstawowe - Historia wersji2024-03-28T10:11:07ZHistoria wersji tej strony wikiMediaWiki 1.23.8http://lem12.uksw.edu.pl/index.php?title=Badania_podstawowe&diff=1684&oldid=prevAndrzejSalwicki: /* Bibliografia */2014-12-24T14:04:11Z<p><span dir="auto"><span class="autocomment">Bibliografia</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← poprzednia wersja</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Wersja z 14:04, 24 gru 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Linia 16:</td>
<td colspan="2" class="diff-lineno">Linia 16:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># [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 |strony=179-187 |rok=1984}}</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># [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 |strony=179-187 |rok=1984}}</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># [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}}</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># [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}}</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># [Kreczmar, Oktaba, Ratajczak, Litwiniuk 1983] {{cytuj książkę | odn=tak|nazwisko = Kreczmar | imię = Antoni | tytuł= Semantics and Implementation of Prefixing at Many Levels  | tytuł tomu =  proc. Logics of Programs and their Applications | wydawca = Springer Vlg | miejsce = Berlin | data = 1983 | seria = LNCS 148 | strony = 45-80 | nazwisko2 = Bartol | imię2 = W.M. | nazwisko3 = Oktaba | imię3 = H. | nazwisko4 = Litwiniuk | imię4 = A.I.|isbn=0387119817  }</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># [Kreczmar, Oktaba, Ratajczak, Litwiniuk 1983] {{cytuj książkę | odn=tak|nazwisko = Kreczmar | imię = Antoni | tytuł= Semantics and Implementation of Prefixing at Many Levels  | tytuł tomu =  proc. Logics of Programs and their Applications | wydawca = Springer Vlg | miejsce = Berlin | data = 1983 | seria = LNCS 148 | strony = 45-80 | nazwisko2 = Bartol | imię2 = W.M. | nazwisko3 = Oktaba | imię3 = H. | nazwisko4 = Litwiniuk | imię4 = A.I.|isbn=0387119817  <ins class="diffchange diffchange-inline">}</ins>}</div></td></tr>
</table>AndrzejSalwickihttp://lem12.uksw.edu.pl/index.php?title=Badania_podstawowe&diff=1621&oldid=prevAndrzejSalwicki: /* Bibliografia */2014-12-20T15:56:54Z<p><span dir="auto"><span class="autocomment">Bibliografia</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← poprzednia wersja</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Wersja z 15:56, 20 gru 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Linia 16:</td>
<td colspan="2" class="diff-lineno">Linia 16:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># [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 |strony=179-187 |rok=1984}}</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># [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 |strony=179-187 |rok=1984}}</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># [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}}</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># [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}}</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"># [Kreczmar, Oktaba, Ratajczak, Litwiniuk 1983] {{cytuj książkę | odn=tak|nazwisko = Kreczmar | imię = Antoni | tytuł= Semantics and Implementation of Prefixing at Many Levels  | tytuł tomu =  proc. Logics of Programs and their Applications | wydawca = Springer Vlg | miejsce = Berlin | data = 1983 | seria = LNCS 148 | strony = 45-80 | nazwisko2 = Bartol | imię2 = W.M. | nazwisko3 = Oktaba | imię3 = H. | nazwisko4 = Litwiniuk | imię4 = A.I.|isbn=0387119817  }</ins></div></td></tr>
</table>AndrzejSalwickihttp://lem12.uksw.edu.pl/index.php?title=Badania_podstawowe&diff=1276&oldid=prevAndrzejSalwicki o 11:16, 30 mar 20142014-03-30T11:16:31Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← poprzednia wersja</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Wersja z 11:16, 30 mar 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Linia 1:</td>
<td colspan="2" class="diff-lineno">Linia 1:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Podczas prac w projekcie Loglan'82 napotkano wiele problemów. Zanim podjęto decyzję w konkretnej sprawie, formułowaliśmy problem dbając o precyzję i staraliśmy się znaleźć jego rozwiązanie.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Podczas prac w projekcie Loglan'82 napotkano wiele problemów. Zanim podjęto decyzję w konkretnej sprawie, formułowaliśmy problem dbając o precyzję i staraliśmy się znaleźć jego rozwiązanie.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>'''Przykład'''. Zarządzanie pamięcią obiektów nie jest sprawą trywialną.  Jeśli system zarządzania obiektami nie umożliwi usuwania obiektów już niepotrzebnych, to może to doprowadzić do ''wycieku pamieci''. Zjawisko takie jest nie tylko niepożądane, lecz niebezpieczne. Z drugiej strony zezwolenie na usuwanie obiektu może prowadzić do bardzo groźnych i trudnych do wykrycia błędów tzw. ''wiszących referencji''. Błąd taki powstaje gdy obiekt jest wartościa dwu zmiennych ''x'' i ''y'' . Polecenie: delete(y) (w jezyku C++, free(y) w Pascalu) spowoduje, że obiekt zostanie usunięty, zmienna ''y'' przyjmie wartość nil. Zmienna x utrzymuje swą poprzednią wartość sugerując, że wskazuje ona na jakiś obiekt. Po chwili może powstać jakiś nowy obiekt innego typu i pewna zmienna ''z'' może wskazywac na ten obiekt. Taka sytuacja to ''błąd sprzecznych informacji''. Zmienna ''x'' mówi tu jest obiekt typu ''T'', zmienna ''z'' mówi tu jest obiekt typu ''U''. Zamieszanie powiększa się gdy twórca języka uważa, ze problem zostanie rozwiazany przez wprowadzenie odśmiecacza (''ang''. garbage collector). W r. 1995 powstał język Java. Jego twórcy w artykule white paper tłumaczyli: nie wolno wprowadzac do języka instrukcji delete bo w ten sposób moga pojawic się błedy wiszacych referencji. A poniewaz Java jest wyposażona w odśmiecacz, to wywołując go poleceniem gc() zawsze będziesz mógł usunąć niepotrzebne  obiekty. Juz w dwa lat apóźniej w 1997 okazało się, że odśmiecacz nie może usunąć obiektu ''o'', dla którego wcześniej starannie nie usunieto wszystkich wskazujących nań referencji. Okazało się, że zadanie takie jest nierealne. Programista chcący się pozbyc niepotrzebnego obiektu musiałby pamietac o wszystkich wskaźnikach na taki obiekt, również tych, które postały automatycznie poprzez zarządzanie strukturami danych takimijak kolejki, stosy czy drzewa. Wprowadzono więc w Javie referencje mocne i słabe. Podobnie jest w Pytonie. Nadal jednak pozostaje problem: niewielu programistów w Javie zdaje sobie sprawę z tego , że istnieja słabe referencje i jak z nich korzystać. Profesor Antoni Kreczmar sformułował problem inaczej: ''czy istnieje taka struktura danych, która pozwala przechowywać obiekty, wskażniki do nich i usuwać w sposób bezpieczny i efektywne obiekty wskazane przez programistę''. Powyższe sformułowanie jest tylko szkicem pełnej specyfikacji wymagań. Szczegółową implementację systemu Kreczmara można znaleźć w <del class="diffchange diffchange-inline">[]. Analizę wymagań przeprowadziła Hanna Oktaba w rozprawie doktorskiej, zob. </del>[{{Odn|ref=nie|Kreczmar|Cioni|1984}}, {{Odn|ref=nie|Cioni|Kreczmar|Vitale|1989}}].</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>'''Przykład'''. Zarządzanie pamięcią obiektów nie jest sprawą trywialną.  Jeśli system zarządzania obiektami nie umożliwi usuwania obiektów już niepotrzebnych, to może to doprowadzić do ''wycieku pamieci''. Zjawisko takie jest nie tylko niepożądane, lecz niebezpieczne. Z drugiej strony zezwolenie na usuwanie obiektu może prowadzić do bardzo groźnych i trudnych do wykrycia błędów tzw. ''wiszących referencji''. Błąd taki powstaje gdy obiekt jest wartościa dwu zmiennych ''x'' i ''y'' . Polecenie: delete(y) (w jezyku C++, free(y) w Pascalu) spowoduje, że obiekt zostanie usunięty, zmienna ''y'' przyjmie wartość nil. Zmienna x utrzymuje swą poprzednią wartość sugerując, że wskazuje ona na jakiś obiekt. Po chwili może powstać jakiś nowy obiekt innego typu i pewna zmienna ''z'' może wskazywac na ten obiekt. Taka sytuacja to ''błąd sprzecznych informacji''. Zmienna ''x'' mówi tu jest obiekt typu ''T'', zmienna ''z'' mówi tu jest obiekt typu ''U''. Zamieszanie powiększa się gdy twórca języka uważa, ze problem zostanie rozwiazany przez wprowadzenie odśmiecacza (''ang''. garbage collector). W r. 1995 powstał język Java. Jego twórcy w artykule white paper tłumaczyli: nie wolno wprowadzac do języka instrukcji delete bo w ten sposób moga pojawic się błedy wiszacych referencji. A poniewaz Java jest wyposażona w odśmiecacz, to wywołując go poleceniem gc() zawsze będziesz mógł usunąć niepotrzebne  obiekty. Juz w dwa lat apóźniej w 1997 okazało się, że odśmiecacz nie może usunąć obiektu ''o'', dla którego wcześniej starannie nie usunieto wszystkich wskazujących nań referencji. Okazało się, że zadanie takie jest nierealne. Programista chcący się pozbyc niepotrzebnego obiektu musiałby pamietac o wszystkich wskaźnikach na taki obiekt, również tych, które postały automatycznie poprzez zarządzanie strukturami danych takimijak kolejki, stosy czy drzewa. Wprowadzono więc w Javie referencje mocne i słabe. Podobnie jest w Pytonie. Nadal jednak pozostaje problem: niewielu programistów w Javie zdaje sobie sprawę z tego , że istnieja słabe referencje i jak z nich korzystać. Profesor Antoni Kreczmar sformułował problem inaczej: ''czy istnieje taka struktura danych, która pozwala przechowywać obiekty, wskażniki do nich i usuwać w sposób bezpieczny i efektywne obiekty wskazane przez programistę''. Powyższe sformułowanie jest tylko szkicem pełnej specyfikacji wymagań. Szczegółową implementację systemu Kreczmara można znaleźć w [{{Odn|ref=nie|Kreczmar|Cioni|1984}}, {{Odn|ref=nie|Cioni|Kreczmar|Vitale|1989}}<ins class="diffchange diffchange-inline">]. Analizę wymagań przeprowadziła Hanna Oktaba w rozprawie doktorskiej, zob.[</ins>] .</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Nie twierdzimy, że wszyscy powinni zacząć programować w Loglanie. Dziwi jednak, że od ponad 30 lat od ukazania się publikacji G. Cioni i A. Kreczmara, żaden z nowych języków, lub nowej wersji języka już istniejącego, nie zauważył, że istnieje tanie i bezpieczne rozwiązanie problemu programowalnej dealokacji obiektów.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Nie twierdzimy, że wszyscy powinni zacząć programować w Loglanie. Dziwi jednak, że od ponad 30 lat od ukazania się publikacji G. Cioni i A. Kreczmara, żaden z nowych języków, lub nowej wersji języka już istniejącego, nie zauważył, że istnieje tanie i bezpieczne rozwiązanie problemu programowalnej dealokacji obiektów.</div></td></tr>
</table>AndrzejSalwickihttp://lem12.uksw.edu.pl/index.php?title=Badania_podstawowe&diff=1275&oldid=prevAndrzejSalwicki: /* Bibliografia */2014-03-30T11:14:00Z<p><span dir="auto"><span class="autocomment">Bibliografia</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← poprzednia wersja</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Wersja z 11:14, 30 mar 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Linia 15:</td>
<td colspan="2" class="diff-lineno">Linia 15:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Bibliografia ==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Bibliografia ==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># [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 |strony=179-187 |rok=1984}}</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div># [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 |strony=179-187 |rok=1984}}</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"># [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}}</ins></div></td></tr>
</table>AndrzejSalwickihttp://lem12.uksw.edu.pl/index.php?title=Badania_podstawowe&diff=1274&oldid=prevAndrzejSalwicki o 11:09, 30 mar 20142014-03-30T11:09:30Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← poprzednia wersja</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Wersja z 11:09, 30 mar 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Linia 1:</td>
<td colspan="2" class="diff-lineno">Linia 1:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Podczas prac w projekcie Loglan'82 napotkano wiele problemów. Zanim podjęto decyzję w konkretnej sprawie, formułowaliśmy problem dbając o precyzję i staraliśmy się znaleźć jego rozwiązanie.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Podczas prac w projekcie Loglan'82 napotkano wiele problemów. Zanim podjęto decyzję w konkretnej sprawie, formułowaliśmy problem dbając o precyzję i staraliśmy się znaleźć jego rozwiązanie.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>'''Przykład'''. Zarządzanie pamięcią obiektów nie jest sprawą trywialną.  Jeśli system zarządzania obiektami nie umożliwi usuwania obiektów już niepotrzebnych, to może to doprowadzić do ''wycieku pamieci''. Zjawisko takie jest nie tylko niepożądane, lecz niebezpieczne. Z drugiej strony zezwolenie na usuwanie obiektu może prowadzić do bardzo groźnych i trudnych do wykrycia błędów tzw. ''wiszących referencji''. Błąd taki powstaje gdy obiekt jest wartościa dwu zmiennych ''x'' i ''y'' . Polecenie: delete(y) (w jezyku C++, free(y) w Pascalu) spowoduje, że obiekt zostanie usunięty, zmienna ''y'' przyjmie wartość nil. Zmienna x utrzymuje swą poprzednią wartość sugerując, że wskazuje ona na jakiś obiekt. Po chwili może powstać jakiś nowy obiekt innego typu i pewna zmienna ''z'' może wskazywac na ten obiekt. Taka sytuacja to ''błąd sprzecznych informacji''. Zmienna ''x'' mówi tu jest obiekt typu ''T'', zmienna ''z'' mówi tu jest obiekt typu ''U''. Zamieszanie powiększa się gdy twórca języka uważa, ze problem zostanie rozwiazany przez wprowadzenie odśmiecacza (''ang''. garbage collector). W r. 1995 powstał język Java. Jego twórcy w artykule white paper tłumaczyli: nie wolno wprowadzac do języka instrukcji delete bo w ten sposób moga pojawic się błedy wiszacych referencji. A poniewaz Java jest wyposażona w odśmiecacz, to wywołując go poleceniem gc() zawsze będziesz mógł usunąć niepotrzebne  obiekty. Juz w dwa lat apóźniej w 1997 okazało się, że odśmiecacz nie może usunąć obiektu ''o'', dla którego wcześniej starannie nie usunieto wszystkich wskazujących nań referencji. Okazało się, że zadanie takie jest nierealne. Programista chcący się pozbyc niepotrzebnego obiektu musiałby pamietac o wszystkich wskaźnikach na taki obiekt, również tych, które postały automatycznie poprzez zarządzanie strukturami danych takimijak kolejki, stosy czy drzewa. Wprowadzono więc w Javie referencje mocne i słabe. Podobnie jest w Pytonie. Nadal jednak pozostaje problem: niewielu programistów w Javie zdaje sobie sprawę z tego , że istnieja słabe referencje i jak z nich korzystać. Profesor Antoni Kreczmar sformułował problem inaczej: ''czy istnieje taka struktura danych, która pozwala przechowywać obiekty, wskażniki do nich i usuwać w sposób bezpieczny i efektywne obiekty wskazane przez programistę''. Powyższe sformułowanie jest tylko szkicem pełnej specyfikacji wymagań. Szczegółową implementację systemu Kreczmara można znaleźć w []. Analizę wymagań przeprowadziła Hanna Oktaba w rozprawie doktorskiej, zob. [].</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>'''Przykład'''. Zarządzanie pamięcią obiektów nie jest sprawą trywialną.  Jeśli system zarządzania obiektami nie umożliwi usuwania obiektów już niepotrzebnych, to może to doprowadzić do ''wycieku pamieci''. Zjawisko takie jest nie tylko niepożądane, lecz niebezpieczne. Z drugiej strony zezwolenie na usuwanie obiektu może prowadzić do bardzo groźnych i trudnych do wykrycia błędów tzw. ''wiszących referencji''. Błąd taki powstaje gdy obiekt jest wartościa dwu zmiennych ''x'' i ''y'' . Polecenie: delete(y) (w jezyku C++, free(y) w Pascalu) spowoduje, że obiekt zostanie usunięty, zmienna ''y'' przyjmie wartość nil. Zmienna x utrzymuje swą poprzednią wartość sugerując, że wskazuje ona na jakiś obiekt. Po chwili może powstać jakiś nowy obiekt innego typu i pewna zmienna ''z'' może wskazywac na ten obiekt. Taka sytuacja to ''błąd sprzecznych informacji''. Zmienna ''x'' mówi tu jest obiekt typu ''T'', zmienna ''z'' mówi tu jest obiekt typu ''U''. Zamieszanie powiększa się gdy twórca języka uważa, ze problem zostanie rozwiazany przez wprowadzenie odśmiecacza (''ang''. garbage collector). W r. 1995 powstał język Java. Jego twórcy w artykule white paper tłumaczyli: nie wolno wprowadzac do języka instrukcji delete bo w ten sposób moga pojawic się błedy wiszacych referencji. A poniewaz Java jest wyposażona w odśmiecacz, to wywołując go poleceniem gc() zawsze będziesz mógł usunąć niepotrzebne  obiekty. Juz w dwa lat apóźniej w 1997 okazało się, że odśmiecacz nie może usunąć obiektu ''o'', dla którego wcześniej starannie nie usunieto wszystkich wskazujących nań referencji. Okazało się, że zadanie takie jest nierealne. Programista chcący się pozbyc niepotrzebnego obiektu musiałby pamietac o wszystkich wskaźnikach na taki obiekt, również tych, które postały automatycznie poprzez zarządzanie strukturami danych takimijak kolejki, stosy czy drzewa. Wprowadzono więc w Javie referencje mocne i słabe. Podobnie jest w Pytonie. Nadal jednak pozostaje problem: niewielu programistów w Javie zdaje sobie sprawę z tego , że istnieja słabe referencje i jak z nich korzystać. Profesor Antoni Kreczmar sformułował problem inaczej: ''czy istnieje taka struktura danych, która pozwala przechowywać obiekty, wskażniki do nich i usuwać w sposób bezpieczny i efektywne obiekty wskazane przez programistę''. Powyższe sformułowanie jest tylko szkicem pełnej specyfikacji wymagań. Szczegółową implementację systemu Kreczmara można znaleźć w []. Analizę wymagań przeprowadziła Hanna Oktaba w rozprawie doktorskiej, zob. [<ins class="diffchange diffchange-inline">{{Odn|ref=nie|Kreczmar|Cioni|1984}}, {{Odn|ref=nie|Cioni|Kreczmar|Vitale|1989}}</ins>].</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Nie twierdzimy, że wszyscy powinni zacząć programować w Loglanie. Dziwi jednak, że od ponad 30 lat od ukazania się publikacji G. Cioni i A. Kreczmara, żaden z nowych języków, lub nowej wersji języka już istniejącego, nie zauważył, że istnieje tanie i bezpieczne rozwiązanie problemu programowalnej dealokacji obiektów.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Nie twierdzimy, że wszyscy powinni zacząć programować w Loglanie. Dziwi jednak, że od ponad 30 lat od ukazania się publikacji G. Cioni i A. Kreczmara, żaden z nowych języków, lub nowej wersji języka już istniejącego, nie zauważył, że istnieje tanie i bezpieczne rozwiązanie problemu programowalnej dealokacji obiektów.</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Linia 12:</td>
<td colspan="2" class="diff-lineno">Linia 12:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* Problem Display Vector'a. Dostęp kodu procedury do wielkości nielokalnych nasuwa pytania jak należy obliczać adres wielkości nielokalnej? Poniewaz procedury i funkcje mogą opisywc obliczenia rekurencyjne nie mozna wyznaczyć adrsu wielkości nielokalnej przed rozpoczęciem wykonywania programu (podczas kompilacji). Eleganckie rozwiązanie podał E.W. Dijkstra [] proponując strukturę danych nazwaną Display Vector. Wiele implementacji języków Algol60, Pascal i Simula67 stosuje ten mechanizm. Jeśli jednak język programowania zezwala na zagnieżdżanie klas i dziedziczenie bardziej swobodne niż to dozwolone w Simuli, to sprawa się komplikuje. <br /></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* Problem Display Vector'a. Dostęp kodu procedury do wielkości nielokalnych nasuwa pytania jak należy obliczać adres wielkości nielokalnej? Poniewaz procedury i funkcje mogą opisywc obliczenia rekurencyjne nie mozna wyznaczyć adrsu wielkości nielokalnej przed rozpoczęciem wykonywania programu (podczas kompilacji). Eleganckie rozwiązanie podał E.W. Dijkstra [] proponując strukturę danych nazwaną Display Vector. Wiele implementacji języków Algol60, Pascal i Simula67 stosuje ten mechanizm. Jeśli jednak język programowania zezwala na zagnieżdżanie klas i dziedziczenie bardziej swobodne niż to dozwolone w Simuli, to sprawa się komplikuje. <br /></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Pierwsze rozwiązanie jakie znaleźliśmy umożliwiło stosowanie mechanizmu Display Vectora, ale za pewną cenę. Okazało sie, że semantyka języka nie była w pełni statyczna. Błąd ten znalazł i wskazał prof. Hans Langmaack z Uniwersytetu w Kilonii. We współpracy z nim znaleziono poprawne rozwiązanie problemu, które pozwala zachowac mechanizm Display Vectora.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Pierwsze rozwiązanie jakie znaleźliśmy umożliwiło stosowanie mechanizmu Display Vectora, ale za pewną cenę. Okazało sie, że semantyka języka nie była w pełni statyczna. Błąd ten znalazł i wskazał prof. Hans Langmaack z Uniwersytetu w Kilonii. We współpracy z nim znaleziono poprawne rozwiązanie problemu, które pozwala zachowac mechanizm Display Vectora.</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">==Bibliografia ==</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"># [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 |strony=179-187 |rok=1984}}</ins></div></td></tr>
</table>AndrzejSalwickihttp://lem12.uksw.edu.pl/index.php?title=Badania_podstawowe&diff=1273&oldid=prevAndrzejSalwicki o 12:44, 29 mar 20142014-03-29T12:44:11Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← poprzednia wersja</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Wersja z 12:44, 29 mar 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Linia 1:</td>
<td colspan="2" class="diff-lineno">Linia 1:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Podczas prac w projekcie Loglan'82 napotkano wiele problemów. Zanim podjęto decyzję w konkretnej sprawie, formułowaliśmy problem dbając o precyzję i staraliśmy się znaleźć jego rozwiązanie.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Podczas prac w projekcie Loglan'82 napotkano wiele problemów. Zanim podjęto decyzję w konkretnej sprawie, formułowaliśmy problem dbając o precyzję i staraliśmy się znaleźć jego rozwiązanie.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>'''Przykład'''. Zarządzanie pamięcią obiektów nie jest sprawą trywialną.  Jeśli system zarządzania obiektami nie umożliwi usuwania obiektów już niepotrzebnych, to może to doprowadzić do ''wycieku pamieci''. Zjawisko takie jest nie tylko niepożądane, lecz niebezpieczne. Z drugiej strony zezwolenie na usuwanie obiektu może prowadzić do bardzo groźnych i trudnych do wykrycia błędów tzw. ''wiszących referencji''. Błąd taki powstaje gdy obiekt jest wartościa dwu zmiennych ''x'' i ''y'' . Polecenie: delete(y) (w jezyku C++, free(y) w Pascalu) spowoduje, że obiekt zostanie usunięty, zmienna ''y'' przyjmie wartość nil. Zmienna x utrzymuje swą poprzednią wartość sugerując, że wskazuje ona na jakiś obiekt. Po chwili może powstać jakiś nowy obiekt innego typu i pewna zmienna ''z'' może wskazywac na ten obiekt. Taka sytuacja to ''błąd sprzecznych informacji''. Zmienna ''x'' mówi tu jest obiekt typu ''T'', zmienna ''z'' mówi tu jest obiekt typu ''U''. Zamieszanie powiększa się gdy twórca języka uważa, ze problem zostanie rozwiazany przez wprowadzenie odśmiecacza (''ang''. garbage collector). W r. 1995 powstał język Java. Jego twórcy w artykule white paper tłumaczyli: nie wolno wprowadzac do języka instrukcji delete bo w ten sposób moga pojawic się błedy wiszacych referencji. A poniewaz Java jest wyposażona w odśmiecacz, to wywołując go poleceniem gc() zawsze będziesz mógł usunąć niepotrzebne  obiekty. Juz w dwa lat apóźniej w 1997 okazało się, że odśmiecacz nie może usunąć obiektu ''o'', dla którego wcześniej starannie nie usunieto wszystkich wskazujących nań referencji. Okazało się, że zadanie takie jest nierealne. Programista chcący się pozbyc niepotrzebnego obiektu musiałby pamietac o wszystkich wskaźnikach na taki obiekt, również tych, które postały automatycznie poprzez zarządzanie strukturami danych takimijak kolejki, stosy czy drzewa. Wprowadzono więc w Javie referencje mocne i słabe. Podobnie jest w Pytonie. Nadal jednak pozostaje problem: niewielu programistów w Javie zdaje sobie sprawę z tego , że istnieja słabe referencje i jak z nich korzystać.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>'''Przykład'''. Zarządzanie pamięcią obiektów nie jest sprawą trywialną.  Jeśli system zarządzania obiektami nie umożliwi usuwania obiektów już niepotrzebnych, to może to doprowadzić do ''wycieku pamieci''. Zjawisko takie jest nie tylko niepożądane, lecz niebezpieczne. Z drugiej strony zezwolenie na usuwanie obiektu może prowadzić do bardzo groźnych i trudnych do wykrycia błędów tzw. ''wiszących referencji''. Błąd taki powstaje gdy obiekt jest wartościa dwu zmiennych ''x'' i ''y'' . Polecenie: delete(y) (w jezyku C++, free(y) w Pascalu) spowoduje, że obiekt zostanie usunięty, zmienna ''y'' przyjmie wartość nil. Zmienna x utrzymuje swą poprzednią wartość sugerując, że wskazuje ona na jakiś obiekt. Po chwili może powstać jakiś nowy obiekt innego typu i pewna zmienna ''z'' może wskazywac na ten obiekt. Taka sytuacja to ''błąd sprzecznych informacji''. Zmienna ''x'' mówi tu jest obiekt typu ''T'', zmienna ''z'' mówi tu jest obiekt typu ''U''. Zamieszanie powiększa się gdy twórca języka uważa, ze problem zostanie rozwiazany przez wprowadzenie odśmiecacza (''ang''. garbage collector). W r. 1995 powstał język Java. Jego twórcy w artykule white paper tłumaczyli: nie wolno wprowadzac do języka instrukcji delete bo w ten sposób moga pojawic się błedy wiszacych referencji. A poniewaz Java jest wyposażona w odśmiecacz, to wywołując go poleceniem gc() zawsze będziesz mógł usunąć niepotrzebne  obiekty. Juz w dwa lat apóźniej w 1997 okazało się, że odśmiecacz nie może usunąć obiektu ''o'', dla którego wcześniej starannie nie usunieto wszystkich wskazujących nań referencji. Okazało się, że zadanie takie jest nierealne. Programista chcący się pozbyc niepotrzebnego obiektu musiałby pamietac o wszystkich wskaźnikach na taki obiekt, również tych, które postały automatycznie poprzez zarządzanie strukturami danych takimijak kolejki, stosy czy drzewa. Wprowadzono więc w Javie referencje mocne i słabe. Podobnie jest w Pytonie. Nadal jednak pozostaje problem: niewielu programistów w Javie zdaje sobie sprawę z tego , że istnieja słabe referencje i jak z nich korzystać. Profesor Antoni Kreczmar sformułował problem inaczej: ''czy istnieje taka struktura danych, która pozwala przechowywać obiekty, wskażniki do nich i usuwać w sposób bezpieczny i efektywne obiekty wskazane przez programistę''. Powyższe sformułowanie jest tylko szkicem pełnej specyfikacji wymagań. Szczegółową implementację systemu Kreczmara można znaleźć w []. Analizę wymagań przeprowadziła Hanna Oktaba w rozprawie doktorskiej, zob. [].</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> </div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Profesor Antoni Kreczmar sformułował problem inaczej: ''czy istnieje taka struktura danych, która pozwala przechowywać obiekty, wskażniki do nich i usuwać w sposób bezpieczny i efektywne obiekty wskazane przez programistę''. Powyższe sformułowanie jest tylko szkicem pełnej specyfikacji wymagań. Szczegółową implementację systemu Kreczmara można znaleźć w []. Analizę wymagań przeprowadziła Hanna Oktaba w rozprawie doktorskiej, zob. [].</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Nie twierdzimy, że wszyscy powinni zacząć programować w Loglanie. Dziwi jednak, że od ponad 30 lat od ukazania się publikacji G. Cioni i A. Kreczmara, żaden z nowych języków, lub nowej wersji języka już istniejącego, nie zauważył, że istnieje tanie i bezpieczne rozwiązanie problemu programowalnej dealokacji obiektów.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Nie twierdzimy, że wszyscy powinni zacząć programować w Loglanie. Dziwi jednak, że od ponad 30 lat od ukazania się publikacji G. Cioni i A. Kreczmara, żaden z nowych języków, lub nowej wersji języka już istniejącego, nie zauważył, że istnieje tanie i bezpieczne rozwiązanie problemu programowalnej dealokacji obiektów.</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Linia 9:</td>
<td colspan="2" class="diff-lineno">Linia 7:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>A oto lista problemów wraz z informacjami o znalezionych rozwiązaniach.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>A oto lista problemów wraz z informacjami o znalezionych rozwiązaniach.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>   </div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>   </div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Problem programowanej, bezpiecznej dealokacji obiektów</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Problem programowanej, bezpiecznej dealokacji obiektów<ins class="diffchange diffchange-inline">. Omówiony powyżej, zob[]</ins></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Problem wyznaczania klas bazowych. Klasa A może rozszerzać klasę B (inaczej, klasa A dziedziczy z klasy B). Jeśli język programowania taki jak Loglan, Java etc. dopuszcza zagnieżżanie klas, to w jednym programie może znaleźć sie wiele klas o nazwie B. Która z tych klas jest tą rozszerzaną? Problem nie jest taki trudny w Simuli'67. Nieco trudniejszy w Loglanie'82. Problem wyznaczania klasy bazowej jest dość skomplikowany w Javie, poczynając od wersji Java 1.2.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Problem wyznaczania klas bazowych. Klasa A może rozszerzać klasę B (inaczej, klasa A dziedziczy z klasy B). Jeśli język programowania taki jak Loglan, Java etc. dopuszcza zagnieżżanie klas, to w jednym programie może znaleźć sie wiele klas o nazwie B. Która z tych klas jest tą rozszerzaną? Problem nie jest taki trudny w Simuli'67. Nieco trudniejszy w Loglanie'82. Problem wyznaczania klasy bazowej jest dość skomplikowany w Javie, poczynając od wersji Java 1.2. Rozwiązanie problemu zawarliśy w publikacjach []. Zwracamy uwagę, że opis zawarty w Java Language Specification jest rozproszony po wielu stronach tej książki i niepełny.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Rozwiązanie problemu zawarliśy w publikacjach []. Zwracamy uwagę, że opis zawarty w Java Language Specification jest rozproszony po wielu stronach tej książki i niepełny.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* Problem statyczne, dynamiczne, inne ... wiązanie aplikacyjnego wystąpienia identyfikatora z odpowiednią deklaracją tego indeyfikatora.  </div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* Problem statyczne, dynamiczne, inne ... wiązanie aplikacyjnego wystąpienia identyfikatora z odpowiednią deklaracją tego indeyfikatora.  </div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Problem Display Vector'a. Dostęp kodu procedury do wielkości nielokalnych nasuwa pytania jak należy obliczać adres wielkości nielokalnej? Poniewaz procedury i funkcje mogą opisywc obliczenia rekurencyjne nie mozna wyznaczyć adrsu wielkości nielokalnej przed rozpoczęciem wykonywania programu (podczas kompilacji). Eleganckie rozwiązanie podał E.W. Dijkstra [] proponując strukturę danych nazwaną Display Vector. Wiele implementacji języków Algol60, Pascal i Simula67 stosuje ten mechanizm. Jeśli jednak język programowania zezwala na zagnieżdżanie klas i dziedziczenie bardziej swobodne niż to dozwolone w Simuli, to sprawa się komplikuje.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Problem Display Vector'a. Dostęp kodu procedury do wielkości nielokalnych nasuwa pytania jak należy obliczać adres wielkości nielokalnej? Poniewaz procedury i funkcje mogą opisywc obliczenia rekurencyjne nie mozna wyznaczyć adrsu wielkości nielokalnej przed rozpoczęciem wykonywania programu (podczas kompilacji). Eleganckie rozwiązanie podał E.W. Dijkstra [] proponując strukturę danych nazwaną Display Vector. Wiele implementacji języków Algol60, Pascal i Simula67 stosuje ten mechanizm. Jeśli jednak język programowania zezwala na zagnieżdżanie klas i dziedziczenie bardziej swobodne niż to dozwolone w Simuli, to sprawa się komplikuje. <ins class="diffchange diffchange-inline"><br /></ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Pierwsze rozwiązanie jakie znaleźliśmy umożliwiło stosowanie mechanizmu Display Vectora, ale za pewną cenę. Okazało sie, że semantyka języka nie była w pełni statyczna. Błąd ten znalazł i wskazał prof. Hans Langmaack z Uniwersytetu w Kilonii. We współpracy z nim znaleziono poprawne rozwiązanie problemu, które pozwala zachowac mechanizm Display Vectora.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Pierwsze rozwiązanie jakie znaleźliśmy umożliwiło stosowanie mechanizmu Display Vectora, ale za pewną cenę. Okazało sie, że semantyka języka nie była w pełni statyczna. Błąd ten znalazł i wskazał prof. Hans Langmaack z Uniwersytetu w Kilonii. We współpracy z nim znaleziono poprawne rozwiązanie problemu, które pozwala zachowac mechanizm Display Vectora.</div></td></tr>
</table>AndrzejSalwickihttp://lem12.uksw.edu.pl/index.php?title=Badania_podstawowe&diff=1272&oldid=prevAndrzejSalwicki o 12:39, 29 mar 20142014-03-29T12:39:21Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← poprzednia wersja</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Wersja z 12:39, 29 mar 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Linia 1:</td>
<td colspan="2" class="diff-lineno">Linia 1:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Podczas prac w projekcie Loglan'82 napotkano wiele problemów. Zanim podjęto decyzję w konkretnej sprawie, formułowaliśmy problem dbając o precyzję i staraliśmy się znaleźć jego rozwiązanie.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Podczas prac w projekcie Loglan'82 napotkano wiele problemów. Zanim podjęto decyzję w konkretnej sprawie, formułowaliśmy problem dbając o precyzję i staraliśmy się znaleźć jego rozwiązanie.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>'''Przykład'''. Zarządzanie pamięcią obiektów nie jest sprawą trywialną.  Jeśli system zarządzania obiektami nie umożliwi usuwania obiektów już niepotrzebnych, to może to doprowadzić do ''wycieku pamieci''. Zjawisko takie jest nie tylko niepożądane, lecz niebezpieczne. Z drugiej strony zezwolenie na usuwanie obiektu może prowadzić do bardzo groźnych i trudnych do wykrycia błędów tzw. ''wiszących referencji''. Błąd taki powstaje gdy obiekt jest wartościa dwu zmiennych ''x'' i ''y'' . Polecenie: delete(y) (w jezyku C++, free(y) w Pascalu) spowoduje, że obiekt zostanie usunięty, zmienna ''y'' przyjmie wartość nil. Zmienna x utrzymuje swą poprzednią wartość <del class="diffchange diffchange-inline">sugerująć</del>, że wskazuje ona na jakiś obiekt. Po chwili może powstać jakiś nowy obiekt innego typu i pewna zmienna ''z'' może wskazywac na ten obiekt. Taka sytuacja to ''błąd sprzecznych informacji''. Zmienna ''x'' mówi tu jest obiekt typu ''T'', zmienna ''z'' mówi tu jest obiekt typu ''U''. Zamieszanie powiększa się gdy twórca języka uważa, ze problem zostanie rozwiazany przez wprowadzenie odśmiecacza (''ang''. garbage collector).</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>'''Przykład'''. Zarządzanie pamięcią obiektów nie jest sprawą trywialną.  Jeśli system zarządzania obiektami nie umożliwi usuwania obiektów już niepotrzebnych, to może to doprowadzić do ''wycieku pamieci''. Zjawisko takie jest nie tylko niepożądane, lecz niebezpieczne. Z drugiej strony zezwolenie na usuwanie obiektu może prowadzić do bardzo groźnych i trudnych do wykrycia błędów tzw. ''wiszących referencji''. Błąd taki powstaje gdy obiekt jest wartościa dwu zmiennych ''x'' i ''y'' . Polecenie: delete(y) (w jezyku C++, free(y) w Pascalu) spowoduje, że obiekt zostanie usunięty, zmienna ''y'' przyjmie wartość nil. Zmienna x utrzymuje swą poprzednią wartość <ins class="diffchange diffchange-inline">sugerując</ins>, że wskazuje ona na jakiś obiekt. Po chwili może powstać jakiś nowy obiekt innego typu i pewna zmienna ''z'' może wskazywac na ten obiekt. Taka sytuacja to ''błąd sprzecznych informacji''. Zmienna ''x'' mówi tu jest obiekt typu ''T'', zmienna ''z'' mówi tu jest obiekt typu ''U''. Zamieszanie powiększa się gdy twórca języka uważa, ze problem zostanie rozwiazany przez wprowadzenie odśmiecacza (''ang''. garbage collector)<ins class="diffchange diffchange-inline">. W r. 1995 powstał język Java. Jego twórcy w artykule white paper tłumaczyli: nie wolno wprowadzac do języka instrukcji delete bo w ten sposób moga pojawic się błedy wiszacych referencji. A poniewaz Java jest wyposażona w odśmiecacz, to wywołując go poleceniem gc() zawsze będziesz mógł usunąć niepotrzebne  obiekty. Juz w dwa lat apóźniej w 1997 okazało się, że odśmiecacz nie może usunąć obiektu ''o'', dla którego wcześniej starannie nie usunieto wszystkich wskazujących nań referencji. Okazało się, że zadanie takie jest nierealne. Programista chcący się pozbyc niepotrzebnego obiektu musiałby pamietac o wszystkich wskaźnikach na taki obiekt, również tych, które postały automatycznie poprzez zarządzanie strukturami danych takimijak kolejki, stosy czy drzewa. Wprowadzono więc w Javie referencje mocne i słabe. Podobnie jest w Pytonie. Nadal jednak pozostaje problem: niewielu programistów w Javie zdaje sobie sprawę z tego , że istnieja słabe referencje i jak z nich korzystać.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">Profesor Antoni Kreczmar sformułował problem inaczej: ''czy istnieje taka struktura danych, która pozwala przechowywać obiekty, wskażniki do nich i usuwać w sposób bezpieczny i efektywne obiekty wskazane przez programistę''. Powyższe sformułowanie jest tylko szkicem pełnej specyfikacji wymagań. Szczegółową implementację systemu Kreczmara można znaleźć w []. Analizę wymagań przeprowadziła Hanna Oktaba w rozprawie doktorskiej, zob. [].</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">Nie twierdzimy, że wszyscy powinni zacząć programować w Loglanie. Dziwi jednak, że od ponad 30 lat od ukazania się publikacji G. Cioni i A. Kreczmara, żaden z nowych języków, lub nowej wersji języka już istniejącego, nie zauważył, że istnieje tanie i bezpieczne rozwiązanie problemu programowalnej dealokacji obiektów.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">A oto lista problemów wraz z informacjami o znalezionych rozwiązaniach.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline"> </ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">* Problem programowanej, bezpiecznej dealokacji obiektów</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">* Problem wyznaczania klas bazowych. Klasa A może rozszerzać klasę B (inaczej, klasa A dziedziczy z klasy B). Jeśli język programowania taki jak Loglan, Java etc. dopuszcza zagnieżżanie klas, to w jednym programie może znaleźć sie wiele klas o nazwie B. Która z tych klas jest tą rozszerzaną? Problem nie jest taki trudny w Simuli'67. Nieco trudniejszy w Loglanie'82. Problem wyznaczania klasy bazowej jest dość skomplikowany w Javie, poczynając od wersji Java 1.2.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">Rozwiązanie problemu zawarliśy w publikacjach []. Zwracamy uwagę, że opis zawarty w Java Language Specification jest rozproszony po wielu stronach tej książki i niepełny.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">* Problem statyczne, dynamiczne, inne ... wiązanie aplikacyjnego wystąpienia identyfikatora z odpowiednią deklaracją tego indeyfikatora. </ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">* Problem Display Vector'a. Dostęp kodu procedury do wielkości nielokalnych nasuwa pytania jak należy obliczać adres wielkości nielokalnej? Poniewaz procedury i funkcje mogą opisywc obliczenia rekurencyjne nie mozna wyznaczyć adrsu wielkości nielokalnej przed rozpoczęciem wykonywania programu (podczas kompilacji). Eleganckie rozwiązanie podał E.W. Dijkstra [] proponując strukturę danych nazwaną Display Vector. Wiele implementacji języków Algol60, Pascal i Simula67 stosuje ten mechanizm. Jeśli jednak język programowania zezwala na zagnieżdżanie klas i dziedziczenie bardziej swobodne niż to dozwolone w Simuli, to sprawa się komplikuje.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">Pierwsze rozwiązanie jakie znaleźliśmy umożliwiło stosowanie mechanizmu Display Vectora, ale za pewną cenę. Okazało sie, że semantyka języka nie była w pełni statyczna. Błąd ten znalazł i wskazał prof. Hans Langmaack z Uniwersytetu w Kilonii. We współpracy z nim znaleziono poprawne rozwiązanie problemu, które pozwala zachowac mechanizm Display Vectora</ins>.</div></td></tr>
</table>AndrzejSalwickihttp://lem12.uksw.edu.pl/index.php?title=Badania_podstawowe&diff=1271&oldid=prevAndrzejSalwicki o 10:09, 29 mar 20142014-03-29T10:09:17Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← poprzednia wersja</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Wersja z 10:09, 29 mar 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Linia 1:</td>
<td colspan="2" class="diff-lineno">Linia 1:</td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Podczas prac w projekcie Loglan'82 napotkano wiele problemów. Zanim podjęto decyzję w konkretnej sprawie, <del class="diffchange diffchange-inline">formulowalismy </del>problem dbając o precyzję i staraliśmy się znaleźć jego rozwiązanie.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Podczas prac w projekcie Loglan'82 napotkano wiele problemów. Zanim podjęto decyzję w konkretnej sprawie, <ins class="diffchange diffchange-inline">formułowaliśmy </ins>problem dbając o precyzję i staraliśmy się znaleźć jego rozwiązanie.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Przykład. Zarządzanie pamięcią obiektów nie jest sprawą trywialną.  Jeśli system zarządzania obiektami nie umożliwi usuwania obiektów już niepotrzebnych, to może to doprowadzić do ''wycieku pamieci''. Zjawisko takie jest nie tylko niepożądane, lecz niebezpieczne.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">'''</ins>Przykład<ins class="diffchange diffchange-inline">'''</ins>. Zarządzanie pamięcią obiektów nie jest sprawą trywialną.  Jeśli system zarządzania obiektami nie umożliwi usuwania obiektów już niepotrzebnych, to może to doprowadzić do ''wycieku pamieci''. Zjawisko takie jest nie tylko niepożądane, lecz niebezpieczne<ins class="diffchange diffchange-inline">. Z drugiej strony zezwolenie na usuwanie obiektu może prowadzić do bardzo groźnych i trudnych do wykrycia błędów tzw. ''wiszących referencji''. Błąd taki powstaje gdy obiekt jest wartościa dwu zmiennych ''x'' i ''y'' . Polecenie: delete(y) (w jezyku C++, free(y) w Pascalu) spowoduje, że obiekt zostanie usunięty, zmienna ''y'' przyjmie wartość nil. Zmienna x utrzymuje swą poprzednią wartość sugerująć, że wskazuje ona na jakiś obiekt. Po chwili może powstać jakiś nowy obiekt innego typu i pewna zmienna ''z'' może wskazywac na ten obiekt. Taka sytuacja to ''błąd sprzecznych informacji''. Zmienna ''x'' mówi tu jest obiekt typu ''T'', zmienna ''z'' mówi tu jest obiekt typu ''U''. Zamieszanie powiększa się gdy twórca języka uważa, ze problem zostanie rozwiazany przez wprowadzenie odśmiecacza (''ang''. garbage collector)</ins>.</div></td></tr>
</table>AndrzejSalwickihttp://lem12.uksw.edu.pl/index.php?title=Badania_podstawowe&diff=1270&oldid=prevAndrzejSalwicki: Utworzono nową stronę "Podczas prac w projekcie Loglan'82 napotkano wiele problemów. Zanim podjęto decyzję w konkretnej sprawie, formulowalismy problem dbając o precyzję i staraliśmy si..."2014-03-28T10:37:44Z<p>Utworzono nową stronę "Podczas prac w projekcie Loglan'82 napotkano wiele problemów. Zanim podjęto decyzję w konkretnej sprawie, formulowalismy problem dbając o precyzję i staraliśmy si..."</p>
<p><b>Nowa strona</b></p><div>Podczas prac w projekcie Loglan'82 napotkano wiele problemów. Zanim podjęto decyzję w konkretnej sprawie, formulowalismy problem dbając o precyzję i staraliśmy się znaleźć jego rozwiązanie.<br />
Przykład. Zarządzanie pamięcią obiektów nie jest sprawą trywialną. Jeśli system zarządzania obiektami nie umożliwi usuwania obiektów już niepotrzebnych, to może to doprowadzić do ''wycieku pamieci''. Zjawisko takie jest nie tylko niepożądane, lecz niebezpieczne.</div>AndrzejSalwicki