Mikä teki Lispistä erityisen

«Suurin koskaan luotu ohjelmointikieli«
- Alan Kay, "Lispissä"

Mikä teki Lispistä erityisen

Kun McCarthy kehitti Lispin 1950-luvun lopulla, se erosi radikaalisti olemassa olevista kielistä, joista tärkein oli Fortran.

Lisp esitteli yhdeksän uutta ideaa:

1. Ehdot. Ehdolliset lauseet ovat jos-niin-else-rakenteita. Nyt pidämme niitä itsestäänselvyytenä. He olivat keksitty McCarthy Lispin kehittämisen aikana. (Fortranilla oli tuolloin vain goto-lauseita, jotka oli tiiviisti yhdistetty taustalla olevaa laitteistoa koskevaan haaraohjeeseen.) McCarthy, ollessaan Algol-komiteassa, lisäsi ehtoja Algoliin, josta ne levisivät muille kielille.

2. Toimintotyyppi. Lispissä funktiot ovat ensiluokkaisia ​​objekteja - ne ovat tietotyyppejä, kuten numerot, merkkijonot jne., ja niillä on kirjaimellinen esitys, ne voidaan tallentaa muuttujiin, ne voidaan välittää argumentteina jne.

3. Rekursio. Rekursio oli tietysti olemassa matemaattisena käsitteenä ennen Lispia, mutta Lisp oli ensimmäinen ohjelmointikieli, joka tuki sitä. (Tämä johtuu kenties funktioiden luomisesta ensiluokkaisina objekteina.)

4. Uusi muuttujien käsite. Lispissä kaikki muuttujat ovat tehokkaita osoittimia. Arvot ovat mitä tyypeillä on, eivät muuttujia, ja muuttujien määrittäminen tai sitominen tarkoittaa osoittimien kopioimista, ei sitä, mihin ne osoittavat.

5. Roskakokoelma.

6. Ilmaisuista koostuvat ohjelmat. Lisp-ohjelmat ovat lausekkeiden puita, joista jokainen palauttaa arvon. (Jotkin Lisp-lausekkeet voivat palauttaa useita arvoja.) Tämä eroaa Fortranista ja monista muista menestyneistä kielistä, jotka erottavat "lausekkeet" ja "lausekkeet".

Tämä ero oli luonnollista Fortranissa, koska kieli oli viivasuuntautunut (ei yllättävää kielelle, jonka syöttömuoto oli reikäkortti). Et voinut olla sisäkkäisiä lausuntoja. Ja niin kauan kuin tarvitsit matemaattisia lausekkeita toimiakseen, ei ollut mitään järkeä antaa minkään muun palauttaa arvoa, koska mitään ei ehkä ole odottamassa palauttamista.

Rajoitukset poistettiin lohkorakenteisten kielten myötä, mutta silloin oli liian myöhäistä. Ilmaisujen ja lausumien välinen ero on jo määritetty. Se siirtyi Fortranista Algoliin ja edelleen heidän jälkeläisilleen.

Kun kieli koostuu kokonaan ilmauksista, voit säveltää lausekkeita haluamallasi tavalla. Voit kirjoittaa jommankumman (syntaksin avulla Kaari)

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

tai

(= x (if foo 1 2))

7. Symbolityyppi. Merkit eroavat merkkijonoista, jolloin voit tarkistaa tasa-arvon vertaamalla osoittimia.

8. Koodin merkintä käyttämällä symbolipuita.

9. Koko kieli on aina saatavilla. Lukuajan, käännösajan ja ajoajan välillä ei ole selvää eroa. Voit kääntää tai suorittaa koodia lukiessasi tai lukea tai suorittaa koodia kääntämisen aikana tai lukea tai kääntää koodia sen suorituksen aikana.

Koodin suorittaminen lukemisen aikana antaa käyttäjien ohjelmoida Lispin syntaksin uudelleen; koodin suorittaminen käännöshetkellä on makrojen perusta; ajonaikainen käännös on perusta Lispin käytölle laajennuskielenä ohjelmissa, kuten Emacs; ja lopuksi ajonaikainen lukeminen mahdollistaa ohjelmien kommunikoinnin käyttämällä s-lausekkeita, idea, joka keksittiin äskettäin uudelleen XML:ssä.

Johtopäätös

Kun Lisp keksittiin ensimmäisen kerran, nämä ideat olivat kaukana tavanomaisista ohjelmointikäytännöistä, joita 1950-luvun lopulla saatavilla oleva laitteisto saneli.

Ajan myötä oletuskieli, jota suosittujen kielten menestys ilmensi, kehittyi vähitellen Lisp-kieleksi. Kohdat 1-5 ovat nyt laajalti hyväksyttyjä. Kohta 6 alkaa näkyä valtavirrassa. Pythonissa on lause 7 jossain muodossa, vaikka sopivaa syntaksia ei ole. Kohta 8, joka (kohdalla 9) mahdollistaa makrot Lispissä, on edelleen vain Lispissä, luultavasti siksi, että (a) se vaatii nuo sulut tai jotain yhtä pahaa ja (b) jos lisäät tämän viimeisimmän tehonlisäyksen, voit eivät enää väitä keksineensä uuden kielen, vaan vain kehittäneensä uuden Lispin murteen; -)

Vaikka tämä on hyödyllistä nykyaikaisille ohjelmoijille, on outoa kuvata Lispia sen eron perusteella muiden kielten satunnaisiin tekniikoihin verrattuna. McCarthy ei ehkä ajatellut tätä. Lisp ei ollut suunniteltu korjaamaan Fortranin virheitä; se näytti enemmän yrittämisen sivutuotteena aksiomatisoi laskelmat.

Lähde: will.com

Lisää kommentti