Rhaglennu Cynnar
Yn y bôn, peiriannau cyfrifo trydanol oedd y cyfrifiaduron cyntaf. Roeddent yn gallu perfformio tasgau megis ychwanegiadau a oedd yn gynt na'u cymheiriaid dynol a mecanyddol. Defnydd nodweddiadol o'r peiriannau hyn fyddai cyfrifo biliau. Byddai gan bob cwsmer gerdyn tyllu i'w ddefnyddio, a byddai pob eitem ar y cerdyn yn cael ei lluosi gan y gost fesul eitem a storir mewn tabl. Yna, caiff ei ychwanegu at groniadur ac yna'i ryddhau, yn aml ar gerdyn tyllu arall a fyddai'n cael ei fewnbynnu i beiriant ar wahân a fyddai’n teipio rhifau ar anfoneb.
Roedd y gweithrediadau hyn yn syml iawn, ac roedd angen eu gwefru i wneud y dasg er mwyn cefnogi peiriannau'r genhedlaeth gyntaf. Ym mis Mehefin 1948, newidiodd y Manchester Baby hyn drwy storio'i rhaglenni yn yr un ffordd yr oedd yn storio data - drwy ei alluogi ei gael ei ail-raglennu heb ei ailwefru.
Rhaglennu Optimaidd
Ym 1936, cynigodd Alan Turing y Peiriant Turing yn fodel cyffredinol o beiriant cyfrifiadura. Roedd gan y Peiriant Turing dâp annherfynol a oedd yn cynnwys data. Byddai’n darllen y gell bresennol ar y tâp, ac yna naill ai’n ysgrifennu drosto neu’n symud y tâp i’r chwith neu i’r dde ac yn diweddaru rhywfaint o’r ffurf fewnol. Roedd tâp Peiriant Turing Byd-eang yn gallu cynnwys math arall wedi’i amgodio o Beiriant Turing. Dyma sail yr holl raglennu modern - sicrhau bod peiriant cyfrifiadura sydd â phwrpas cyffredinol yn ymddwyn yn debyg i un sydd â phwrpas arbennig.
Un nodwedd amlwg gyda Pheiriant Turing oedd bod y cyfnod yr oedd algorithm yn para yn dibynnu’n fawr ar leoliad y data ar y tâp. Roedd ychwanegu dau werth at ei gilydd yn gallu bod yn gyflym iawn neu’n araf iawn gan ddibynnu ar faint roedd angen i’r peiriant symud y tâp i gyrraedd y ddau ohonynt.
Er mai syniad llwyr ddamcaniaethol oedd y Peiriant Turing, etifeddodd y cyfrifiaduron cynnar y cyfyngiad hwn. Roedd y rhan fwyaf ohonynt yn defnyddio mecanwaith storio a oedd naill ai’n gyfresol neu a oedd yn cael cosbau mawr am geisio. Mewn cyfrifiadur modern, cof hapgyrch (RAM) yw’r prif gof, ac mae’r amser a gymerir i ddarllen gwerth mwy neu lai’n annibynnol o’i leoliad. Mewn peiriant a oedd yn defnyddio llinellau oedi mercwri ar gyfer storio, darllenwyd pob gwerth yn y llinell mewn trefn, a gellir ei gyrchu un-nawfed o’r amser yn unig, lle ‘n’ yw nifer y gwerthoedd a storiwyd yn y llinell. Roedd gan ddrymiau magnetig gyfyngiadau tebyg, oherwydd bod angen troi’r drwm i’w wneud yn weladwy er mwyn cyrchu gwerth. Mae gan yriannau caled modern y cyfyngiad hwn o hyd, ond mae’n llai o broblem oherwydd eu bod yn cael eu defnyddio fel storfa eilaidd (os o gwbl) ar gyfrifiadur modern.
Oherwydd y gost o geisio mewn gyriannau caled cynnar, datblygwyd y syniad ‘rhaglennu optimaidd,’ ac Alan Turing oedd un o brif gynigwyr y pwnc. Y syniad a oedd y tu ôl i ‘raglennu optimaidd’ oedd sicrhau bod y data a’r cyfarwyddiadau a oedd yn cael eu cyrchu’n cael eu gosod yn agos at ei gilydd. Byddai hyn yn golygu bod y cyfrifiadur yn treulio llawer mwy o amser yn cyfrifiadura a llai o amser yn aros am ddata.
Mewn rhaglennu modern, prin iawn y mae rhaglenwyr yn gwneud pethau o’r fath, ond mae’n bwysig iawn o hyd i gasglwyr. Mae cyfrifiaduron modern yn defnyddio hierarchaeth cof – ceir dwy neu dair haen o storfa dros dro (cache) rhwng y prif gof â’r uned brosesu ganolog (CPU). Mae cyrchu data o storfa dros dro (cache) lawer yn gyflymach na chyrchu data o brif gof. Caiff data ei lwytho i’r storfeydd hyn a’i dynnu ohonynt mewn blociau. Felly, mae lleoli data cysylltiedig fel bod modd i’r blociau gael eu llwytho gyda'i gilydd o fudd i’r perfformiad o hyd.
David Chisnall
FORTRAN
Mae'r gwahaniaeth rhwng iaith lefel uchel a lefel isel yn ffin sy’n symud yn gyson. Ond yn gyffredinol, ystyrir FORTRAN fel yr iaith gyntaf i hawlio teitl 'iaith lefel uchel.'
Disgrifiodd rhaglen FORTRAN yr algorithm i'w weithredu mewn ffordd nad oedd yn gysylltiedig ag unrhyw bensaernïaeth benodol.Un o'r prif bethau newydd a oedd gan FORTRAN oedd y datganiad GO TO, a ddyfeisiwyd gan Harlan Herrick.Roedd hyn yn caniatáu ymrannu i gysyniad lefel uchel o label, yn hytrach na chyfeiriad peiriant.
Cymerodd sawl blwyddyn i ddatblygu FORTRAN. Cynigiwyd y syniad gan John W. Backus ym 1953 i ddatblygu dulliau mwy effeithlon o raglennu prif ffrâm IBM 704. Ymddangosodd drafft cyntaf y fanyleb iaith flwyddyn yn ddiweddarach a chyhoeddwyd y llawlyfr rhaglennu FORTRAN cyntaf tua diwedd 1956. Roedd yn rhaid i ddarllenwyr y llawlyfr hwn aros chwe mis cyn iddynt allu rhoi eu sgiliau ar waith, oherwydd ni chafodd y casglwr ei rhyddhau nes mis Ebrill y flwyddyn ganlynol.
David Chisnall
Ieithoedd rhaglennu
Roedd y cyfrifiaduron cynharaf yn beiriannau â chodau caled – un rhaglen yn unig roeddent yn gallu ei chynnal ac roedd angen eu hailwefru i gynnal unrhyw beth arall. Ym 1948, y Manchester Baby oedd y cyfrifiadur rhaglen storio gyntaf – peiriant a oedd yn cael gwared ar y gwahaniaeth rhwng côd a data ac a oedd yn defnyddio'r un mecanweithiau storio ar gyfer y ddau. Roedd yn galluogi pobl i ailwefru’n syml trwy newid cynnwys y storfa.
Mae pob cyfrifiadur modern yn dilyn y model hwn, ac oherwydd bod cymhlethdod y rhaglenni i’w storio wedi cynyddu, mae’r gwaith o’u cynhyrchu wedi dod yn her gynyddol gymhleth.
Y rhaglennydd oedd yn gwneud y gwaith cynnar o raglennu – roedd yn ysgrifennu cyfarwyddiadau i’r peiriant a elwir yn orchmynion weithiau. Byddai’r rhain ar ffurf ‘llwythwch gyfeiriad cof 100 i gofrestru 2’ neu ‘ychwanegwch gynnwys cofrestr 2 i gofrestr 3.’ Roedd pob cyfarwyddyd yn gyfuniad o weithrediad ac un neu fwy o operandau (pethau y gweithredir arnynt, megis rhifau cofrestru, cyfeiriadau cof, neu werthoedd cyson).
Wrth i gymhlethdod rhaglennu gynyddu, dechreuodd rhaglenwyr gadw llyfrgelloedd o algorithmau yr oeddent yn eu defnyddio’n aml. Roeddent yn gallu rhoi’r rhain yn eu rhaglennu lle bynnag y bo angen. Roedd rhaglennu cymhleth yn cael eu rhoi at ei gilydd drwy gyfuno’r blociau hyn. Esblygodd y broses hon yn raddol i'r ieithoedd rhaglennu lefel uchel a ddefnyddir heddiw.
"Ystyr [rhaglennu gwrthrych-gyfeiriadol] i mi yw anfon negeseuon, cadw a diogelu a chuddio cyflwr prosesau yn lleol, a defnyddio dull ‘late-binding’ gyda phob peth. Gellir ei wneud yn Smalltalk a LISP. Mae’n bosibl bod systemau eraill lle gellir gwneud hyn, ond nid wyf yn ymwybodol ohonynt."
Alan Kay, dyfeisiwr y term 'gwrthrych-gyfeiriadol.'
Yn y 70au, deilliodd nifer o ddatblygiadau o Ganolfan Ymchwil Palo Alto Xerox (PARC). Roedd y rhain yn cynnwys y rhyngwyneb defnyddiwr graffigol, rhwydweithio ethernet a’r argraffydd laser. Yn ogystal â’r rhain, roedd ffordd newydd o feddwl am raglennu – sef dylunio gwrthrych-gyfeiriadol. Yn hytrach nag ystyried rhaglenni fel cyfres o is-reolweithiau a oedd yn galw ei gilydd, roedd rhaglennu gwrthrych-gyfeiriadol yn dadelfennu rhaglen fawr i wrthrychau fel roedd rhaglennu gweithredol yn ei annog. Model syml o gyfrifiadur yw gwrthrych, sy’n rhyngweithio gyda gwrthrychau eraill drwy drosglwyddo negeseuon.
Mae llawer o ieithoedd gwrthrych-gyfeiriadol yn cynnwys y syniad o ddosbarth. Dyma fath arbennig o wrthrych a ddefnyddir i greu gwrthrychau. Mewn ieithoedd sy’n seiliedig ar ddosbarth, diffinnir ymddygiad gwrthrych gan ei ddosbarth - a allai yn ei dro etifeddu rhywfaint o’i ymddygiad o ddosbarth arall. Mae’r syniad hwn yn dod o iaith Simula a ddyluniwyd yn wreiddiol ar gyfer efelychu. Cyflwynwyd dosbarthiadau yn Simula i ganiatáu categorïau cyffredinol o wrthrychau a efelychwyd i rannu codau’n hawdd. Roedd modd mireinio’r rhain i gynrychioli mathau mwy arbenigol o wrthrych a efelychwyd. Er bod ieithoedd gwrthrych-gyfeiriadol yn etifeddu llawer o syniadau Simula, roedd yn brin o nifer o nodweddion megis mewngapsiwleiddio a ystyrir yn gyffredinol fel gofynion ar gyfer iaith gwrthrych-gyfeiriadol.
Gwnaeth ieithoedd gwrthrych-gyfeiriadol mwy newydd, megis Self, Io neu JavaScript gefnu ar y syniad hwn. Sylwodd dylunwyr Self fod dosbarthiadau a oedd yn etifeddu ymddygiad gan ddosbarthiadau eraill, a gwrthrychau a oedd yn etifeddu ymddygiad o ddosbarthiadau ill dau yn achosion arbennig ar gyfer y syniad cyffredinol o ddirprwyo. Yn Self, gellir ychwanegu ymddygiad pellach at unrhyw wrthrych, a’i ddyblygu drwy ei anfon at neges wedi’i chlonio. Mae gwrthrych wedi’i glonio yn dirprwyo pob un o’i ymddygiadau i’r gwrthrych gwreiddiol. Mae hyn yn caniatáu i nodweddion gwrthrychau weithredu fel templedi ar gyfer gwrthrychau cyffredin yn yr un modd y mae dosbarthiadau yn ei wneud mewn ieithoedd mwy traddodiadol.
Mewn rhaglen distrwythur, rheolir y llif drwy ddefnyddio neidiau. Gyda rhaglennu gweithredol, rheolir y llif gan ddefnyddio galwadau a dychweliadau is-reolweithiau. Gyda rhaglennu gwrthrych-gyfeiriadol, rheolir y llif gan ddefnyddio gweithrediadau trosglwyddo negeseuon.
Yn Smalltalk sef yr iaith gwrthrych-gyfeiriadol canonaidd, nid oes unrhyw weithrediadau rheoli llif penodol o gwbl. Ceir un math o wrthrych integredig, o’r enw BlockClosure, sy’n cynrychioli bloc o gôd ac sy’n ymateb i neges werth - sy’n ei gwerthuso ac yn cael y gwerth dychwelyd. Caiff mynegiannau amodol eu ffurfio drwy anfon ifTrue: neges at wrthrych yn cynrychioli gwerth Boole, gyda bloc fel y ddadl. Ar un llaw, bydd achosion o'r dosbarth True yn gweithredu'r bloc pan fyddant yn derbyn y neges, ac ar y llaw arall, ni fydd achosion o'r dosbarth False yn gwneud hyn.
David Chisnall
Deunyddiau darllen pellach: Adele Goldberg a David Robson, Smalltalk-80: The language and its implementation, Cwmni Cyhoeddi Addison-Wesley, 1983