Pum cwestiwn am ddylunio iaith rhaglennu

Pum cwestiwn am ddylunio iaith rhaglennu

Athroniaeth Arweiniol

1. Ieithoedd rhaglennu ar gyfer pobl

Ieithoedd rhaglennu yw sut mae pobl yn siarad â chyfrifiaduron. Bydd y cyfrifiadur yn hapus i siarad unrhyw iaith nad yw'n amwys. Y rheswm fod gennym ieithoedd lefel uchel yw oherwydd nad yw pobl yn gallu trin iaith peiriant. Pwynt ieithoedd rhaglennu yw atal ein hymennydd dynol tlawd, bregus rhag cael eu llethu gan ormod o fanylion.

Mae penseiri yn gwybod bod rhai problemau dylunio yn fwy cyffredin nag eraill. Rhai o'r problemau dylunio cliriaf a mwyaf haniaethol yw dyluniad pontydd. Yn yr achos hwn, eich swydd chi yw gorchuddio'r pellter gofynnol gyda chyn lleied o ddeunydd â phosibl. Ar ben arall y sbectrwm mae dyluniad cadair. Dylai dylunwyr cadeiriau dreulio eu hamser yn meddwl am fonion pobl.

Mae gan ddatblygiad meddalwedd wahaniaeth tebyg. Mae dylunio algorithmau i gyfeirio data trwy rwydwaith yn broblem haniaethol braf, fel dylunio pontydd. Tra bod dylunio ieithoedd rhaglennu fel dylunio cadeiriau: mae'n rhaid i chi ddelio â gwendidau dynol.

Mae hyn yn anodd i'r rhan fwyaf ohonom ei sylweddoli. Mae dylunio systemau mathemategol cain yn swnio'n llawer mwy deniadol i'r rhan fwyaf ohonom nag ymdroi i wendidau dynol. Rôl ceinder mathemategol yw bod rhywfaint o geinder yn gwneud rhaglenni'n haws eu deall. Ond nid ceinder yw'r cyfan.

A phan ddywedaf y dylai ieithoedd gael eu cynllunio i ddarparu ar gyfer gwendidau dynol, nid wyf yn golygu y dylai ieithoedd gael eu cynllunio ar gyfer rhaglenwyr gwael. Mewn gwirionedd, dylech ddylunio meddalwedd ar gyfer y rhaglenwyr gorau, ond mae gan hyd yn oed y rhaglenwyr gorau eu terfynau. Dydw i ddim yn meddwl y byddai unrhyw un yn mwynhau rhaglennu mewn iaith lle mae'r holl newidynnau wedi'u dynodi gan y llythyren "x" gyda thanysgrifiadau cyfanrif.

2. Dylunio i chi'ch hun a'ch ffrindiau

Os edrychwch chi ar hanes ieithoedd rhaglennu, cynlluniwyd y rhan fwyaf o'r ieithoedd gorau i'w defnyddio gan eu hawduron eu hunain, a dyluniwyd y rhan fwyaf o'r gwaethaf i bobl eraill eu defnyddio.

Pan fydd ieithoedd yn cael eu cynllunio ar gyfer pobl eraill, mae bob amser yn grŵp penodol o bobl: nid yw pobl mor smart â chrewyr yr iaith. Dyma sut rydych chi'n cael tafod sy'n siarad i lawr â chi. Cobol yw'r enghraifft amlycaf, ond mae'r rhan fwyaf o ieithoedd wedi'u trwytho â'r ysbryd hwn.

Nid oes ganddo ddim i'w wneud â pha mor uchel yw'r iaith. Mae C yn lefel eithaf isel, ond fe'i crëwyd i'w ddefnyddio gan ei awduron, a dyna pam mae hacwyr yn ei garu.

Y ddadl dros ddylunio ieithoedd ar gyfer rhaglenwyr gwael yw bod mwy o raglenwyr drwg na rhai da. Efallai mai felly y mae. Ond mae'r nifer fach hon o raglenwyr da yn ysgrifennu mwy o feddalwedd yn anghymesur.

Fy nghwestiwn yw, sut ydych chi'n creu iaith sy'n apelio at yr hacwyr gorau? Mae'n ymddangos i mi fod y cwestiwn hwn yn union yr un fath â'r cwestiwn o sut i greu iaith raglennu dda?, ond hyd yn oed os nad ydyw, mae o leiaf yn gwestiwn diddorol.

3. Rhowch gymaint o reolaeth â phosibl i'r rhaglennydd

Mae llawer o ieithoedd (yn enwedig y rhai sydd wedi'u cynllunio ar gyfer pobl eraill) yn gweithredu fel nanis: maen nhw'n ceisio eich rhybuddio chi i ffwrdd o bethau maen nhw'n meddwl na fydd yn ddefnyddiol i chi. Rwy'n cymryd y safbwynt arall: rhowch gymaint o reolaeth ag y gallwch i'r rhaglennydd.

Pan ddysgais Lisp am y tro cyntaf, yr hyn roeddwn i'n ei hoffi fwyaf oedd ein bod ni'n siarad yn gyfartal. Yn yr ieithoedd eraill yr oeddwn i wedi eu dysgu erbyn hynny, roedd yna iaith, ac roedd fy rhaglen yn yr iaith honno, ac roedden nhw'n bodoli'n eithaf ar wahân. Ond yn Lisp, roedd y swyddogaethau a'r macros a ysgrifennais yr un rhai ag yr ysgrifennwyd yr iaith ei hun ynddynt. Roeddwn i'n gallu ailysgrifennu'r iaith ei hun os oeddwn i eisiau. Roedd ganddo'r un apêl â meddalwedd ffynhonnell agored.

4. Chwaer dawn yw byrder

Nid yw byrder yn cael ei werthfawrogi a hyd yn oed ei ddirmygu. Ond os edrychwch i galonnau hacwyr, fe welwch eu bod yn hoff iawn o fyrder. Sawl gwaith ydych chi wedi clywed hacwyr yn siarad yn annwyl am sut, yn, dyweder, APL, y gallant wneud pethau rhyfeddol gyda dim ond cwpl o linellau o god? Mae'n debyg bod pobl smart iawn mewn gwirionedd yn hoffi talu sylw i hyn.

Rwy’n credu bod bron unrhyw beth sy’n gwneud rhaglenni’n fyrrach yn beth da. Dylai fod llawer o swyddogaethau llyfrgell, dylai popeth a all fod yn ymhlyg fod felly; dylai cystrawen fod yn fwy cryno; dylai enwau endidau hyd yn oed fod yn fyr.

Ac nid yn unig y dylai rhaglenni fod yn fyr. Dylai llawlyfrau hefyd fod yn fyr. Mae rhan dda o'r llawlyfrau wedi'i llenwi ag esboniadau, ymwadiadau, rhybuddion ac achosion arbennig. Os oes angen i chi fyrhau'r llawlyfr, yr opsiwn gorau yw cywiro'r iaith sydd angen cymaint o esboniad.

5. Cydnabod beth yw hacio

Byddai llawer o bobl yn hoffi hacio i fod yn fathemateg, neu o leiaf yn rhywbeth tebyg i wyddoniaeth. Rwy'n meddwl bod hacio yn debycach i bensaernïaeth. Mae pensaernïaeth yn ymwneud â ffiseg yn yr ystyr bod angen i bensaer ddylunio adeilad na fydd yn cwympo, ond gwir nod pensaer yw creu adeilad gwych, nid gwneud darganfyddiadau ym maes statig.

Yr hyn y mae hacwyr yn ei garu yw creu rhaglenni gwych. A chredaf, yn ein meddyliau ein hunain o leiaf, y dylem gofio bod ysgrifennu rhaglenni gwych yn beth rhyfeddol, hyd yn oed pan nad yw'r gwaith hwnnw'n trosi'n hawdd i arian deallusol arferol papurau gwyddonol. O safbwynt deallusol, mae hi'r un mor bwysig dylunio iaith y bydd rhaglenwyr yn ei charu ag ydyw i ddylunio un ofnadwy sy'n ymgorffori syniad y gallwch chi gyhoeddi papur amdano.

Materion Agored

1. Sut i drefnu llyfrgelloedd mawr?

Mae llyfrgelloedd yn dod yn rhan bwysig o ieithoedd rhaglennu. Maen nhw'n mynd mor fawr fel y gall fod yn beryglus. Os yw'n cymryd mwy o amser i ddod o hyd i swyddogaeth mewn llyfrgell sy'n gwneud yr hyn sydd ei angen arnoch nag i ysgrifennu'r swyddogaeth honno eich hun, yna nid yw'r holl god yn gwneud dim ond gwneud eich llawlyfr yn fwy trwchus. (Roedd y llawlyfrau Symbolics yn enghraifft o hyn.) Felly bydd yn rhaid i ni ddatrys y broblem trefniadaeth llyfrgell. Yn ddelfrydol, dyluniwch nhw fel bod y rhaglennydd yn gallu dyfalu pa swyddogaeth llyfrgell sy'n addas.

2. A oes gwir ofn ar gystrawen y rhagddodiad?

Mae hon yn broblem agored yn yr ystyr fy mod wedi bod yn meddwl amdani ers sawl blwyddyn ac yn dal ddim yn gwybod yr ateb. Mae cystrawen rhagddodiad yn ymddangos yn gwbl naturiol i mi, heblaw efallai am ei ddefnydd mewn mathemateg. Ond efallai mai'r gystrawen anghyfarwydd yn unig sy'n gyfrifol am lawer o amhoblogrwydd Lisp... Mater arall yw a ddylem wneud unrhyw beth yn ei gylch, os yn wir.

3. Beth sydd ei angen arnoch ar gyfer meddalwedd gweinydd?

Rwy'n meddwl y bydd y rhan fwyaf o'r cymwysiadau a fydd yn cael eu hysgrifennu yn yr ugain mlynedd nesaf yn gymwysiadau gwe, yn yr ystyr y bydd rhaglenni'n aros ar weinydd ac yn cyfathrebu â chi trwy borwr gwe. Ac i ysgrifennu ceisiadau o'r fath mae angen pethau newydd.

Un o'r pethau hynny yw cefnogaeth i ffordd newydd o ryddhau cymwysiadau gweinydd. Yn lle un neu ddau o ddatganiadau mawr y flwyddyn, fel meddalwedd bwrdd gwaith, bydd meddalwedd gweinydd yn cael ei ryddhau mewn cyfres o newidiadau bach. Efallai y byddwch yn cael pump neu ddeg datganiad y dydd. A bydd gan bawb y fersiwn ddiweddaraf bob amser.

Ydych chi'n gwybod sut i ddylunio rhaglenni i fod yn gynaliadwy? Rhaid dylunio meddalwedd gweinydd i fod yn gyfnewidiol. Dylech allu ei newid yn hawdd, neu o leiaf wybod beth mae mân newid yn ei olygu a beth sy'n bwysig.

Peth arall a all fod yn ddefnyddiol mewn meddalwedd gweinydd, yn sydyn, yw parhad y cyflenwad. Mewn cymhwysiad gwe gallwch ddefnyddio rhywbeth tebyg CPSi gael effaith arferion yn y byd di-wladwriaeth o sesiynau gwe. Efallai y byddai'n werth cael parhad cyflenwad os nad yw'r nodwedd yn rhy ddrud.

4. Pa dyniadau newydd sydd ar ôl i'w darganfod?

Dydw i ddim yn siŵr pa mor rhesymol yw'r gobaith hwnnw, ond yn bersonol hoffwn ddarganfod tyniad newydd - rhywbeth a allai fod mor ystyrlon â swyddogaethau o'r radd flaenaf neu recursion neu o leiaf paramedrau rhagosodedig. Efallai bod hon yn freuddwyd amhosibl. Yn aml nid yw pethau o'r fath yn cael eu darganfod. Ond dwi ddim yn colli gobaith.

Ychydig o gyfrinachau hysbys

1. Gallwch ddefnyddio unrhyw iaith y dymunwch

Yn flaenorol, roedd creu cymwysiadau yn golygu creu meddalwedd bwrdd gwaith. Ac mewn meddalwedd bwrdd gwaith mae gogwydd mawr tuag at ysgrifennu cymwysiadau yn yr un iaith â'r system weithredu. Felly ddeng mlynedd yn ôl, roedd ysgrifennu meddalwedd yn gyffredinol yn golygu meddalwedd ysgrifennu yn C. Yn y pen draw, esblygodd y traddodiad: ni ddylid ysgrifennu cymwysiadau mewn ieithoedd anarferol. Ac mae'r traddodiad hwn wedi esblygu cyhyd fel bod pobl annhechnegol fel rheolwyr a chyfalafwyr menter wedi ei ddysgu hefyd.

Mae meddalwedd gweinydd yn dinistrio'r model hwn yn llwyr. Gyda meddalwedd gweinydd gallwch ddefnyddio unrhyw iaith y dymunwch. Nid oes bron neb yn deall hyn eto (yn enwedig rheolwyr a chyfalafwyr menter). Ond mae rhai hacwyr yn deall hyn, a dyna pam rydyn ni'n clywed am ieithoedd indy fel Perl a Python. Nid ydym yn clywed am Perl a Python oherwydd bod pobl yn eu defnyddio i ysgrifennu cymwysiadau Windows.

Beth mae hyn yn ei olygu i ni, pobl sydd â diddordeb mewn dylunio iaith rhaglennu, bod yna gynulleidfa bosibl ar gyfer ein gwaith.

2. Mae cyflymder yn dod o broffilwyr

Mae datblygwyr iaith, neu o leiaf gweithredwyr iaith, yn hoffi ysgrifennu casglwyr sy'n cynhyrchu cod cyflym. Ond dwi'n meddwl nad dyna sy'n gwneud ieithoedd yn gyflym i ddefnyddwyr. Nododd Knuth ers talwm fod cyflymder yn dibynnu ar ychydig o dagfeydd yn unig. Ac mae unrhyw un sydd wedi ceisio cyflymu rhaglen yn gwybod na allwch chi ddyfalu ble mae'r dagfa. Profiler yw'r ateb.

Mae datblygwyr iaith yn datrys y broblem anghywir. Nid oes angen meincnodau ar ddefnyddwyr i redeg yn gyflym. Mae angen iaith arnyn nhw sy'n gallu dangos pa rannau o'u rhaglen sydd angen eu hailysgrifennu. Ar y pwynt hwn, mae angen cyflymder yn ymarferol. Felly efallai y byddai'n well i weithredwyr iaith dreulio hanner yr amser y maent yn ei dreulio yn optimeiddio'r casglwr a'i dreulio ar ysgrifennu proffiliwr da.

3. Mae angen ap sy'n gwneud i'ch iaith esblygu

Efallai nad dyma'r gwir yn y pen draw, ond mae'n ymddangos bod yr ieithoedd gorau wedi esblygu ynghyd â'r cymwysiadau y cawsant eu defnyddio ynddynt. Ysgrifennwyd C gan bobl oedd angen rhaglennu systemau. Dyluniwyd Lisp yn rhannol ar gyfer gwahaniaethu symbolaidd, ac roedd McCarthy mor awyddus i ddechrau arni nes iddo hyd yn oed ddechrau ysgrifennu rhaglenni gwahaniaethu yn y papur Lisp cyntaf yn 1960.

Mae hyn yn arbennig o dda os yw'ch cais yn datrys rhai problemau newydd. Mae hyn yn gwthio'ch iaith i gael nodweddion newydd y mae rhaglenwyr eu heisiau. Yn bersonol, mae gen i ddiddordeb mewn ysgrifennu iaith a fydd yn dda ar gyfer cymwysiadau gweinydd.

[Yn ystod y drafodaeth, gwnaeth Guy Steele y pwynt hwn hefyd, gan ychwanegu na ddylai'r cais gynnwys ysgrifennu casglwr ar gyfer eich iaith, oni bai bod eich iaith wedi'i chynllunio i ysgrifennu casglwyr.]

4. Rhaid i'r iaith fod yn addas ar gyfer ysgrifennu rhaglenni un-amser.

Rydych chi'n gwybod beth mae rhaglen un ergyd yn ei olygu: dyma pryd mae angen i chi ddatrys rhywfaint o broblem gyfyngedig yn gyflym. Credaf, os edrychwch o gwmpas, y byddwch yn dod o hyd i lawer o raglenni difrifol a ddechreuodd fel rhaglenni unwaith ac am byth. Fyddwn i ddim yn synnu pe bai'r rhan fwyaf o raglenni'n dechrau fel rhaglenni unwaith ac am byth. Felly, os ydych chi am greu iaith a fydd yn addas ar gyfer ysgrifennu meddalwedd yn gyffredinol, yna dylai hefyd fod yn addas ar gyfer ysgrifennu rhaglenni unwaith ac am byth, oherwydd dyma gam cychwynnol llawer o raglenni.

5. Mae cystrawen yn gysylltiedig â semanteg

Yn draddodiadol credir bod cystrawen a semanteg yn bethau tra gwahanol. Gall hyn swnio'n syfrdanol, ond nid yw. Rwy'n meddwl bod a wnelo'r hyn yr ydych am ei gyflawni yn eich rhaglen â sut yr ydych yn ei fynegi.

Siaradais â Robert Morris yn ddiweddar, a nododd fod gorlwytho gweithredwyr yn fantais fawr i fuddugoliaeth ieithoedd â chystrawen infix. Mewn ieithoedd gyda chystrawen rhagddodiad, mae unrhyw swyddogaeth rydych chi'n ei ddiffinio yn weithredwr mewn gwirionedd. Os ydych chi am ychwanegu math newydd o rif rydych chi wedi'i greu, gallwch chi ddiffinio swyddogaeth newydd i'w ychwanegu. Os gwnewch hyn mewn iaith â chystrawen infix, fe welwch fod gwahaniaeth mawr rhwng defnyddio gweithredwr wedi'i orlwytho a galw swyddogaeth.

Syniadau sy'n dod yn ôl dros amser

1. Ieithoedd rhaglennu newydd

Wrth edrych yn ôl i'r 1970au, roedd yn ffasiynol datblygu ieithoedd rhaglennu newydd. Nid felly y mae yn awr. Ond credaf y bydd meddalwedd gweinydd yn dod â'r ffasiwn ar gyfer creu ieithoedd newydd yn ôl eto. Gyda meddalwedd gweinydd gallwch ddefnyddio unrhyw iaith y dymunwch, felly os bydd rhywun yn creu iaith sy'n ymddangos yn well na'r gweddill, bydd yna bobl a fydd yn penderfynu ei defnyddio.

2. Rhannu amser

Lluniodd Richard Kelsey y syniad hwn y mae ei amser wedi dod eto ac rwy’n ei gefnogi’n llwyr. Fy dyfalu (a Microsoft hefyd) yw y bydd llawer o gyfrifiadura yn symud o'r bwrdd gwaith i weinyddion anghysbell. Mewn geiriau eraill, mae rhannu amser yn ôl. Rwy'n meddwl y bydd angen cymorth ar lefel iaith ar hyn. Er enghraifft, mae Richard a Jonathan Reeves wedi gwneud llawer o waith i roi amserlennu prosesau ar waith yng Nghynllun 48.

3. Effeithlonrwydd

Yn ddiweddar roedd yn ymddangos bod cyfrifiaduron eisoes yn ddigon cyflym. Rydym yn clywed mwy a mwy am bytecode, sydd o leiaf i mi yn golygu bod gennym rywfaint o bŵer wrth gefn. Ond credaf, gyda meddalwedd gweinydd, nad yw gennym ni. Bydd yn rhaid i rywun dalu am y gweinyddwyr sy'n rhedeg y meddalwedd, a bydd nifer y defnyddwyr y gall y gweinydd eu cefnogi fesul peiriant yn rhannu eu costau cyfalaf.

Rwy'n meddwl y bydd effeithlonrwydd o bwys, o leiaf mewn tagfeydd cyfrifiadurol. Bydd hyn yn arbennig o bwysig ar gyfer gweithrediadau I/O, oherwydd bod cymwysiadau gweinydd yn cyflawni llawer o weithrediadau o'r fath.

Yn y diwedd, mae'n bosibl nad beitcode yw'r ateb. Mae'n ymddangos bod Sun a Microsoft yn mynd benben â'i gilydd yn y maes bytecode ar hyn o bryd. Ond maen nhw'n gwneud hyn oherwydd bod bytecode yn lle cyfleus i wreiddio'i hun mewn proses, nid oherwydd bod bytecode ei hun yn syniad da. Efallai y bydd y frwydr gyfan hon yn mynd heb i neb sylwi. Byddai'n ddoniol.

Maglau a maglau

1. Cleientiaid

Dyfaliad yn unig yw hyn, ond yr unig gymwysiadau a fydd yn elwa yw'r rhai sy'n gyfan gwbl ar ochr y gweinydd. Mae dylunio meddalwedd sy'n gweithredu ar y rhagdybiaeth y bydd gan bawb gwsmer fel dylunio cymdeithas yn seiliedig ar y rhagdybiaeth y bydd pawb yn onest. Byddai’n bendant yn gyfleus, ond mae’n rhaid ichi gymryd yn ganiataol na fydd byth yn digwydd.

Rwy’n meddwl y bydd cynnydd cyflym mewn dyfeisiau sy’n cael eu galluogi ar y we, a gallwn gymryd yn ganiataol y byddant yn cefnogi html a ffurflenni sylfaenol. Oes gennych chi borwr ar eich ffôn? A fydd gan eich PalmPilot ffôn? A fydd gan eich mwyar duon sgrin fwy? A fyddwch chi'n gallu cyrchu'r Rhyngrwyd o'ch bachgen gêm? O'ch oriawr? Dydw i ddim yn gwybod. Ac ni fydd yn rhaid i mi ddarganfod a fyddaf yn betio y bydd popeth ar y gweinydd. Mae'n llawer mwy dibynadwy cael yr holl ymennydd ar y gweinydd. .

2. Rhaglennu sy'n canolbwyntio ar wrthrychau

Rwy'n sylweddoli bod hwn yn ddatganiad dadleuol, ond nid wyf yn meddwl bod OOP mor bwysig â hynny. Rwy'n credu bod hwn yn batrwm addas ar gyfer cymwysiadau penodol sydd angen strwythurau data penodol, fel systemau ffenestri, efelychiadau, systemau CAD. Ond dwi ddim yn deall pam y dylai fod yn addas ar gyfer pob rhaglen.

Rwy'n meddwl bod pobl mewn cwmnïau mawr yn caru OOP, yn rhannol, oherwydd mae'n gwneud llawer o bethau sy'n edrych fel gwaith. Gall yr hyn a allai gael ei gynrychioli'n naturiol fel, dyweder, rhestr o gyfanrifau, gael ei gynrychioli bellach fel ystafell ddosbarth gyda phob math o sgaffaldiau, prysurdeb.

Nodwedd ddeniadol arall o OOP yw bod dulliau yn rhoi rhywfaint o effaith swyddogaethau o'r radd flaenaf i chi. Ond nid yw hyn yn newyddion i raglenwyr Lisp. Pan fydd gennych chi swyddogaethau o'r radd flaenaf go iawn, gallwch chi eu defnyddio mewn unrhyw ffordd sy'n addas ar gyfer y dasg dan sylw, yn lle gwthio popeth i mewn i boelerplate o ddosbarthiadau a dulliau.

Rwy'n meddwl mai'r hyn y mae hyn yn ei olygu i ddylunio iaith yw na ddylech wreiddio OOP yn rhy ddwfn ynddo. Efallai mai'r ateb yw cynnig pethau mwy cyffredinol, sylfaenol, a gadael i bobl ddylunio unrhyw systemau gwrthrychau fel llyfrgelloedd.

3. Dyluniad gan bwyllgor

Os yw eich iaith wedi’i chynllunio gan bwyllgor, yna rydych chi’n gaeth, ac nid dim ond am resymau y mae pawb yn eu gwybod. Mae pawb yn gwybod bod pwyllgorau yn dueddol o greu dyluniadau iaith talpiog, anghyson. Ond rwy'n meddwl mai'r perygl mawr yw nad ydyn nhw'n cymryd risgiau. Pan fydd un person wrth y llyw, mae'n cymryd risgiau na fyddai'r pwyllgor byth yn cytuno i'w cymryd.

Oes angen i chi fentro i greu iaith dda? Efallai y bydd llawer o bobl yn amau ​​​​mai dylunio iaith yw lle mae'n rhaid i chi aros yn eithaf agos at ddoethineb traddodiadol. Rwy'n betio nad yw hynny'n wir. Ym mhopeth arall y mae pobl yn ei wneud, mae'r wobr yn gymesur â'r risg. Felly pam ddylai dylunio iaith fod yn wahanol?

Ffynhonnell: hab.com

Ychwanegu sylw