Mitől volt Lisp különleges

«A valaha készült legnagyobb programozási nyelv«
– Alan Kay, a Lispről

Mitől volt Lisp különleges

Amikor McCarthy az 1950-es évek végén kifejlesztette a Lisp nyelvet, az gyökeresen különbözött a létező nyelvektől, amelyek közül a legfontosabb Fortran.

Lisp kilenc új ötletet mutatott be:

1. Feltételek. A feltételes állítások ha-akkor-else konstrukciók. Most természetesnek vesszük őket. Ők voltak feltalált McCarthy a Lisp fejlesztése során. (A Fortrannak akkoriban csak goto utasításai voltak, szorosan összekapcsolva a mögöttes hardverre vonatkozó elágazási utasítással.) McCarthy, amíg az Algol bizottság tagja volt, hozzájárult az Algolhoz, ahonnan azok más nyelvekre is átterjedtek.

2. Egy függvénytípus. A Lisp-ben a függvények első osztályú objektumok - adattípusok, akárcsak a számok, karakterláncok stb., szó szerinti ábrázolásúak, változókban tárolhatók, argumentumként adhatók át stb.

3. Rekurzió. A rekurzió természetesen matematikai fogalomként létezett a Lisp előtt, de a Lisp volt az első programozási nyelv, amely támogatta. (Ez talán magában foglalja a függvények első osztályú objektumként történő létrehozását.)

4. A változók új fogalma. A Lisp-ben minden változó hatékony mutató. Az értékek a típusok, nem a változók, és a változók hozzárendelése vagy összerendelése a mutatók másolását jelenti, nem pedig azt, amire mutatnak.

5. Szemétgyüjtés.

6. Kifejezésekből összeállított programok. A Lisp programok olyan kifejezések fái, amelyek mindegyike egy értéket ad vissza. (Egyes Lisp-kifejezések több értéket is visszaadhatnak.) Ez ellentétben áll a Fortran-nal és sok más sikeres nyelvvel, amelyek megkülönböztetik a „kifejezéseket” és az „állításokat”.

Természetes volt ez a megkülönböztetés a Fortranban, mert a nyelv vonalorientált volt (nem meglepő egy olyan nyelv esetében, amelynek beviteli formátuma lyukkártya). Nem lehetett beágyazott kijelentéseket. És mindaddig, amíg matematikai kifejezésekre volt szükség a működéshez, nem volt értelme annak, hogy bármi más értéket adjon vissza, mert előfordulhat, hogy semmi sem vár visszaadásra.

A blokkszerkezetű nyelvek megjelenésével feloldották a korlátozásokat, de akkor már késő volt. A kifejezések és az állítások közötti különbséget már megállapították. Fortranból Algolba, majd leszármazottaikhoz került.

Ha egy nyelv kizárólag kifejezésekből áll, akkor a kifejezéseket tetszőleges módon állíthatja össze. Írhat bármelyiket (a szintaxis használatával Ív)

(if foo (= x 1) (= x 2))

vagy

(= x (if foo 1 2))

7. Szimbólum típus. A karakterek különböznek a karakterláncoktól, ebben az esetben a mutatók összehasonlításával ellenőrizheti az egyenlőséget.

8. A kód jelölése szimbólumfák segítségével.

9. A teljes nyelv mindig elérhető. Nincs nyilvánvaló különbség az olvasási idő, a fordítási idő és a futási idő között. Kódot fordíthat vagy futtathat olvasás közben, vagy kódot olvashat vagy futtathat fordítás közben, vagy kódot olvashat vagy fordíthat le, miközben fut.

A kód futtatása olvasás közben lehetővé teszi a felhasználók számára, hogy újraprogramozzák a Lisp szintaxisát; a makrók alapja a kód futtatása fordítási időben; a futásidejű fordítás az alapja a Lisp kiterjesztési nyelvnek olyan programokban, mint az Emacs; és végül a futásidejű olvasás lehetővé teszi a programok számára, hogy s-kifejezések segítségével kommunikáljanak, ez az ötlet, amelyet nemrégiben újítottak fel az XML-ben.

Következtetés

Amikor a Lisp-et először feltalálták, ezek az ötletek távol álltak az 1950-es évek végén elérhető hardver által diktált hagyományos programozási gyakorlatoktól.

Idővel az alapértelmezett nyelv, amelyet a népszerű nyelvek sikere testesített meg, fokozatosan a Lisp felé fejlődött. Az 1-5. pontok mára széles körben elfogadottak. A 6. pont kezd megjelenni a mainstreamben. A Pythonban valamilyen formában van egy 7. záradék, bár nincs megfelelő szintaxis. A 8. elem, amely (a 9. elemmel) lehetővé teszi a makrókat Lispben, még mindig csak Lispben van, valószínűleg azért, mert (a) megköveteli a zárójeleket vagy valami ugyanolyan rosszat, és (b) ha hozzáadja ezt a legutóbbi teljesítménynövekedést, akkor már nem állítja, hogy új nyelvet talált fel, hanem csak egy új lisp dialektust; -)

Bár ez hasznos a modern programozók számára, furcsa a Lisp-et a más nyelveken alkalmazott véletlenszerű technikáktól való eltérése alapján leírni. Lehet, hogy McCarthy nem erre gondolt. A Lisp nem arra készült, hogy kijavítsa Fortran hibáit; inkább a próbálkozás melléktermékeként jelent meg axiomatizálja a számításokat.

Forrás: will.com

Hozzászólás