SICP / CYMRAEG

SICP · Yr ail argraffiad · Scheme

Rhagair

Harold Abelson a Gerald Jay Sussman gyda Julie Sussman · Cyfieithiad Cymraeg

Mae addysgwyr, cadfridogion, dietegwyr, seicolegwyr, a rhieni yn rhaglennu. Caiff byddinoedd, myfyrwyr, a rhai cymdeithasau eu rhaglennu. Mae ymosodiad ar broblemau mawr yn defnyddio cyfres o raglenni, y rhan fwyaf ohonynt yn dod i fodolaeth ar hyd y ffordd. Mae'r rhaglenni hyn yn llawn materion sy'n ymddangos yn benodol i'r broblem dan sylw. I werthfawrogi rhaglennu fel gweithgaredd deallusol ynddo'i hun rhaid ichi droi at raglennu cyfrifiadurol; rhaid ichi ddarllen ac ysgrifennu rhaglenni cyfrifiadurol—llawer ohonynt. Nid yw'n gwneud fawr o wahaniaeth beth yw pwnc y rhaglenni na pha gymwysiadau y maent yn eu gwasanaethu. Yr hyn sy'n bwysig yw pa mor dda y maent yn perfformio a pha mor esmwyth y maent yn cyd-fynd â rhaglenni eraill wrth greu rhaglenni mwy fyth. Rhaid i'r rhaglennydd geisio perffeithrwydd y rhan a digonolrwydd y casgliad ill dau. Yn y llyfr hwn mae'r defnydd o “raglen” yn canolbwyntio ar greu, gweithredu, ac astudio rhaglenni a ysgrifennwyd mewn tafodiaith o Lisp i'w gweithredu ar gyfrifiadur digidol. Wrth ddefnyddio Lisp nid ydym yn cyfyngu ar yr hyn y gallwn ei raglennu, ond dim ond ar y nodiant ar gyfer ein disgrifiadau o raglenni.

Mae ymwneud â phwnc y llyfr hwn yn ein cysylltu â thri chanolbwynt o ffenomenau: y meddwl dynol, casgliadau o raglenni cyfrifiadurol, a'r cyfrifiadur. Model, a ddeorwyd yn y meddwl, o broses wirioneddol neu feddyliol yw pob rhaglen gyfrifiadurol. Mae'r prosesau hyn, sy'n deillio o brofiad a meddwl dynol, yn niferus dros ben, yn gymhleth eu manylion, ac ar unrhyw adeg dim ond yn rhannol y'u deellir. Anaml y cânt eu modelu gan ein rhaglenni cyfrifiadurol i'n boddhad parhaol. Felly, er bod ein rhaglenni yn gasgliadau arwahanol o symbolau wedi'u llunio'n ofalus â llaw, yn fosaigau o ffwythiannau sy'n cyd-gloi, maent yn esblygu'n barhaus: fe'u newidiwn wrth i'n canfyddiad o'r model ddyfnhau, ehangu, a chyffredinoli nes bod y model yn y pen draw yn cyrraedd man metasefydlog o fewn model arall eto yr ydym yn ymdrechu i'w ddeall. Ffynhonnell y wefr sy'n gysylltiedig â rhaglennu cyfrifiadurol yw'r modd y mae mecanweithiau a fynegir fel rhaglenni yn datblygu'n barhaus yn y meddwl ac ar y cyfrifiadur, a'r ffrwydrad o ganfyddiad y maent yn ei greu. Os yw celf yn dehongli ein breuddwydion, mae'r cyfrifiadur yn eu gweithredu ar ffurf rhaglenni!

Er ei holl rym, mae'r cyfrifiadur yn feistr gwaith llym. Rhaid i'w raglenni fod yn gywir, a rhaid dweud yr hyn y dymunwn ei ddweud yn fanwl gywir ym mhob manylyn. Fel ym mhob gweithgaredd symbolaidd arall, cawn ein hargyhoeddi o wirionedd rhaglen drwy ddadl. Gellir rhoi semanteg i Lisp ei hun (model arall, gyda llaw), ac os gellir pennu swyddogaeth rhaglen, dyweder, yn y calcwlws traethiadau, gellir defnyddio dulliau prawf rhesymeg i lunio dadl dderbyniol dros ei chywirdeb. Yn anffodus, wrth i raglenni fynd yn fawr ac yn gymhleth, fel y maent bron bob amser yn ei wneud, daw digonolrwydd, cysondeb, a chywirdeb y manylebau eu hunain yn agored i amheuaeth, fel mai anaml y mae dadleuon ffurfiol cyflawn dros gywirdeb yn cyd-fynd â rhaglenni mawr. Gan fod rhaglenni mawr yn tyfu o rai bach, mae'n hollbwysig ein bod yn datblygu casgliad o strwythurau rhaglen safonol yr ydym wedi dod yn sicr o'u cywirdeb—idiomau yw ein henw arnynt—ac yn dysgu eu cyfuno'n strwythurau mwy gan ddefnyddio technegau trefnu y profwyd eu gwerth. Trafodir y technegau hyn yn helaeth yn y llyfr hwn, ac mae eu deall yn hanfodol i gymryd rhan yn y fenter Bromytheaidd a elwir yn rhaglennu. Yn fwy na dim arall, mae darganfod a meistroli technegau trefnu grymus yn cyflymu ein gallu i greu rhaglenni mawr, arwyddocaol. I'r gwrthwyneb, gan fod ysgrifennu rhaglenni mawr yn waith blinedig iawn, cawn ein hysgogi i ddyfeisio dulliau newydd o leihau'r toreth o swyddogaethau a manylion y mae'n rhaid eu cynnwys mewn rhaglenni mawr.

Yn wahanol i raglenni, rhaid i gyfrifiaduron ufuddhau i ddeddfau ffiseg. Os ydynt am weithredu'n gyflym—ychydig nanosegundau am bob newid cyflwr—rhaid iddynt drosglwyddo electronau dros bellteroedd bach yn unig ( 1 1 2 troedfedd ar y mwyaf). Rhaid gwaredu'r gwres a gynhyrchir gan y nifer enfawr o ddyfeisiau sydd wedi'u crynhoi felly mewn gofod. Datblygwyd celfyddyd beirianyddol goeth sy'n cydbwyso lluosogrwydd swyddogaethau a dwysedd dyfeisiau. Beth bynnag fo'r achos, mae caledwedd bob amser yn gweithredu ar lefel fwy cyntefig na'r un yr ydym am raglennu arni. Mae'r prosesau sy'n trawsffurfio ein rhaglenni Lisp yn rhaglenni “peiriant” eu hunain yn fodelau haniaethol yr ydym yn eu rhaglennu. Mae eu hastudio a'u creu yn rhoi llawer o fewnwelediad i'r rhaglenni trefnu sy'n gysylltiedig â rhaglennu modelau mympwyol. Wrth gwrs, gellir modelu'r cyfrifiadur ei hun fel hyn. Meddyliwch: mae ymddygiad yr elfen switsio ffisegol leiaf yn cael ei fodelu gan fecaneg cwantwm a ddisgrifir gan hafaliadau differol y mae eu hymddygiad manwl yn cael ei ddal gan frasamcanion rhifiadol a gynrychiolir mewn rhaglenni cyfrifiadurol sy'n gweithredu ar gyfrifiaduron wedi'u cyfansoddi o …!

Nid mater o gyfleustra tactegol yn unig yw nodi'r tri chanolbwynt ar wahân. Er bod y cyfan, fel y dywedant, yn y pen, mae'r gwahaniad rhesymegol hwn yn cyflymu'r llif symbolaidd rhwng y canolbwyntiau hyn, ac nid oes dim ym mhrofiad dynol yn rhagori ar gyfoeth, bywiogrwydd, a photensial y llif hwnnw heblaw esblygiad bywyd ei hun. Ar y gorau, metasefydlog yw'r perthnasoedd rhwng y canolbwyntiau. Nid yw'r cyfrifiaduron byth yn ddigon mawr nac yn ddigon cyflym. Mae pob datblygiad arloesol mewn technoleg caledwedd yn arwain at fentrau rhaglennu mwy anferth, egwyddorion trefnu newydd, a chyfoethogi modelau haniaethol. Dylai pob darllenydd ofyn iddo'i hun o bryd i'w gilydd “At ba ddiben, at ba ddiben?”—ond peidiwch â'i ofyn yn rhy aml rhag ichi gyfnewid hwyl rhaglennu am rwymedd athroniaeth chwerwfelys.

Ymhlith y rhaglenni a ysgrifennwn, mae rhai (ond byth digon) yn cyflawni swyddogaeth fathemategol fanwl gywir megis didoli neu ganfod uchafswm dilyniant o rifau, penderfynu a yw rhif yn gysefin, neu ganfod y gwreiddyn sgwâr. Algorithmau yw ein henw ar raglenni o'r fath, a gwyddys llawer am eu hymddygiad gorau posibl, yn enwedig mewn perthynas â'r ddau baramedr pwysig, amser gweithredu a gofynion storio data. Dylai rhaglennydd feithrin casgliad o algorithmau ac idiomau da. Er bod rhai rhaglenni'n gwrthsefyll manylebau manwl gywir, cyfrifoldeb y rhaglennydd yw amcangyfrif eu perfformiad, a cheisio ei wella bob amser.

Mae Lisp yn oroeswr, wedi bod mewn defnydd ers tua chwarter canrif. Ymhlith yr ieithoedd rhaglennu sy'n cael eu defnyddio'n weithredol, dim ond Fortran sydd wedi byw'n hirach. Mae'r ddwy iaith wedi cefnogi anghenion rhaglennu meysydd cymhwyso pwysig, Fortran ar gyfer cyfrifo gwyddonol a pheirianyddol a Lisp ar gyfer deallusrwydd artiffisial. Mae'r ddau faes hyn yn parhau'n bwysig, ac mae eu rhaglenwyr mor ymroddedig i'r ddwy iaith hyn fel y gall Lisp a Fortran yn hawdd barhau mewn defnydd gweithredol am o leiaf chwarter canrif arall.

Mae Lisp yn newid. Mae'r dafodiaith Scheme a ddefnyddir yn y testun hwn wedi esblygu o'r Lisp gwreiddiol ac yn wahanol iddo mewn sawl ffordd bwysig, gan gynnwys cwmpas statig ar gyfer rhwymo newidynnau a chaniatáu i ffwythiannau roi ffwythiannau fel gwerthoedd. Yn ei strwythur semantig mae Scheme yr un mor agos at Algol 60 ag at Lisps cynnar. Mae Algol 60, na fydd byth yn iaith weithredol eto, yn byw ymlaen yng ngenynnau Scheme a Pascal. Byddai'n anodd dod o hyd i ddwy iaith sy'n gyfrwng cyfathrebu i ddau ddiwylliant mwy gwahanol na'r rhai sydd wedi ymgasglu o amgylch y ddwy iaith hyn. Mae Pascal ar gyfer adeiladu pyramidiau—strwythurau urddasol, syfrdanol, statig a adeiledir gan fyddinoedd yn gwthio blociau trwm i'w lle. Mae Lisp ar gyfer adeiladu organebau—strwythurau urddasol, syfrdanol, dynamig a adeiledir gan sgwadiau'n gosod myrddiynau cyfnewidiol o organebau symlach yn eu lle. Mae'r egwyddorion trefnu a ddefnyddir yr un fath yn y ddau achos, heblaw am un gwahaniaeth eithriadol o bwysig: mae'r swyddogaethedd y gellir ei allforio yn ôl disgresiwn y rhaglennydd Lisp unigol fwy na deg gwaith cymaint â'r hyn a geir mewn mentrau Pascal. Mae rhaglenni Lisp yn ehangu llyfrgelloedd â ffwythiannau y mae eu defnyddioldeb yn mynd y tu hwnt i'r cymhwysiad a'u cynhyrchodd. Y rhestr, strwythur data brodorol Lisp, sy'n gyfrifol i raddau helaeth am y fath dwf mewn defnyddioldeb. Mae strwythur syml a chymhwysedd naturiol rhestrau yn cael eu hadlewyrchu mewn ffwythiannau sy'n rhyfeddol o rydd rhag hynodrwydd. Yn Pascal mae'r doreth o strwythurau data y gellir eu datgan yn achosi arbenigo o fewn ffwythiannau sy'n atal ac yn cosbi cydweithio anffurfiol. Mae'n well cael 100 o ffwythiannau yn gweithredu ar un strwythur data na chael 10 ffwythiant yn gweithredu ar 10 strwythur data. O ganlyniad rhaid i'r pyramid sefyll heb newid am fileniwm; rhaid i'r organeb esblygu neu ddarfod.

I ddangos y gwahaniaeth hwn, cymharwch y modd y trinnir deunydd ac ymarferion yn y llyfr hwn â'r modd y'u trinnir mewn unrhyw destun cwrs cyntaf sy'n defnyddio Pascal. Peidiwch â llafurio dan y rhith mai testun y gellir ei dreulio yn MIT yn unig yw hwn, yn benodol i'r math o bobl a geir yno. Dyma'n union yr hyn y mae'n rhaid i lyfr difrifol ar raglennu Lisp fod, pwy bynnag yw'r myfyriwr neu ble bynnag y'i defnyddir.

Sylwch mai testun am raglennu yw hwn, yn wahanol i'r rhan fwyaf o lyfrau Lisp, a ddefnyddir fel paratoad ar gyfer gwaith mewn deallusrwydd artiffisial. Wedi'r cyfan, mae prif faterion rhaglennu peirianneg meddalwedd a deallusrwydd artiffisial yn tueddu i ddod ynghyd wrth i'r systemau dan ymchwiliad fynd yn fwy. Mae hyn yn esbonio pam mae cymaint o ddiddordeb cynyddol mewn Lisp y tu allan i ddeallusrwydd artiffisial.

Fel y byddai rhywun yn ei ddisgwyl o'i nodau, mae ymchwil i ddeallusrwydd artiffisial yn cynhyrchu llawer o broblemau rhaglennu arwyddocaol. Mewn diwylliannau rhaglennu eraill mae'r llif hwn o broblemau yn esgor ar ieithoedd newydd. Yn wir, mewn unrhyw dasg raglennu fawr iawn, egwyddor drefnu ddefnyddiol yw rheoli ac ynysu'r llif o wybodaeth o fewn modiwlau'r dasg drwy ddyfeisio iaith. Mae'r ieithoedd hyn yn tueddu i fynd yn llai cyntefig wrth nesáu at ffiniau'r system lle rydym ni bobl yn rhyngweithio amlaf. O ganlyniad, mae systemau o'r fath yn cynnwys ffwythiannau prosesu iaith cymhleth wedi'u hailadrodd droeon. Mae gan Lisp gystrawen a semanteg mor syml fel y gellir trin dosrannu fel tasg elfennol. Felly nid yw technoleg dosrannu'n chwarae bron unrhyw ran mewn rhaglenni Lisp, ac anaml y mae llunio prosesyddion iaith yn rhwystr i gyfradd twf a newid systemau Lisp mawr. Yn olaf, yr union symlrwydd hwn o ran cystrawen a semanteg sy'n gyfrifol am y baich a'r rhyddid a gludir gan bob rhaglennydd Lisp. Ni ellir ysgrifennu unrhyw raglen Lisp sy'n hwy nag ychydig linellau heb iddi fod yn llawn ffwythiannau dewisol. Dyfeisiwch a gosodwch; gwylltiwch ac ailddyfeisiwch! Codwn ein gwydrau i'r rhaglennydd Lisp sy'n corlannu ei feddyliau mewn nythod o gromfachau.

Alan J. Perlis
New Haven, Connecticut