[nem-pl] Drugi rysunek już ze światłocieniem

Marcin 'Qrczak' Kowalczyk qrczak at knm.org.pl
Sat Feb 28 00:30:10 CET 2004


W liście z pią, 27-02-2004, godz. 23:56, Kamil Skalski pisze:

> O ile dobrze to sobie wyobrażam, to 
> niehigieniczna zmienna pojawi się w kodzie i "piętro wyżej" zostanie 
> potraktowana jako zwykła zaquotowana (hmm, nie pomyślałem o tym wcześniej, 
> niby to dobra rzecz, ale myślałem że niehigieniczne będą się przedostawać 
> wyżej). Intencja jest taka, że niehigieniczne w naturalny sposób nie łączą 
> się z globalnym kontekstem widocznym w miejscu definicji quotowania/makra, 
> tylko są "wolnymi strzelcami".

To jest inny schemat. Chcesz chyba powiedzieć, że $("m" : var) połączy
się z dowolną zmienną o symbolu "m", nie biorąc pod uwagę koloru. W moim
modelu takich zwierząt nie ma, każda nazwa ma kolor uwzględniany przy
dopasowywaniu, a relacja zgodności nazw jest przechodnia.

Jeśli niehigieniczne nazwy mają ignorować kolor, to jest niedobrze,
i to nie tylko dlatego, że niehigienicznego makra nie da się zamknąć
w higieniczne. Jeśli niehigienicznie wstawiona nazwa występuje w pozycji
wiążącej, to popsują się nazwy higienicznie użyte przez makra w środku.
Te makra nie miały obowiązku wiedzieć, że ktoś użyje ich w takim
kontekście.

Na przykład niech makro m1 odwołuje się higienicznie do widocznego w
miejscu jego definicji globalnego symbolu x, a makro m2 niehigienicznie
wprowadza x i wstawia swój argument w zakres widoczności tego x. m2 było
przewidziane do bycia używanym w taki sposób:
   m2 (...coś zawierającego x...)
ale jeśli ktoś napisze
   m2 (...coś używającego m1...)
to m1 nie ma prawa się popsuć, bo to, że ono używa x, nie jest znane na
zewnątrz m1!

> Tylko z tym xorowaniem to nie rozumiem i nie rozumiałem już u Dybviga
> - u nas wszystko dostaje kolor raz i taki ma mieć, a nie że nagle kolor
> znika nie wiadomo co to właściwie było.

Makro ma dodać pokolorowany kawałek kodu z wklejonymi argumentami, przy
czym argumenty mają mieć ten sam kolor, co miały na początku. Zamiast
nadawać kolor w trakcie obliczania cytatów, można to zrealizować tak:
rozwijacz makr koloruje argumenty makra nowym kolorem (tzn. kolor jest
zbiorem / listą znaczników i dodajemy nowy znacznik); makro opakowywuje
te argumenty fragmentami kodu od siebie, które nie są pokolorowane;
następnie rozwijacz makr koloruje cały efekt rozwinięcia jeszcze raz tym
samym kolorem, przy czym tam, gdzie ten kolor dotrze do argumentów,
kolory się znoszą i przywracany jest poprzedni.

Zalety: nie trzeba komunikować koloru między rozwijaczem makr a cytatami
kodu, tzn. cytat kodu staje się pure wyrażeniem nieużywającym zmiennych
globalnych. Poza tym Dybvigowi to jest potrzebne do leniwych podstawień
przy lambdach, ale nie rozumiem, po co w ogóle coś podstawiać przy
lambdach.

Wady: być może to już wymaga leniwego kolorowania. Bo inaczej będziemy
kolorować argument makra dwa razy zamiast ani razu, a ten argument może
być duży. Poza tym funkcje odpowiadające scheme'owym bound-identifier=
i free-identifier= (które nie wiem, jak bardzo są potrzebne ani jak
powinny być zaimplementowane) być może są trudniejsze w realizacji,
a być może nie.

-- 
   __("<         Marcin Kowalczyk
   \__/       qrczak at knm.org.pl
    ^^     http://qrnik.knm.org.pl/~qrczak/





More information about the devel-pl mailing list