SICP · Yr ail argraffiad · Scheme
5 Cyfrifiannu â Pheiriannau Cofrestri
Fy nod yw dangos nad rhyw fath o fod dwyfol, byw yw'r peiriant nefol, ond rhyw fath o waith cloc (ac mae'r sawl sy'n credu bod gan gloc enaid yn priodoli gogoniant y gwneuthurwr i'r gwaith), i'r graddau bod bron yr holl symudiadau amryfal yn cael eu hachosi gan rym tra syml a materol, yn union fel y mae holl symudiadau'r cloc yn cael eu hachosi gan un pwysau.
—Johannes Kepler (llythyr at Herwart von Hohenburg, 1605)
Dechreuasom y llyfr hwn drwy astudio prosesau a disgrifio prosesau yn nhermau gweithdrefnau a ysgrifennwyd yn Lisp. I egluro ystyr y gweithdrefnau hyn, defnyddiasom gyfres o fodelau gwerthuso: model amnewid Pennod 1, model amgylchedd Pennod 3, a gwerthusydd metagylchol Pennod 4. Yn arbennig, chwalodd ein harchwiliad o'r gwerthusydd metagylchol lawer o'r dirgelwch ynghylch sut y dehonglir ieithoedd tebyg i Lisp. Ond mae hyd yn oed y gwerthusydd metagylchol yn gadael cwestiynau pwysig heb eu hateb, oherwydd nad yw'n egluro'r mecanweithiau rheoli mewn system Lisp. Er enghraifft, nid yw'r gwerthusydd yn egluro sut mae gwerthuso isfynegiad yn llwyddo i ddychwelyd gwerth i'r mynegiad sy'n defnyddio'r gwerth hwnnw, nac yn egluro sut mae rhai gweithdrefnau dychweliadol yn cynhyrchu prosesau iteru (hynny yw, cânt eu gwerthuso gan ddefnyddio gofod cyson) tra bod gweithdrefnau dychweliadol eraill yn cynhyrchu prosesau dychweliadol. Mae'r cwestiynau hyn yn aros heb eu hateb oherwydd mai rhaglen Lisp yw'r gwerthusydd metagylchol ei hun, ac felly mae'n etifeddu strwythur rheoli'r system Lisp sylfaenol. Er mwyn darparu disgrifiad mwy cyflawn o strwythur rheoli'r gwerthusydd Lisp, rhaid inni weithio ar lefel fwy cyntefig na Lisp ei hun.
Yn y bennod hon byddwn yn disgrifio prosesau yn nhermau gweithrediad cam wrth gam cyfrifiadur traddodiadol. Mae cyfrifiadur o'r fath, neu beiriant cofrestri, yn gweithredu cyfarwyddiadau yn eu trefn sy'n trin cynnwys set sefydlog o elfennau storio a elwir yn gofrestri. Mae cyfarwyddyd nodweddiadol peiriant cofrestri yn cymhwyso gweithrediad cyntefig i gynnwys rhai cofrestri ac yn aseinio'r canlyniad i gofrestr arall. Bydd ein disgrifiadau o brosesau a weithredir gan beiriannau cofrestri yn edrych yn debyg iawn i raglenni “iaith beiriant” ar gyfer cyfrifiaduron traddodiadol. Fodd bynnag, yn hytrach na chanolbwyntio ar iaith beiriant unrhyw gyfrifiadur penodol, byddwn yn archwilio nifer o weithdrefnau Lisp ac yn dylunio peiriant cofrestri penodol i weithredu pob gweithdrefn. Felly, byddwn yn mynd i'r afael â'n tasg o safbwynt pensaer caledwedd yn hytrach na rhaglennydd cyfrifiadurol iaith beiriant. Wrth ddylunio peiriannau cofrestri, byddwn yn datblygu mecanweithiau ar gyfer gweithredu cystrawennau rhaglennu pwysig megis dychweliad. Byddwn hefyd yn cyflwyno iaith ar gyfer disgrifio dyluniadau peiriannau cofrestri. Yn 5.2 byddwn yn gweithredu rhaglen Lisp sy'n defnyddio'r disgrifiadau hyn i efelychu'r peiriannau a ddyluniwn.
Mae'r rhan fwyaf o weithrediadau cyntefig ein peiriannau cofrestri yn syml iawn. Er enghraifft, gallai gweithrediad adio'r rhifau a nôlir o ddwy gofrestr, gan gynhyrchu canlyniad i'w storio mewn trydedd gofrestr. Gellir cyflawni gweithrediad o'r fath gan galedwedd y mae'n hawdd ei ddisgrifio. Er mwyn ymdrin â strwythur rhestrau, fodd bynnag, byddwn hefyd yn defnyddio'r gweithrediadau cof car, cdr, ac cons, sy'n gofyn am fecanwaith dyrannu storfa cymhleth. Yn 5.3 astudiwn sut i'w gweithredu yn nhermau gweithrediadau mwy elfennol.
Yn 5.4, ar ôl inni gasglu profiad o lunio gweithdrefnau syml fel peiriannau cofrestri, byddwn yn dylunio peiriant sy'n cyflawni'r algorithm a ddisgrifir gan werthusydd metagylchol 4.1. Bydd hyn yn llenwi'r bwlch yn ein dealltwriaeth o sut y dehonglir mynegiadau Scheme, drwy ddarparu model penodol o'r mecanweithiau rheoli yn y gwerthusydd. Yn 5.5 byddwn yn astudio crynhoydd syml sy'n trosi rhaglenni Scheme yn ddilyniannau o gyfarwyddiadau y gellir eu gweithredu'n uniongyrchol â chofrestri a gweithrediadau peiriant cofrestri'r gwerthusydd.