Spis treści Artykuł originalny « Poprzedni artykul Nastepny artykul »

Język programowania “ {Scheme} ”

Programlingvo “Scheme”

Orignał w języku EsperantoMaszynowe tłumaczenie na język polski

Mi ĝenerale interesiĝas pri programaj lingvoj (vidu: enciklopedio de programaj lingvoj) kaj mi lernis kaj provis multe da ili. Unu el la plej malnovaj kaj elstaraj lingvoj estas Lispo. Oni ofte mencias Lispon en diferencaj libroj, sed mi neniam vidis, ke iu uzis tiun lingvon profesie aŭ praktike. Mi jam kelkfoje provis programi ion per Lispo, sed mi ĉiam malsukcesis. La unua problemo estas la elekto de programa medio. Ekzistas multaj Lisp-dialektoj kaj ili ofte tre diferencas. Tiuj programaj medioj por Lispo ne estas ankaŭ komfortaj por uzantoj. Ili havas kutime uzeblecon de unuaj enigmaj programoj de 70-aj jaroj. La erarmesaĝoj estas enigmaj kaj mi ne sukcesis lerni la lingvon. La dokumentaro por Lispo preskaŭ ne ekzistas por iu konkreta medio. La plej konata estas la programo Emacs. Do oni ne povas direkte programi laŭ iu libro aŭ dokumentaro, ĉar la ekzemploj ne funkcias por tiu dialekto, kiun ni ĵus uzas. Tamen en literaturo ekzistas fantastaj priskriboj de eblecoj de tiu lingvo. En unuaj libroj, kiujn mi legis pri Lispo la ekzemploj estis tre matematikaj kaj ofte jam post unu paĝo tre abstraktaj. Mi pensas, ke la ĉefa kaŭzo pro tio estis, ke la aŭtoroj de tiuj libroj mem konstruis la programan lingvon kaj interesiĝis nur por kelkaj aspektoj de lingvo, sed ne pri praktika apliko. Do mi neniam sukcesis konkrete solvi problemojn per tiu lingvo. Mi pensas ankaŭ, ke la precipa solvmaniero de prilaboro per rekursio estas por multaj hodiaŭaj programistoj tute ne konata (Ekzemplo de iu komputila diskutgrupo). La strikte matematika pensmaniero ne estas ankaŭ praktika por programado, ĉar la rezultaj programoj simple estas tro malrapidaj. Ekzemple mi tre miris pri la solvo de problemo, ĉu iu nombro estas para aŭ malpara. Por matematikisto estas evidente, ke

  1. 0 estas para nombro
  2. n estas para, se n-1 estas malpara
  3. n estas malpara, se n-1 estas para
(define (para? n)
   (cond
     [(= n 0) true]
     [else (malpara? (- n 1))]))
(define (malpara? n)
   (cond
      [(= n 0) false]
      [else (para? (- n 1))]))

La programo estas genia, sed se oni pensas, kion faras la komputilo sur tre baza nivelo por plenumi la kalkuladon, tiam oni rimarkas, ke tiu solvo ne estas taŭga. Mi frue programis en Asemblo kaj C. Tial mi scias, ke la plej rapida solvo en alia lingvo estas la testado de lasta bitumo. Ĉar la nombroj jam estas en bituma reprezento, tiu operacio estas tre tre rapida. Do mi precipe konas la funkciadon de komputilo kaj ĝiajn limigojn.
boolean estasPara(int n) { return n & 1 == 1 ? false : true; }
Tamen por granda parto de problemoj Lispo oferas tre abundajn eblojn de abstraktado, kiu helpas tre elegante difini la programon. Mi legis la blogan artikolon The Perils of JavaSchools - Joel Spolsky, kaj tiu artikolo denove vekis mian intereson pro Ŝemo (angle Scheme) (programa lingvo, kiu estas modernigita Lisp). La aŭtoro de tiu artikolo tre bedaŭras, ke hodiaŭaj Java-programistoj ne komprenas tre gravajn konceptojn de informatiko kaj ne kapablas nek programi en tre baza nek en tre abstrakta nivelo. Mi trovis ankaŭ la programan medion DrScheme kaj instruan retan libron How to Design Programs An Introduction to Computing and Programming. Tiu estas vere la unua medio por Ŝemo kaj instrua libro por tiu lingvo, kiuj estis farita por normalaj mortemuloj. Finfine ekzistas bona libro, kiu klarigas la programadon per Ŝemo. Do mi malrapide tralaboras la libron kaj povas per ekzercoj kaj la programa medio tuj apliki la novan scion. Post kelkaj ekzercoj mi vere devas konfesi, ke Ŝemo estas tre eleganta lingvo.

Mi eĉ komprenis kaj mem programis kelkajn variantojn de QuickSort. Mi rimarkis, ke la programo necesas multe da labora memoro (120 MB) kaj ne estas tre rapida. Tamen, kompare al Java, tio ne estas surpriza afero. DrScheme estas ankaŭ programita por instruaj kialoj kaj rapideco ne estis ilia plej grava trajto. Ekzistas ankaŭ alia libera eldono de Schema, kiu estas eble pli rapida kaj memorŝpara. Tiu estas programo Guile. Kvankam tiu lingvo havis tre fortan aprobon de konata programisto Richard Stallman, ĝi ne estas tre populara kompare al aliaj tn. skriptaj lingvoj.

Mi pensas, ke programado per tiu lingvo estas tiom alia kaj dokumentaro tiom malbona, ke la plejparto de programistoj tute ne havas ŝancojn lerni ĝin. Rimarkinde neniu granda firmao subtenas tiun lingvon kaj precipe funkciajn lingvojn. Nur lastatempe Microsoft en sia .NET subtenas la lingvon OCalm sub nova nomo F#, kiu havas similajn trajtojn kiel Ŝemo. Ankaŭ tiu subteno havas ĝis nun nur akademian karakteron. Do eble tiuj funkciaj lingvoj iam estos ankaŭ gravaj por profesia programado.

Ekzistas ankaŭ alia libro pri la programlingvo Ŝemo Structure and Interpretation of Computer Programs. Sed tiu libro ankaŭ apartenas al libroj, kiujn oni kiel novulo maleble povas kompreni. Mi esperas, se iam mi ankaŭ povus iam legi kaj kompreni ankaŭ tiun libron.

Fine mi sukcesis eklerni Lispon (kiel Ŝemo). Por programistoj tio estas kvazaŭ la sekva ŝtupo de informadika scipovo.

Ogólnie jestem zainteresowany o językach programowych (powinienem widzieć: encyklopedia języków programowych) i uczyłem się i próbowało wielu nich. Jeden z najbardziej starych i wybitnych języków jest {Lispo}. Często wspomina się {Lispon} w różnych książkach, lecz nigdy nie widziałem, że ktoś użytkował ten język profesjonalnie albo w praktyce. Już kilkakrotnie próbowałem programować coś {Lispo}, lecz zawsze ponosiłem porażkę. Pierwszy problem jest wyborem programowego środowiska. Istnieją liczne {Lisp-dialektoj} i oni często bardzo różnią się. Te środowiska programowe dla {Lispo} nie są także wygodne dla użytkowników. Oni mają zazwyczaj użyteczność pierwszych zagadkowych programów 70 lat. {erarmesaĝoj} są zagadkowe i nie miałem powodzenie uczyć się języka. Dokumentacja dla {Lispo} nieomal nie istnieje dla jakiegoś rzeczywistego środowiska. Najbardziej znany jest program Emacs. Więc nie można w kierunku programować według jakaś książka albo dokumentacja, ponieważ przykłady nie funkcjonują dla tej gwary, którą właśnie użytkujemy. Jednak w literaturze istnieją fantastyczne opisy możliwości tego języka. W pierwszych książkach, które odtwarzałem o {Lispo} przykłady byłem bardzo matematyczny i często już po jednej stronie bardzo abstrakcyjni. Myślę, że główny powód z powodu tego był, że autorzy tych książek same budowali język programowy i byli zainteresowani jedynie dla kilku aspektów języka, lecz nie o praktycznym zastosowaniu. Więc nigdy nie miałem powodzenie istotnie rozwiązywać problemy tym językiem. Myślę także, że główny {solvmaniero} obróbki rekursją jest dla licznych dzisiejszych programistów całkiem nie znanych (Przykład jakiejś komputerowej grupy dyskusji). Ściśle tryb myślenia matematyczny nie jest także praktyczny dla programowania, ponieważ programy wynikowe po prostu są zbyt wolne. Na przykład bardzo dziwiłem się o rozwiązaniu problemu, czy jakaś liczba jest parzysta albo parzysta inaczej. Dla matematyka jest oczywiście, że

  1. 0 jest parzysta liczba
  2. {n} jest parzysty, jeśli {n-1} jest parzysty inaczej
  3. {n} jest parzysty inaczej, jeśli {n-1} jest parzysty
(define (para? n)
   (cond
     [(= n 0) true]
     [else (malpara? (- n 1))]))
(define (malpara? n)
   (cond
      [(= n 0) false]
      [else (para? (- n 1))]))

Program jest genialny, lecz jeśli myśli się, co robi komputer na bardzo kluczowym poziomie aby załatwiać obliczenie, wtedy zauważa się, że to rozwiązanie nie jest zdatne. Wcześnie programowałem w {Asemblo} i C. Dlatego wiem, że najszybsze rozwiązanie w innym języku jest testowaniem ostatniego bitu. Ponieważ liczby już są w reprezentowaniu bitumowym, ta operacja jest bardzo bardzo szybka. Więc przede wszystkim znam operację komputera i jego granice.
boolean estasPara(int n) { return n & 1 == 1 ? false : true; }
Jednak dla dużej części problemów {Lispo} ofiaruje bardzo rzęsiste możliwości abstrakcji, która pomaga bardzo elegancko definiować program. Odtwarzałem {blogan} artykuł The Perils of JavaSchools - Joel Spolsky, i ten artykuł od nowa budził mój interes z powodu {Ŝemo} (z angielskiego Scheme) (język programowy, który jest {modernigita} Lisp). Autor tego artykułu bardzo żałuje, że dzisiejsze {Java-programistoj} nie rozumieją bardzo ważnych poglądów informatyki i nie nie są zdolnym ani programować w bardzo kluczowe ani w bardzo abstrakcyjnym poziomie. Znalazłem także środowisko programowe {DrScheme} i szkoleniową internetową książkę How to Design Programs An Introduction to Computing and Programming. Tym jest naprawdę pierwsze środowisko dla {Ŝemo} i szkoleniowa książka dla tego języka, które zostały zrobione dla normalnych śmiertelników. Ostatecznie istnieje dobra książka, która wyjaśnia programowanie {Ŝemo}. Więc powoli przepracuję książkę i mogę zadaniami i środowiskiem programowym natychmiast stosować nową wiedza. Po kilku zadaniach naprawdę muszę przyznać się, że {Ŝemo} jest bardzo eleganckim językiem.

Nawet rozumiałem i sam programowałem kilka wariantów od QuickSort. Zauważyłem, że program jest potrzebny wiele pomocniczą pamięć (120 MB) i nie jest bardzo szybki. Jednak, w zrównaniu do {Java}, to nie jest zaskakująca sprawa. {DrScheme} jest także wcześniej programowany dla szkoleniowych motywów i prędkość nie była ich najbardziej ważną cechą. Istnieje także inna wolna linia bazowa od {Schema}, która jest przypuszczalnie więcej szybka i {memorŝpara}. Tym jest program Guile. Aczkolwiek ten język miał bardzo silne uznanie znanego programisty Richardu Stallman, ono nie jest bardzo słynne w zrównaniu do innego tzw. skryptowe języki.

Myślę, że programowanie tym językiem jest na tyle inne i dokumentacja na tyle zła, że większość programistów całkiem nie ma szans uczyć się jego. Godne uwagi żadna duża firma nie podpiera tego języka i przede wszystkim funkcjonalnych języków. Jedynie ostatnio Microsoft we swój.NET podpiera język {OCalm} pod nową nazwą F #, który ma podobne cechy jako {Ŝemo}. Także to oparcie ma do teraz jedynie akademicki charakter. Więc przypuszczalnie te funkcjonalne języki kiedyś będą także ważne dla zawodowego programowania.

Istnieje także inna książka o języku programowania {Ŝemo} Structure and Interpretation of Computer Programs. Lecz ta książka także zalicza się książkom, które jak nowicjusz przypuszczalnie inaczej można rozumieć. Mam nadzieję, jeśli kiedyś także mógłbym kiedyś odtwarzać i rozumieć także tą książkę.

W końcu miałem powodzenie wyuczyć {Lispon} (jak {Ŝemo}). Dla programistów to jest jakby kolejny stopień informatycznej umiejętności.

Artukuł został przetłumaczony w pełni maszynowo przez wolny program Esperantilo
Adres kontaktowy:
mail@xdobry.de