Added upstream from http://ftp.icm.edu.pl/pub/loglan/
[loglan.git] / loglan96 / loglan84.rs / antek2.txt
1 From:   MX%"antek@mimuw.edu.pl"  1-MAR-1993 15:38:21.16\r
2 To:     SALWICKI\r
3 CC:     \r
4 Subj:   \r
5 \r
6 Date: Mon, 1 Mar 93 14:59:27 GMT\r
7 From: antek@mimuw.edu.pl\r
8 To: salwicki@pauvx1.univ-pau.fr\r
9 \r
10 \1cw\r
11 \U1STANDARD\r
12 \U2POLISH\r
13 \U3ITALIC\r
14 \U4BOLD\r
15 \U"ORATOR\r
16 \U(PLORATOR\r
17 \+\r
18 \+\r
19 \ \ \ \ \\r
20 \-\r
21 \+\r
22 \+\r
23 \^\ \ \ \ \ \ \ \ \ \ \ \"PRZENASZALNY RUNNING SYSTEM NOWEGO LOGLANU\ \ \ \ \ \ \ \ \ \ \^\r
24 \-\r
25 \+\r
26 \+\r
27 \^\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ NAPISANY W J\(E\"ZYKU C\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \^\r
28 \-\r
29 \+\r
30 \r
31 \-\r
32 \+\r
33 \,\r
34 \-\r
35 \+\r
36 \+\r
37 \r
38 \-\r
39 \+\r
40 \r
41 \-\r
42 \+\r
43 \^\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \1Antoni  Kreczmar\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \^\r
44 \-\r
45 \+\r
46 \ \\r
47 \-\r
48 \+\r
49 \r
50 \-\r
51 \+\r
52 \r
53 \-\r
54 \+\r
55 1. Wst\2e\1p\r
56 \-\r
57 \+\r
58 \r
59 \-\r
60 \+\r
61 Poni\2x\1szy kr\2o\1tki opis Running Systemu dla \ nowego \ Loglanu \ opiera\r
62 \-\r
63 \+\r
64 si\2e \ \1w \ du\2x\1ym \ stopniu \ na \ poprzednich \ dokumentacjach. \ \ Przede\r
65 \-\r
66 \+\r
67 wszystkim na opisie Running \ Systemu \ Loglanu-82 \ oraz \ na \ dw\2o\1ch\r
68 \-\r
69 \+\r
70 pracach opublikowanych, \ tj. \ G.Cioni, \ "Programmed \ deallocation\r
71 \-\r
72 \+\r
73 without \ dangling \ reference" \ IPL \ 18(1984) \  pp.179-187, \ \ oraz\r
74 \-\r
75 \+\r
76 M.Krause, \ A.Kreczmar, \ H.Langmaack, \ A.Salwicki, \ M.Warpechowski\r
77 \-\r
78 \+\r
79 "Algebraic approach to ...." w Lecture Notes in Computer \ Science\r
80 \-\r
81 \+\r
82 Springer 208, pp.134-156. W pierwszej z tych prac \ opisano \ system\r
83 \-\r
84 \+\r
85 adresowania \ po\2s\1redniego \ dla \ Loglanu, \ \ a \ \ w \ \ drugiej \ \ dosy\2c\r
86 \-\r
87 \+\r
88 \1skomplikowane \ algorytmy \ poprawiania \ \  tablicy \ \ Display \ \ oraz\r
89 \-\r
90 \+\r
91 adresowania nielokalnego dla j\2e\1zyk\2o\1w z metodami dziedziczenia \ na\r
92 \-\r
93 \+\r
94 r\2ox\1nych poziomach. Bez znajomo\2s\1ci \ tych \ dw\2o\1ch \ prac \ zrozumienie\r
95 \-\r
96 \+\r
97 poni\2x\1szego kr\2o\1tkiego raportu jest niezwykle trudne. Radzimy \ wi\2e\1c\r
98 \-\r
99 \+\r
100 przed przyst\2a\1pienie do czytania niniejszego tekstu  zapozna\2c \ \1si\2e\r
101 \-\r
102 \+\r
103 \1z tymi dwiema pracami, \ jak \ r\2o\1wnie\2x \ \1z \ dokumentacj\2a \ \1w \   dw\2o\1ch\r
104 \-\r
105 \+\r
106 poprzednich jej postaciach (dla Loglanu-82 w \ pe\2l\1ni \ uruchominego\r
107 \-\r
108 \+\r
109 i dla Loglanu-84 w pr\2o\1bnej wersji loglanowej). \,\r
110 \-\r
111 \+\r
112 \,\r
113 \-\r
114 \+\r
115 Nowy RS  system dla nowego Loglanu \ zosta\2l \ \1napisany \ najpierw \ w\r
116 \-\r
117 \+\r
118 Loglanie-82, \ a \ nast\2e\1pnie \  w \ j\2e\1zyku \ C. \ Wyb\2o\1r \ j\2e\1zyka \ C \ by\2l\r
119 \-\r
120 \+\r
121 \1nieprzypadkowy. Ot\2ox \1w j\2e\1zyku tym mo\2x\1na wyrazi\2c \ \1wiele \ w\2l\1asno\2s\1ci\r
122 \-\r
123 \+\r
124 niskopoziomowych, a posiada \ on \ tak\2x\1e \ wszystkie \ zalety \ j\2e\1zyka\r
125 \-\r
126 \+\r
127 wysokopoziomowego.  Przet\2l\1umaczenie wersji loglanowej na  j\2e\1zyk C\r
128 \-\r
129 \+\r
130 nie \ przedstawia\2l\1o \ wi\2e\1kszych \ trudno\2s\1ci, \ umo\2x\1liwi\2l\1o \  natomiast\r
131 \-\r
132 \+\r
133 stworzenie bardzo efektywnego systemu \2l\1atwego do przenoszenia. \,\r
134 \-\/\f\r
135 \+\r
136 RS system  napisany \ w \ C \ daje \ mo\2x\1liwo\2sc \ \1wykonywania \ programu\r
137 \-\r
138 \+\r
139 loglanowego przet\2l\1umaczonego na j\2e\1zyk C. Taki \ spos\2o\1b \ realizacji\r
140 \-\r
141 \+\r
142 Loglanu \ wydaje \ mi \ si\2e \ \1najprostszy. \ Napisanie \ kompilatora \ z\r
143 \-\r
144 \+\r
145 Loglanu na C jest \ znacznie \ \2l\1atwiejsze \ ni\2x \ \1napisanie \  pe\2l\1nego\r
146 \-\r
147 \+\r
148 kompilatora \ na \ docelow\2a \  \1maszyn\2e\1. \ Problem \ przenoszenia \ jest\r
149 \-\r
150 \+\r
151 rozwi\2a\1zany w spos\2o\1b natychmiastowy. Ponadto  kompilator taki mo\2x\1e\r
152 \-\r
153 \+\r
154 korzysta\2c \1z bogactwa konstrukcji j\2e\1zyka C. Nie b\2e\1dzie problemu ze\r
155 \-\r
156 \+\r
157 sta\2l\1ymi, \ \ instrukcjami \ \ \ steruj\2a\1cymi \ \ \ w \ \ \ obr\2e\1bie \ \ \ modu\2l\1u,\r
158 \-\r
159 \+\r
160 wej\2s\1ciem-wyj\2s\1ciem, \2l\1a\2n\1cuchami itp. \ Niezwykle \ upro\2s\1ci \ si\2e \  \1sam\r
161 \-\r
162 \+\r
163 proces translacji. Wyra\2x\1enia mog\2a \1pozosta\2c \1w prawie niezmienionej\r
164 \-\r
165 \+\r
166 postaci - jedynie dost\2e\1p do  zmiennych loglanowych b\2e\1dzie wymaga\2l\r
167 \-\r
168 \+\r
169 \1wywo\2l\1ywania specjalnych makro  - ale proces \2l\1adowania \ rejestr\2o\1w,\r
170 \-\r
171 \+\r
172 optymalizacji lokalnej  itd. przerzucony  zostanie na system \  C.\r
173 \-\r
174 \+\r
175 A \ przecie\2x \ \1jest \ to \ system \ niezwykle \ \ efektywny. \ \ Wi\2e\1kszo\2sc\r
176 \-\r
177 \+\r
178 \1kompilator\2o\1w C daje kod \ dobrze \ zoptymalizowany. \ W \ ten \ prosty\r
179 \-\r
180 \+\r
181 spos\2o\1b  mo\2x\1emy wykorzysta\2c \1si\2le  \1tego j\2e\1zyka \ zostawiaj\2a\1c \ troski\r
182 \-\r
183 \+\r
184 techniczne \ \ \  (rejestry, \ \ \ arytmetyka \ \ \ maszyny, \ \ \ \ etykiety,\r
185 \-\r
186 \+\r
187 optymalizacja) systemowi C. \,\r
188 \-\r
189 \+\r
190 \,\r
191 \-\r
192 \+\r
193 Opisany poni\2x\1ej system sk\2l\1ada  si\2e \1z dwu \ plik\2o\1w \ : \  Rs.c \  oraz\r
194 \-\r
195 \+\r
196 Rsdata.h. Plik Rsdata.h jest \ tzw. \ plikiem \ nag\2lo\1wkowym \ (header\r
197 \-\r
198 \+\r
199 file).  W nim wyra\2x\1ono wszystkie wsp\2o\1lne struktury \  danych \ oraz\r
200 \-\r
201 \+\r
202 podstawowe zmienne. Na pliku Rs.c znajduje \ si\2e \ \1natomiast \ pe\2l\1na\r
203 \-\r
204 \+\r
205 biblioteka \ \ Running \ \ Systemu. \ \ Tekst \ \ programu \ \ \ loglanowego\r
206 \-\r
207 \+\r
208 przet\2l\1umaczony  na  C  musi w\2la\1cza\2c \1za pomoc\2a \1instrukcji \ include\r
209 \-\r
210 \+\r
211 plik Rsdata.h. W taki sam spos\2o\1b w\2la\1czany \ jest \ ten \ plik \ przez\r
212 \-\r
213 \+\r
214 Rs.c. \,\r
215 \-\r
216 \+\r
217 \,\r
218 \-\r
219 \+\r
220 \+\r
221                                                Edmonton, Maj 1988\r
222 \-\r
223 \+\r
224 \+\r
225                                           Warszawa, Sierpie\2n \11988\,\r
226 \-\r
227 \+\r
228 \,\r
229 \-\r
230 \+\r
231 \,\r
232 \-\f\r
233 \+\r
234 \,\r
235 \-\r
236 \+\r
237 2. Opis struktur danych na pliku Rsdata.h\r
238 \-\r
239 \+\r
240 \r
241 \-\r
242 \+\r
243 Na pliku \ tym \ znajduj\2a \ \1si\2e \ \1deklaracje \ struktury \ prototyp\2o\1w \ i\r
244 \-\r
245 \+\r
246 offset\2o\1w. Zajmiemy \ si\2e \ \1najpierw \ struktur\2a \ \ \1prototypu. \ \ Ma \ \ on\r
247 \-\r
248 \+\r
249 nast\2e\1puj\2a\1c\2a \1posta\2c\1: \,\r
250 \-\r
251 \+\r
252 \,\r
253 \-\r
254 \+\r
255 \4struct \3Prototype\r
256 \-\r
257 \+\r
258 \1{\r
259 \-\r
260 \+\r
261 \  \4int \3kind\1;\r
262 \-\r
263 \+\r
264 \  \4int \3num\1;\r
265 \-\r
266 \+\r
267 \  \4int \3lspan\1, \3rspan\1;\r
268 \-\r
269 \+\r
270 \  \4int \3references\1;\r
271 \-\r
272 \+\r
273 \  \4int \3decl\1, \3level\1;\r
274 \-\r
275 \+\r
276 \  \4int \3lastwill\1;\r
277 \-\r
278 \+\r
279 \  \4int \3permadd\1;\r
280 \-\r
281 \+\r
282 \  \4int \3Sloffset\1, \3Dloffset\1;\r
283 \-\r
284 \+\r
285 \  \4int \3Statoffset\1, \3Lscoffset\1;\r
286 \-\r
287 \+\r
288 \  \4int \3handlist\1;\r
289 \-\r
290 \+\r
291 \  \4int \3pref\1, \3pslength\1;\r
292 \-\r
293 \+\r
294 };\r
295 \-\r
296 \+\r
297 \r
298 \-\r
299 \+\r
300 Atrybut \3kind \1definiuje rodzaj \ prototypu. \ Mamy \ nast\2e\1puj\2a\1ce \ ich\r
301 \-\r
302 \+\r
303 rodzaje: CLASS, SUBROUTINE, PROCESS, COROUTINE, HANDLER, \ RECORD,\r
304 \-\r
305 \+\r
306 PRIMITARRAY, REFARRAY, SUBARRAY,  STRUCTARRAY, POINTARRAY. \  Pi\2ec\r
307 \-\r
308 \+\r
309 \1pierwszych nie wymaga wyja\2s\1nie\2n\1. RECORD jest klas\2a \1bez kodu i bez\r
310 \-\r
311 \+\r
312 innych modu\2lo\1w zadeklarowanych \ wewn\2a\1trz. \ Ten \ rodzaj \ prototypu\r
313 \-\r
314 \+\r
315 istnia\2l \1ju\2x \1w poprzedniej wersji  Running Systemu.  Ostanich pi\2ec\r
316 \-\r
317 \+\r
318 \1rodzaj\2o\1w dotyczy tablic. PRIMITARRAY jest tablic\2a \  \1o \ elementach\r
319 \-\r
320 \+\r
321 typu pierwotnego, \ REFARRAY \ jest \ tablic\2a \ \1typu \ referencyjnego,\r
322 \-\r
323 \+\r
324 SUBARRAY jest tablic\2a\1, kt\2o\1rej elementami s\2a \1domkni\2e\1cia \ procedur,\r
325 \-\r
326 \+\r
327 STRUCTARRAY jest tablic\2a \1o elementach typu z\2l\1o\2x\1onego \ i \ wreszcie\r
328 \-\r
329 \+\r
330 POINTARRAY \ jest \ tablic\2a \  \1typu \ \ referencyjnego, \ \ jednak\2x\1e \ \ o\r
331 \-\r
332 \+\r
333 elementach daj\2a\1cych  adresy  po\2s\1rednie  bez licznik\2o\1w. \ Taki \ typ\r
334 \-\r
335 \+\r
336 dodatkowy wprowadzili\2s\1my w nowej wersji \ RS \ w \ celu \ osi\2a\1gni\2e\1cia\r
337 \-\r
338 \+\r
339 wi\2e\1kszej efektywno\2s\1ci kodu. Zamiast \ pe\2l\1nego \ adresu \ wirtualnego\r
340 \-\r
341 \+\r
342 [adres po\2s\1redni, licznik] niekt\2o\1re referencje s\2a \ \1postaci \ [adres\r
343 \-\r
344 \+\r
345 po\2s\1redni]. \ Nie \ daj\2a \  \1one \ oczywi\2s\1cie \ gwarancji \ \  poprawno\2s\1ci\r
346 \-\r
347 \+\r
348 adresowania \ (mo\2x\1e \  wyst\2a\1pi\2c \  \1tzw. \ nieokre\2s\1lona \ \ referencja),\r
349 \-\/\f\r
350 \+\r
351 nimniej, \ je\2s\1li \ u\2x\1ytkownik \ jest \  pewny \ \  poprawno\2s\1ci \ \ swoich\r
352 \-\r
353 \+\r
354 adresowa\2n\1, mo\2x\1e cz\2esc \1lub \ wszystkie \ referencje \ zaznaczy\2c \ \1jako\r
355 \-\r
356 \+\r
357 proste. Poniewa\2x \1typy \ tablicowe \ s\2a \ \1rozr\2ox\1niane \ przez \ atrybut\r
358 \-\r
359 \+\r
360 \3kind, \1w\2s\1r\2o\1d rodzaj\2o\1w typ\2o\1w pojawi\2l \1si\2e \1tak\2x\1e typ POINTERARRAY. \,\r
361 \-\r
362 \+\r
363 \,\r
364 \-\r
365 \+\r
366 Drugim atrybutem prototypu jest \3num\1. Wskazuje on \ pozycj\2e \ \1danego\r
367 \-\r
368 \+\r
369 prototypu w tablicy PROT [] definiuj\2a\1cej wszystkie prototypy. \,\r
370 \-\r
371 \+\r
372 \r
373 \-\r
374 \+\r
375 Atrybuty \3lspan \1i \3rspan \1definiuj\2a \ \1rozmiar \ obiektu \ danego \ typu.\r
376 \-\r
377 \+\r
378 Wszystkie obiekty alokowane \ s\2a \ \1w \ tablicy \ M[ \ ]. \ Maj\2a\1c \ adres\r
379 \-\r
380 \+\r
381 obiektu \3am \1na lewo mamy rozmiar \ \3lspan\1, \ na \ prawo \ \3rspan\1, \ czyli\r
382 \-\r
383 \+\r
384 obiekt \ zajmuje \ elementy \ tablicy \ M[\3am-lspan\1..\3am\1+\3rspan\1]. \ Adres\r
385 \-\r
386 \+\r
387 prototypu usytuowany jest zawsze w s\2l\1owie M[\3am\1], tzn. maj\2a\1c adres\r
388 \-\r
389 \+\r
390 obiektu na zmiennej \3am\1, w\2l\1a\2s\1nie M[\3am\1] = \ \3num \ \1, \ gdzie \ \3num \ \1jest\r
391 \-\r
392 \+\r
393 adresem prototypu tego \ obiektu \ w \ tablicy \ PROT. \ Tablice \ maj\2a\r
394 \-\r
395 \+\r
396 \1rozmiar definiowany  dynamicznie. W s\2l\1owie \ M[\3am\1] \ jest \ zapisany\r
397 \-\r
398 \+\r
399 stosowny \ numer \  prototypu, \ natomiast \ \  dwa \ \ kolejne \ \  s\2l\1owa\r
400 \-\r
401 \+\r
402 definiuj\2a \1doln\2a \ \1i \ g\2o\1rn\2a \ \1granice \ wska\2z\1nika. \ Rozmiar \ elementu\r
403 \-\r
404 \+\r
405 tablicy w przypadku PRIMITARRAY podawany jest za pomoc\2a \ \1atrybutu\r
406 \-\r
407 \+\r
408 \3lspan\1. \,\r
409 \-\r
410 \+\r
411 \r
412 \-\r
413 \+\r
414 Pozosta\2l\1e atrybuty nie s\2a \1konieczne w przypadku tablic.\r
415 \-\r
416 \+\r
417 \r
418 \-\r
419 \+\r
420 Atrubut \3references \1definiuje struktur\2e \1referencji prototypu. \ Jest\r
421 \-\r
422 \+\r
423 to po prostu indeks  w tablicy  OFF[], kt\2o\1ra \ definiuje \ wszystkie\r
424 \-\r
425 \+\r
426 rodzaje struktur referencji (patrz definicja OFF poni\2x\1ej). \,\r
427 \-\r
428 \+\r
429 \,\r
430 \-\r
431 \+\r
432 Atrybuty \3decl \1i \ \3level \ \1odnosz\2a \ \1si\2e \ \1do \  struktury \ zagnie\2x\1d\2x\1e\2n\r
433 \-\r
434 \+\r
435 \1programu. Mianowicie \3decl \1jest indeksem w PROT \ ojca \ statycznego\r
436 \-\r
437 \+\r
438 danego modu\2l\1u, natomiast \3level \1jest g\2le\1boko\2s\1ci\2a \1zagnie\2x\1d\2x\1enia. \,\r
439 \-\r
440 \+\r
441 \r
442 \-\r
443 \+\r
444 Atrybut \3lastwill \1okre\2s\1la miejsce w module, od kt\2o\1rego rozpoczynaj\2a\r
445 \-\r
446 \+\r
447 \1si\2e \1instrukcje lastwill. \ W \ jaki \ spos\2o\1b \ modeluje \ si\2e \ \1kontrol\2e\r
448 \-\r
449 \+\r
450 \1sterowania podamy w punktach 4 i 10. \,\r
451 \-\r
452 \+\r
453 \,\r
454 \-\r
455 \+\r
456 Nast\2e\1pny atrybut \3permadd \1jest wsp\2o\1lnym adresem dla \ permutacji \ i\r
457 \-\r
458 \+\r
459 inwersji permutacji numer\2o\1w displaya.  Mianowicie plik \ loglanowy\r
460 \-\r
461 \+\r
462 definiuje dwie tablice \3perm\1[] i \3perminv\1[], kt\2o\1re \ musz\2a \ \1zawiera\2c\r
463 \-\r
464 \+\r
465 \1te permutacji. \ Przyk\2l\1adowo, \ dla \ \3perm\1[] \ = \ {0,1,2,0,2,1} \ oraz\r
466 \-\/\f\r
467 \+\r
468 \3perminv\1[] = {0,1,2,0,2,1}, indeks \3permadd\1=0 dla warto\2s\1ci \ \3level\1=2\r
469 \-\r
470 \+\r
471 okre\2s\1la permutacj\2e \1{0,1,2} \ (i \ te \ sam\2a \  \1odwrotn\2a\1), \  natomiast\r
472 \-\r
473 \+\r
474 \3permadd\1=2 dla  \3level \1te\2x \1r\2o\1wnym 2 daje perm={0,2,1} \ (i \ podobnie\r
475 \-\r
476 \+\r
477 te sam\2a \1odwrotn\2a\1}. \,\r
478 \-\r
479 \+\r
480 \,\r
481 \-\r
482 \+\r
483 Cztery \  kolejne \ atrybuty \ \ (\3Sloffset\1, \ \ \3Dloffset\1, \ \ \3Statoffset\1,\r
484 \-\r
485 \+\r
486 \3Lscoffset\1) definiuj\2a \1adresy wzgl\2e\1dne (offsety) czterech zmiennych\r
487 \-\r
488 \+\r
489 systemowych Sl, Dl, Statsl i  Lsc. Ka\2x\1dy \ modu\2l \ \1posiadaj\2a\1cy \ kod\r
490 \-\r
491 \+\r
492 musi \ mie\2c \ \1okre\2s\1lon\2a \ \1pozycj\2e \ \1Sl \ ojca, \ Dl \ \ ojca, \ \ lokalnego\r
493 \-\r
494 \+\r
495 sterowania Lsc i licznika Sl syn\2o\1w (Statsl). \ O \ tych \  zmiennych\r
496 \-\r
497 \+\r
498 systemowych b\2e\1dziemy m\2o\1wi\2c \1za chwil\2e\1. Tutaj natomiast \ chcieli\2s\1my\r
499 \-\r
500 \+\r
501 zwr\2o\1ci\2c \1uwag\2e \1na to, \2x\1e w poprzedniej \  wersji \ RS \ offsety \ tych\r
502 \-\r
503 \+\r
504 zmiennych by\2l\1y podawane w prototypie (ich pozycja \ by\2l\1a \ ustalona\r
505 \-\r
506 \+\r
507 na ko\2n\1cu obiektu). Wprowadzenie offset\2o\1w zmiennych systemowych do\r
508 \-\r
509 \+\r
510 prototyp\2o\1w skomplikuje kompilacj\2e\1,  ale przyspieszy i ujednorodni\r
511 \-\r
512 \+\r
513 RS. Dost\2e\1p do tych zmiennych \  b\2e\1dzie \ bowiem \ taki \ sam \ jak \ do\r
514 \-\r
515 \+\r
516 innych \ zmiennych \ wprowadzonych \ przez \ \ u\2x\1ytkownika \ \ czy \ \ te\2x\r
517 \-\r
518 \+\r
519 \1kompilator. \,\r
520 \-\r
521 \+\r
522 \r
523 \-\r
524 \+\r
525 Atrybut \3handlist \1definiuje list\2e \1handler\2o\1w zadeklarowanych w danym\r
526 \-\r
527 \+\r
528 module. Jest to  indeks w \ tablicy \ HL[], \ gdzie \ zdefiniowane \ s\2a\r
529 \-\r
530 \+\r
531 \1wszystkie takie listy. \ Tablica \ HL \ jest \ typu \ Hlstelem \ postaci\r
532 \-\r
533 \+\r
534 nast\2e\1puj\2a\1cej: \,\r
535 \-\r
536 \+\r
537 \r
538 \-\r
539 \+\r
540 \4struct \3Hlstelem\r
541 \-\r
542 \+\r
543 \1{\r
544 \-\r
545 \+\r
546 \  \4int \3hand\1;\r
547 \-\r
548 \+\r
549 \  \4int \3signlist\1;\r
550 \-\r
551 \+\r
552 \  \4int \3next\1;\r
553 \-\r
554 \+\r
555 };\r
556 \-\r
557 \+\r
558 \r
559 \-\r
560 \+\r
561 \r
562 \-\r
563 \+\r
564 Atrybut \3hand  \1jest indeksem w tablicy \ PROT \ w\2l\1a\2s\1ciwego \ handlera.\r
565 \-\r
566 \+\r
567 Natomiast atrybut \3signlist \ \1jest \ indeksem \ w \ tablicy \ SL[] \ typu\r
568 \-\r
569 \+\r
570 \3Sgelem\1, \ gdzie \ okre\2s\1lone \ s\2a \ \1numery \ sygna\2lo\1w \ zwi\2a\1zane \ z \ \ tym\r
571 \-\r
572 \+\r
573 handlerem. Typ \3Sgelem \1ma posta\2c \1nast\2e\1puj\2a\1c\2a\1: \,\r
574 \-\r
575 \+\r
576 \,\r
577 \-\f\r
578 \+\r
579 \4struct \3Sgelem\r
580 \-\r
581 \+\r
582 \1{\r
583 \-\r
584 \+\r
585 \  \4int \3signalnum\1;\r
586 \-\r
587 \+\r
588 \  \4int \3next\r
589 \-\r
590 \+\r
591 \1};\r
592 \-\r
593 \+\r
594 \r
595 \-\r
596 \+\r
597 \r
598 \-\r
599 \+\r
600 W ka\2x\1dym elemencie tablicy \ SL[] \ mamy \ numer \ sygna\2l\1u \ \3signalnum\1,\r
601 \-\r
602 \+\r
603 kt\2o\1ry jest warto\2s\1ci\2a \1absolutn\2a \1budowan\2a \1przez kompilator. \ Atrybut\r
604 \-\r
605 \+\r
606 \3next \1pokazuje na kolejny element takiej \ listy \ w \ SL[]. \ Podobnie\r
607 \-\r
608 \+\r
609 zreszt\2a \1atrybut \3next \1w HL[] wskazuje na nast\2e\1pny handler \ zwi\2a\1zany\r
610 \-\r
611 \+\r
612 z danym modu\2l\1em. Koniec ka\2x\1dej takiej listy \ (w \ obu \ przypadkach)\r
613 \-\r
614 \+\r
615 okre\2s\1la warto\2sc \3next\1=-1 (tak wybrano z uwagi na \ adresowanie \ w \ C\r
616 \-\r
617 \+\r
618 tablic od 0). \,\r
619 \-\r
620 \+\r
621 \r
622 \-\r
623 \+\r
624 Atrybut \3handlist \1wyst\2e\1puje tak\2x\1e w  prototypie handlera. \ Okre\2s\1la\r
625 \-\r
626 \+\r
627 on jedynie, \ czy \ handler \ ten \ odpowiada \ na \ wszystkie \ sygna\2l\1y\r
628 \-\r
629 \+\r
630 (others), \ czy \ \ te\2x \ \ \1jest \ \ deklarowany \ \ jako \ \ handler \ \  dla\r
631 \-\r
632 \+\r
633 wyspecyfikowanych \ numer\2o\1w \  sygna\2lo\1w. \ W \ \ pierwszym \ \ przypadku\r
634 \-\r
635 \+\r
636 warto\2sc \ \1tego \  atrybutu \ jest \  1 \ (hanlder \ dla \ \  others), \ \ w\r
637 \-\r
638 \+\r
639 pozosta\2l\1ych przypadkach warto\2sc \1tego atrybutu jest 0. \,\r
640 \-\r
641 \+\r
642 \r
643 \-\r
644 \+\r
645 \r
646 \-\r
647 \+\r
648 Dwa ostatnie atrybuty w prototypie ( \ \3pref\1, \ \3pslength\1) \ okre\2s\1laj\2a\r
649 \-\r
650 \+\r
651 \1struktur\2e \1prefiksowania. Nie musz\2a \1one \  wyst\2e\1powa\2c \ \1w \ przypadku\r
652 \-\r
653 \+\r
654 prototyp\2o\1w dla handler\2o\1w, gdy\2x \1handler nie mo\2x\1e by\2c \1prefiksowany.\r
655 \-\r
656 \+\r
657 Atrybut  \3pref \1jest indeksem w tablicy PROT modu\2l\1u \ prefiksuj\2a\1cego\r
658 \-\r
659 \+\r
660 (-1 gdy nie istnieje), \ atrybut \ \3pslength \ \1jest \ d\2l\1ugo\2s\1ci\2a \ \1ci\2a\1gu\r
661 \-\r
662 \+\r
663 prefiksuj\2a\1cego. \,\r
664 \-\r
665 \+\r
666 \r
667 \-\r
668 \+\r
669 Pozosta\2l\1a  do \ om\2o\1wienia \ struktura \ referencji. \ Ot\2ox \ \1z \ powodu\r
670 \-\r
671 \+\r
672 wprowadzenia bogactwa typ\2o\1w z\2l\1o\2x\1onych w nowym Loglanie, struktura\r
673 \-\r
674 \+\r
675 referencji \ w \ obiektach \ jest \ stosunkowo \ skomplikowana. \ Takie\r
676 \-\r
677 \+\r
678 struktury opisuje tablica OFF[] typu \3Offsets\1. \,\r
679 \-\r
680 \+\r
681 \r
682 \-\f\r
683 \+\r
684 \4struct \3Offsets\r
685 \-\r
686 \+\r
687 \1{\r
688 \-\r
689 \+\r
690 \  \4int \3kind\1;\r
691 \-\r
692 \+\r
693 \  \4int \3size\1, \3num\1;\r
694 \-\r
695 \+\r
696 \  \4int \3length\1, \3finish\1;\r
697 \-\r
698 \+\r
699 \  \4int \3head\1;\r
700 \-\r
701 \+\r
702 \  \4int \3references\1;\r
703 \-\r
704 \+\r
705 };\r
706 \-\r
707 \+\r
708 \,\r
709 \-\r
710 \+\r
711 \r
712 \-\r
713 \+\r
714 Atrybut \3kind \1jest nast\2e\1puj\2a\1cych \ rodzaj\2o\1w: \ SIMPLELIST, \ SEGMENT,\r
715 \-\r
716 \+\r
717 REPEATED \ oraz \ COMBINEDLIST. \ SIMPLELIST \ jest \ list\2a \ \ \1zwyk\2l\1ych\r
718 \-\r
719 \+\r
720 offset\2o\1w \  zmiennych \ referencyjnych \ w \ obiekcie. \ SEGMENT \ jest\r
721 \-\r
722 \+\r
723 szczeg\2o\1ln\2a  \1postaci\2a \ \1takiej \  listy, \ gdy \ te \  offsety \ zajmuj\2a\r
724 \-\r
725 \+\r
726 \1kolejne miejsca  w pami\2e\1ci (ten  typ wprowadzili\2s\1my \  ze \ wzgl\2e\1du\r
727 \-\r
728 \+\r
729 na tablice referencyjne,  jakkolwiek  jest \  on \ sprowadzalny \ do\r
730 \-\r
731 \+\r
732 przypadku poprzedniego). REPEATED jest \ n-krotn\2a \ \1iteracj\2a \ \1danej\r
733 \-\r
734 \+\r
735 struktury referencyjnej. COMBINEDLIST jest list\2a \1by\2c \1mo\2x\1e r\2ox\1nych\r
736 \-\r
737 \+\r
738 struktur referencji. \,\r
739 \-\r
740 \+\r
741 \,\r
742 \-\r
743 \+\r
744 Atrybut \3size \1okre\2s\1la ca\2l\1kowit\2a \1d\2l\1ugo\2sc \1opisywanej \ struktury  \ Dla\r
745 \-\r
746 \+\r
747 SIMPLELIST musi to \  by\2c \  \1d\2l\1ugo\2sc \ \1ca\2l\1ego \ obiektu, \ dla \ SEGMENT\r
748 \-\r
749 \+\r
750 r\2o\1wnie\2x \1d\2l\1ugo\2sc \1ca\2l\1ego obiektu, dla REPEATED  musi to by\2c \ \1d\2l\1ugo\2sc\r
751 \-\r
752 \+\r
753 \1powtarzanej struktury, i ostatecznie dla COMBINEDLIST  ma  to \ by\2c\r
754 \-\r
755 \+\r
756 \1d\2l\1ugo\2sc \ \1struktury \ wewn\2a\1trz \ kt\2o\1rej \ podawane \ s\2a \ \1wska\2z\1niki \ \ do\r
757 \-\r
758 \+\r
759 podstruktur. \,\r
760 \-\r
761 \+\r
762 \,\r
763 \-\r
764 \+\r
765 Kolejny \ atrybut \ \3num \ \1definiuje \ indeks \ w \ tablicy \ \ OFF \ \ danej\r
766 \-\r
767 \+\r
768 struktury.\,\r
769 \-\r
770 \+\r
771 \,\r
772 \-\r
773 \+\r
774 Znaczenie  atrybutu \3length \1jest \ wieloznaczne. \  Dla \  SIMPLELIST\r
775 \-\r
776 \+\r
777 \3length  \1jest d\2l\1ugo\2s\1ci\2a  \1listy offset\2o\1w. Dla SEGMENT \ \3length \ \1jest\r
778 \-\r
779 \+\r
780 pozycj\2a \1pierwszego,a \3finish \1ostatniego  elementu \  segmentu. \ Dla\r
781 \-\r
782 \+\r
783 REPEATED \3length \1jest \ krotno\2s\1ci\2a \ \1powt\2o\1rzenia \ podstruktury. \ Dla\r
784 \-\r
785 \+\r
786 COMBINEDLIST \3length \1jest d\2l\1ugo\2s\1ci\2a \1listy. \,\r
787 \-\r
788 \+\r
789 \,\r
790 \-\r
791 \+\r
792 Atrybut  \3head \1jest indeksem w tablicy EL[], gdzie \  zakodowane \ s\2a\r
793 \-\r
794 \+\r
795 \1listy struktur referencji. Typem tej tablicy jest  \3Elem\1: \,\r
796 \-\r
797 \+\r
798 \,\r
799 \-\/\f\r
800 \+\r
801 \4struct \3Elem\r
802 \-\r
803 \+\r
804 \1{\r
805 \-\r
806 \+\r
807 \  \4int \3offset\1;\r
808 \-\r
809 \+\r
810 \  \4int \3next\1;\r
811 \-\r
812 \+\r
813 \  \4int \3references\1;\r
814 \-\r
815 \+\r
816 };\r
817 \-\r
818 \+\r
819 \r
820 \-\r
821 \+\r
822 W tablicy tej atrybut  \3offset \1definiuje odpowiedni offset a \ \3next\r
823 \-\r
824 \+\r
825 \1jest jak zwykle wska\2z\1nikiem do \ nast\2e\1pnego \ elementu \ listy. \ Dla\r
826 \-\r
827 \+\r
828 typu SIMPLELIST ka\2x\1dy taki \ offset \ mo\2x\1e \ by\2c \ \1offsetem \ zmiennej\r
829 \-\r
830 \+\r
831 referencyjnej pe\2l\1nej lub tylko adresem po\2s\1rednim, ale tak\2x\1e \ mo\2x\1e\r
832 \-\r
833 \+\r
834 by\2c \1offsetem domkni\2e\1cia procedury (czyli pary <SL, adres kodu> ).\r
835 \-\r
836 \+\r
837 Gdy atrybut \3references \1jest 0, mamy referencje pe\2l\1n\2a\1, gdy jest \ 1\r
838 \-\r
839 \+\r
840 jest to adres po\2s\1redni, wreszcie gdy jest 2 \ jest \ to \ domkni\2e\1cie\r
841 \-\r
842 \+\r
843 procedury. \,\r
844 \-\r
845 \+\r
846 \,\r
847 \-\r
848 \+\r
849 Dla typu COMBINEDLIST atrybut \3references \1okre\2s\1la indeks w tablicy\r
850 \-\r
851 \+\r
852 OFF wskazywanej podstruktury referencji. \,\r
853 \-\r
854 \+\r
855 \,\r
856 \-\r
857 \+\r
858 \,\r
859 \-\r
860 \+\r
861 W  przypadku  typu SEGMENT atrybut \ \3head \ \1mo\2x\1e \ jeszcze \ okre\2s\1la\2c\r
862 \-\r
863 \+\r
864 \1rodzaj referencji. Gdy \3head \1= 0, mamy segment pe\2l\1nych referencji,\r
865 \-\r
866 \+\r
867 gdy jest 1 jest to segment adres\2o\1w po\2s\1rednich, gdy jest 2 jest to\r
868 \-\r
869 \+\r
870 segment domkni\2ec \1procedur.\,\r
871 \-\r
872 \+\r
873 \,\r
874 \-\r
875 \+\r
876 \,\r
877 \-\r
878 \+\r
879 Dla ostatniego atrybutu \3references \1w \ typie \ \3Offsets \ \1mamy \ jedno\r
880 \-\r
881 \+\r
882 zadanie. Powinien on okre\2s\1la\2c \1dla typu REPEATED indeks w \ tablicy\r
883 \-\r
884 \+\r
885 OFF powtarzanej struktury. \,\r
886 \-\r
887 \+\r
888 \r
889 \-\r
890 \+\r
891 Powy\2x\1szy system wprowadzania \  struktury \ prototyp\2o\1w \ jest \ dosy\2c\r
892 \-\r
893 \+\r
894 \1niezr\2e\1czny, je\2s\1li musi  by\2c \1wykonany r\2e\1cznie. Troch\2e \1w \ tym \ wina\r
895 \-\r
896 \+\r
897 j\2e\1zyka C.  Mo\2x\1na by\2l\1o \ wprowadzi\2c \ \1typ \ union, \ kt\2o\1ry \ przypomina\r
898 \-\r
899 \+\r
900 rekordy z \ wariantami, \ ale \ w\2o\1wczas \ nie \ mo\2x\1naby \ podawa\2c \ \1tych\r
901 \-\r
902 \+\r
903 struktur przez definicje w deklaracji (odp. DATA  \ w \ Fortranie).\r
904 \-\r
905 \+\r
906 Zatem przyj\2al\1em \ takie \ rozwi\2a\1zanie \ przez \ zwyk\2la \ \1struktur\2e\1. \ Z\r
907 \-\r
908 \+\r
909 drugiej strony translator z Loglanu na C mo\2x\1e bez k\2l\1opotu budowa\2c\r
910 \-\r
911 \+\r
912 \1tak\2a \1struktur\2e\1. \,\r
913 \-\r
914 \+\r
915 \,\r
916 \-\f\r
917 \+\r
918 \,\r
919 \-\r
920 \+\r
921 3. Struktury Dl i Sl\r
922 \-\r
923 \+\r
924 \r
925 \-\r
926 \+\r
927 Struktura Dl zachowana jest taka \ jak \ w \ Simuli \ i \ Loglanie-82.\r
928 \-\r
929 \+\r
930 Aktywny wsp\2ol\1program  jest \2l\1a\2n\1cuchem Dl, zawieszony  jest \ cyklem\r
931 \-\r
932 \+\r
933 Dl. \ Nowy \ Loglan \ usun\2al \ \ \1Detach, \ \ gdy\2x \ \ \1wprowadzi\2l \ \ \1zmienn\2a\r
934 \-\r
935 \+\r
936 \1LAST_ATTACH - \ wskazuj\2a\1c\2a \ \1na \ ostatni \ wsp\2ol\1program \  wykonuj\2a\1cy\r
937 \-\r
938 \+\r
939 Attach(X). Zako\2n\1czenie wsp\2ol\1programu \ jest \ sygnalizowane \ b\2le\1dem\r
940 \-\r
941 \+\r
942 (propozycja \ \ \ \ Marka \ \ \ \ Warpechowskiego). \ \ \ \ Wykonuje \ \ \ \ \ si\2e\r
943 \-\r
944 \+\r
945 \1Attach(LAST_ATTACH) with Cor_Term (coroutine terminated), \ o \ ile\r
946 \-\r
947 \+\r
948 LAST_ATTACH \ =/= \ \4none\1, \  w \ \ przeciwnym \ \ razie \ \ wykonuje \ \ si\2e\r
949 \-\r
950 \+\r
951 \1Attach(My_Process) \ \ with \ \ Cor_Term. \ \ To \ \ \ rozwi\2a\1zanie \ \ \ jest\r
952 \-\r
953 \+\r
954 metodologicznie  uzasadnione i najprostsze. \,\r
955 \-\r
956 \+\r
957 \,\r
958 \-\r
959 \+\r
960 Dla \  wsp\2ol\1programu \ aktywnego \ warto\2sc \ \1Dl \ jest \ \ \4none\1. \ \ Pr\2o\1ba\r
961 \-\r
962 \+\r
963 reaktywacji  wsp\2ol\1programu aktywnego \ powoduje \ wys\2l\1anie \ sygna\2l\1u\r
964 \-\r
965 \+\r
966 alarmowego. \ Wsp\2ol\1program \ \ zako\2n\1czony \ \ ma \ \ ustawion\2a \ \ \1warto\2sc\r
967 \-\r
968 \+\r
969 \1lokalnego sterowania Lsc na 0. \ Pr\2o\1ba \  reaktywacji \ zako\2n\1czonego\r
970 \-\r
971 \+\r
972 wsp\2ol\1programu powoduje wys\2l\1anie sygna\2l\1u. Zauwa\2x\1my na \ zako\2n\1czenie\r
973 \-\r
974 \+\r
975 omawiania struktury Dl, \ \2x\1e \ Dl-link \ mo\2x\1e \ by\2c \ \1w \ tym \ systemie\r
976 \-\r
977 \+\r
978 referencj\2a  \1niepe\2l\1n\2a  \1(tzn.  tylko adresem po\2s\1rednim). \ Zyskujemy\r
979 \-\r
980 \+\r
981 w ten spos\2o\1b na pami\2e\1ci i na czasie wykonania programu. \,\r
982 \-\r
983 \+\r
984 \,\r
985 \-\r
986 \+\r
987 Struktura Sl link\2o\1w \ tworzy \ drzewo. Problemem s\2a \ \1tylko \ usuwane\r
988 \-\r
989 \+\r
990 obiekty procedur, \ funkcji \ i \ blok\2o\1w, \  po \ ich \ terminacji. \  W\r
991 \-\r
992 \+\r
993 poprzedniej \ wersji \ przyj\2e\1li\2s\1my \ \ strategi\2e \ \  \1usuwania \ \ takich\r
994 \-\r
995 \+\r
996 obiekt\2o\1w bez wzgl\2e\1du na konsekwencje. Mog\2l\1o si\2e \ \1zdarzy\2c\1, \ \2x\1e \ po\r
997 \-\r
998 \+\r
999 pewnym \ czasie \ wznawiany \ dobrze \ \ okre\2s\1lony \ \ obiekt \ \ nie \ \ ma\r
1000 \-\r
1001 \+\r
1002 okre\2s\1lonego otoczenia statycznego (Sl link przeci\2e\1ty). \ Umieli\2s\1my\r
1003 \-\r
1004 \+\r
1005 wykry\2c \1takie przypadki, ale nie by\2l\1o to \ rozwi\2a\1zanie \ eleganckie.\r
1006 \-\r
1007 \+\r
1008 Marek Lao \ zauwa\2x\1y\2l\1, \ \2x\1e \ lepiej \ by\2l\1oby \ u\2x\1y\2c \ \1zwyk\2l\1ej \ techniki\r
1009 \-\r
1010 \+\r
1011 licznik\2o\1w referencji tylko \ dla \ tego \ przypadku. \ Mamy \ przecie\2x\r
1012 \-\r
1013 \+\r
1014 \1licznik Statsl (poprzednio inaczej okre\2s\1lony),  nale\2x\1y zastosowa\2c\r
1015 \-\r
1016 \+\r
1017 \1go w spos\2o\1b nast\2e\1puj\2a\1cy. \,\r
1018 \-\r
1019 \+\r
1020 \,\r
1021 \-\r
1022 \+\r
1023 Ka\2x\1de otwarcie nowego obiektu zwi\2e\1ksza o 1 \ licznik \ Statsl \ jego\r
1024 \-\r
1025 \+\r
1026 statycznego ojca. Ka\2x\1de zako\2n\1czenie obiektu \ procedury \ (funkcji,\r
1027 \-\r
1028 \+\r
1029 bloku) sprawdza, czy jego Statsl jest 0. Je\2s\1li tak, obiekt \ mo\2x\1na\r
1030 \-\r
1031 \+\r
1032 usun\2ac\1, zmniejszy\2c \1Statsl o \ 1 \ dla \ jego \ ojca \ i \ powt\2o\1rzy\2c \ \1te\r
1033 \-\/\f\r
1034 \+\r
1035 operacje dla takiego \ ojca \ (o \ ile \ jest \ to \ obiekt \ procedury,\r
1036 \-\r
1037 \+\r
1038 funkcji lub bloku). Dla usuwanego za pomoc\2a \1kill \ obiektu \ klasy,\r
1039 \-\r
1040 \+\r
1041 sprawdzamy \ najpierw \ jego \ Statsl, \ \ i \ \ post\2e\1pujemy \ \ podobnie.\r
1042 \-\r
1043 \+\r
1044 Pozostaje rozwi\2a\1za\2c \1poprawnie problem usuwania wsp\2ol\1program\2o\1w. \,\r
1045 \-\f\r
1046 \+\r
1047 \,\r
1048 \-\r
1049 \+\r
1050 Zabicie zawieszonego wsp\2ol\1programu polega na \ zabiciu \ stosownego\r
1051 \-\r
1052 \+\r
1053 cyklu Dl. Najpierw przegl\2a\1damy taki cykl i sprawdzamy, \ czy \ jego\r
1054 \-\r
1055 \+\r
1056 wszystkie obiekty maj\2a \1Statsl \ r\2o\1wny \ 0. \ Je\2s\1li \ nie, \ wywo\2l\1ujemy\r
1057 \-\r
1058 \+\r
1059 sygna\2l \1alarmowy. Je\2s\1li natomiast wszystkie \ s\2a \ \1usuwalne, \ mo\2x\1emy\r
1060 \-\r
1061 \+\r
1062 przyst\2a\1pi\2c \1do kolejnego ich usuwania. Aby \ to \ zrobi\2c \ \1poprawnie,\r
1063 \-\r
1064 \+\r
1065 nale\2x\1a\2l\1oby stosowa\2c \1operacj\2e \1przej\2s\1cia po Sl-\2l\1a\2n\1cuchu dla ka\2x\1dego\r
1066 \-\r
1067 \+\r
1068 obiektu usuni\2e\1tego (tak jak \ dla \ obiektu \ klasy). \ Ale \ przecie\2x\r
1069 \-\r
1070 \+\r
1071 \1mogliby\2s\1my usun\2ac \1jaki\2s \1obiekt jeszcze \ nieusuni\2e\1ty \ z \ usuwanego\r
1072 \-\r
1073 \+\r
1074 w\2l\1a\2s\1nie cyklu wsp\2ol\1programu. Aby unikn\2ac \1tej sytuacji, \ odwracamy\r
1075 \-\r
1076 \+\r
1077 najpierw \ cykl \ wsp\2ol\1programu. \ Zabijaj\2a\1c \ obiekty \ w \ kolejno\2s\1ci\r
1078 \-\r
1079 \+\r
1080 odwrotnej (od g\2l\1owy wsp\2ol\1programu, nast\2e\1pnie syn dynamiczny itd),\r
1081 \-\r
1082 \+\r
1083 mamy pewno\2sc\1, \ \2x\1e \  nie \  usuniemy \ przy \  czyszczeniu \ kolejnych\r
1084 \-\r
1085 \+\r
1086 \2l\1a\2n\1cuch\2o\1w  Sl \2x\1adnego pozosta\2l\1ego elementu \ cyklu. \ Wynika \ to \ z\r
1087 \-\r
1088 \+\r
1089 w\2l\1asno\2s\1ci Sl \ i \ Dl \ \2l\1a\2n\1cuch\2o\1w \ - \ nie \ mog\2a \ \1i\2sc \ \1w \ przeciwnych\r
1090 \-\r
1091 \+\r
1092 kierunkach, tzn. je\2s\1li jest Dl droga od A do B to nie ma Sl drogi\r
1093 \-\r
1094 \+\r
1095 od B do A. \ W \ drugiej \ fazie \ usuwania \ wsp\2ol\1programu \ zmieniamy\r
1096 \-\r
1097 \+\r
1098 orientacj\2e \1cyklu. resach \ odpowiednio \ (2,3) \ i \ (1,4),\r