Tá níos mó i gceist le ríomhchlárú ná códú

Tá níos mó i gceist le ríomhchlárú ná códú

Is alt aistriúcháin é seo Seimineár Stanford. Ach roimhe sin tá réamhrá gairid ann. Conas a fhoirmítear zombies? Tá gach duine tar éis iad féin a aimsiú i gcás inar mian leo cara nó comhghleacaí a thabhairt suas go dtí a leibhéal, ach ní oibríonn sé amach. Thairis sin, "ní oibríonn sé amach" ní an oiread sin duitse, ach dó: ar thaobh amháin den scála tá gnáth-thuarastal, tascanna, agus mar sin de, agus ar an taobh eile is gá smaoineamh. Tá an smaoineamh míthaitneamhach agus pianmhar. Éiríonn sé go tapa agus leanann sé ag scríobh cód gan úsáid a bhaint as a inchinn ar chor ar bith. Tuigeann tú cé mhéad iarracht a thógann sé an bac a bhaineann le heaspa cabhrach foghlamtha a shárú, agus ní dhéanann tú é. Seo é mar a fhoirmítear zombies, a bhfuil an chuma orthu gur féidir iad a leigheas, ach is cosúil nach ndéanfaidh aon duine é seo.

Nuair a chonaic mé sin Leslie Lamport (sea, an cara céanna sin ó na téacsleabhair) a thagann go dtí an Rúis agus nach bhfuil ag tabhairt tuairisce, ach seisiún ceisteanna agus freagraí, bhí mé rud beag fainiciúil. Ar eagla na heagla, is eolaí a bhfuil cáil dhomhanda uirthi í Leslie, údar saothar ceannródaíoch sa ríomhaireacht dháilte, agus b’fhéidir go mbeadh aithne agat air leis na litreacha La in LaTeX – “Lamport TeX”. Is é an dara fachtóir scanrúil a riachtanas: ní mór do gach duine a thagann (go hiomlán saor in aisce) éisteacht le cúpla tuairiscí roimh ré, teacht suas le ceist amháin ar a laghad fúthu, agus gan ach teacht ansin. Chinn mé féachaint cad a bhí Lamport ag craoladh ann - agus tá sé ar fheabhas! Is é seo go díreach an rud sin, pillín nasc draíochta chun zombies a chóireáil. Tugaim rabhadh duit: d’fhéadfadh an téacs iad siúd a bhfuil grá acu do mhodheolaíochtaí sár-lúfar agus nach maith leo an méid atá scríofa acu a thástáil.

Tar éis an habrokat, cuirtear tús le haistriú an tseimineáir. Bain sult as léamh!

Cibé tasc a dhéanann tú, caithfidh tú dul trí thrí chéim i gcónaí:

  • cinneadh a dhéanamh ar an sprioc is mian leat a bhaint amach;
  • cinneadh a dhéanamh ar cé chomh díreach agus a bhainfidh tú amach do sprioc;
  • do sprioc a bhaint amach.

Baineann sé seo freisin le cláir. Nuair a scríobhaimid cód, ní mór dúinn:

  • cinneadh a dhéanamh ar cad go díreach ba cheart don chlár a dhéanamh;
  • a chinneadh go beacht conas ba cheart dó a thasc a chomhlíonadh;
  • scríobh an cód cuí.

Tá an chéim dheireanach, ar ndóigh, an-tábhachtach, ach ní labhróidh mé faoi inniu. Ina áit sin, déanfaimid plé ar an gcéad dá cheann. Feidhmíonn gach ríomhchláraitheoir iad sula dtosaíonn siad ag obair. Ní shuíonn tú síos chun scríobh mura bhfuil cinneadh déanta agat ar a bhfuil á scríobh agat: brabhsálaí nó bunachar sonraí. Ní mór smaoineamh áirithe ar an sprioc a bheith i láthair. Agus is cinnte go smaoiníonn tú ar cad go díreach a dhéanfaidh an clár, agus ná scríobh go randamach é le súil go mbeidh an cód féin ina bhrabhsálaí ar bhealach éigin.

Conas go díreach a tharlaíonn an réamh-smaoineamh seo ar chód? Cé mhéad iarracht ba chóir dúinn a chur isteach seo? Braitheann sé go léir ar cé chomh casta is atá an fhadhb atá á réiteach againn. Ligean le rá gur mhaith linn córas dáilte locht-fhulangach a scríobh. Sa chás seo, ba cheart dúinn smaoineamh go cúramach ar rudaí sula suífidh muid síos chun cód a dhéanamh. Cad a tharlóidh mura bhfuil uainn ach athróg slánuimhir a incrimint faoi 1? Ar an gcéad amharc, tá gach rud anseo fánach agus ní gá aon smaoineamh, ach ansin cuimhnímid gur féidir le ró-shreabhadh tarlú. Dá bhrí sin, fiú amháin chun a thuiscint an bhfuil fadhb simplí nó casta, ní mór duit smaoineamh ar dtús.

Má smaoiníonn tú ar réitigh fhéideartha ar fhadhb roimh ré, féadfaidh tú botúin a sheachaint. Ach éilíonn sé seo do smaoineamh a bheith soiléir. Chun é seo a bhaint amach, ní mór duit do chuid smaointe a scríobh síos. Is breá liom an sliocht Dick Guindon: “Nuair a scríobhann tú, taispeánann an dúlra duit cé chomh sloppy atá do smaoineamh.” Mura scríobhann tú, ní dóigh leat ach go bhfuil tú ag smaoineamh. Agus ní mór duit do chuid smaointe a scríobh síos i bhfoirm sonraíochtaí.

Feidhmíonn sonraíochtaí go leor feidhmeanna, go háirithe i dtionscadail mhóra. Ach ní bheidh mé ag caint ach faoi cheann amháin acu: cuidíonn siad linn smaoineamh go soiléir. Tá smaoineamh soiléir an-tábhachtach agus deacair go leor, mar sin teastaíonn aon chabhair uainn anseo. Cén teanga ar cheart dúinn sonraíochtaí a scríobh inti? Go ginearálta, is é seo an chéad cheist i gcónaí do ríomhchláraitheoirí: cén teanga a scríobhfaimid? Níl aon fhreagra ceart amháin ann: tá na fadhbanna a réitímid ró-ilghnéitheach. I gcás daoine áirithe, is teanga sonraíochta í TLA+ a d’fhorbair mé. I gcás daoine eile, tá sé níos áisiúla Sínis a úsáid. Braitheann sé go léir ar an gcás.

Is í an cheist is tábhachtaí ná: conas is féidir linn smaoineamh níos soiléire a bhaint amach? Freagra: Ní mór dúinn smaoineamh ar nós eolaithe. Is bealach smaointeoireachta é seo a d’oibrigh go maith le 500 bliain anuas. San eolaíocht tógaimid samhlacha matamaiticiúla den réaltacht. B’fhéidir gurbh í an réalteolaíocht an chéad eolaíocht i gciall dhian an fhocail. Sa mhúnla matamaitice a úsáidtear sa réalteolaíocht, feictear coirp neamhaí mar phointí le mais, suíomh agus móiminteam, cé gur réada an-chasta iad i ndáiríre le sléibhte agus aigéin, le tralaí agus le sreafaí. Cruthaíodh an tsamhail seo, cosúil le haon cheann eile, chun fadhbanna áirithe a réiteach. Tá sé iontach chun a chinneadh cá háit le teileascóp a chur in iúl más mian leat pláinéad a aimsiú. Ach más mian leat an aimsir ar an bpláinéad seo a thuar, ní oibreoidh an tsamhail seo.

Ceadaíonn an mhatamaitic dúinn airíonna samhail a chinneadh. Agus léiríonn an eolaíocht conas a bhaineann na hairíonna seo leis an réaltacht. A ligean ar labhairt faoi ár eolaíocht, eolaíocht ríomhaireachta. Is é an réaltacht a n-oibrímid léi ná córais ríomhaireachta de go leor cineálacha éagsúla: próiseálaithe, consóil cluiche, ríomhairí a ritheann cláir, agus mar sin de. Labhróidh mé faoi chlár a chur i gcrích ar ríomhaire, ach, tríd is tríd, baineann na conclúidí seo go léir le haon chóras ríomhaireachta. Inár n-eolaíocht úsáidimid go leor samhlacha éagsúla: an meaisín Turing, tacair imeachtaí a ordaíodh go páirteach, agus go leor eile.

Cad é an clár? Seo cód ar bith is féidir a mheas ina aonar. Ligean le rá go gcaithfimid brabhsálaí a scríobh. Déanaimid trí thasc: dearadh cur i láthair úsáideora an chláir, ansin scríobh léaráid ardleibhéil an chláir, agus ar deireadh scríobh an cód. Agus an cód á scríobh againn, tuigimid go gcaithfimid formáiditheoir téacs a scríobh. Anseo arís ní mór dúinn trí fhadhb a réiteach: a chinneadh cén téacs a chuirfidh an uirlis seo ar ais; roghnaigh algartam le haghaidh formáidiú; scríobh cód. Tá a fhothasc féin ag an tasc seo: naisc a chur isteach i bhfocail i gceart. Réitímid an fothasc seo i dtrí chéim freisin - mar a fheicimid, déantar iad a athdhéanamh ar go leor leibhéil.

Breathnaímis níos géire ar an gcéad chéim: cén fhadhb a réitíonn an clár. Anseo is minic a dhéanaimid samhail de chlár mar fheidhm a ghlacann ionchur éigin agus a thugann roinnt aschur. Sa mhatamaitic, is gnách go gcuirtear síos ar fheidhm mar shraith ordaithe péirí. Mar shampla, is é an tacar {<0,0>, <1,1>, <2,4>, <3,9>, …} a chuirtear síos ar an bhfeidhm cearnógach le haghaidh uimhreacha aiceanta. Is é an fearann ​​sainmhínithe ar fheidhm den sórt sin ná sraith na gcéad eilimintí de gach péire, is é sin, uimhreacha aiceanta. Chun feidhm a shainiú, ní mór dúinn a fearann ​​agus a fhoirmle a shonrú.

Ach ní hionann feidhmeanna sa mhatamaitic agus feidhmeanna i dteangacha ríomhchlárúcháin. Tá an mata i bhfad níos simplí. Ós rud é nach bhfuil am agam le haghaidh samplaí casta, déanaimis smaoineamh ar cheann simplí: feidhm in C nó modh statach i Java a thugann an comhroinnteoir is mó de dhá shlánuimhir ar ais. I sonraíocht an mhodha seo scríobhfaimid: ríomhann GCD(M,N) le haghaidh argóintí M и NI gcás ina GCD(M,N) - feidhm a bhfuil a fearann ​​ina shraith de phéirí slánuimhreacha, agus is é an luach aischuir an tslánuimhir is mó atá roinnte ar M и N. Conas a chuirtear an réaltacht i gcomparáid leis an múnla seo? Feidhmíonn an tsamhail le slánuimhreacha, agus i C nó Java tá 32-giotán againn int. Ligeann an tsamhail seo dúinn cinneadh a dhéanamh an bhfuil an algartam ceart GCD, ach ní chuirfidh sé cosc ​​​​ar earráidí overflow. Bheadh ​​múnla níos casta de dhíth air seo, nach bhfuil am ar bith ann.

A ligean ar labhairt faoi na teorainneacha na feidhme mar mhúnla. Ní thugann roinnt clár (cosúil le córais oibriúcháin) luach ar leith ar ais d’argóintí áirithe; is féidir leo rith go leanúnach. Ina theannta sin, níl an fheidhm mar mhúnla oiriúnach go dona don dara céim: pleanáil conas an fhadhb a réiteach. Déanann Quicksort agus sórtáil mboilgeog an fheidhm chéanna a ríomh, ach is halgartaim go hiomlán difriúil iad. Dá bhrí sin, chun cur síos a dhéanamh ar an mbealach chun sprioc an chláir a bhaint amach, úsáidim samhail eile, déanaimis an tsamhail iompraíochta caighdeánach a ghlaoch air. Léirítear an clár ann mar thacar de gach iompraíocht bhailí, agus seicheamh stát é gach ceann acu, ar a seal, agus is stát é sannadh luachanna ar athróga.

Féachaimis cén chuma a bheadh ​​ar an dara céim don algartam Eoiclídeach. Ní mór dúinn a ríomh GCD(M, N). Tús a chur againn M как xAgus N как y, ansin déan an ceann is lú de na hathróga seo a dhealú arís agus arís eile ón gceann is mó go dtí go bhfuil siad cothrom. Mar shampla, más rud é M = 12Agus N = 18, is féidir linn cur síos a dhéanamh ar an iompar seo a leanas:

[x = 12, y = 18] → [x = 12, y = 6] → [x = 6, y = 6]

Agus má tá an M = 0 и N = 0? Tá náid inroinnte ar na huimhreacha go léir, mar sin níl aon roinnteoir is mó sa chás seo. Sa chás seo, ní mór dúinn dul ar ais go dtí an chéad chéim agus fiafraí: an gá dúinn i ndáiríre GCD a ríomh le haghaidh uimhreacha neamhdearfach? Mura bhfuil sé seo riachtanach, ansin ní mór duit ach an tsonraíocht a athrú.

Tá digression gairid ar tháirgiúlacht in ord anseo. Is minic a thomhaistear é i líon na línte cód a scríobhtar in aghaidh an lae. Ach tá do chuid oibre i bhfad níos úsáidí má fhaigheann tú réidh le líon áirithe línte, toisc go bhfuil níos lú spáis agat le haghaidh fabhtanna. Agus is é an bealach is éasca chun fáil réidh le cód sa chéad chéim. Is féidir nach bhfuil ag teastáil uait ach na cloigíní agus na feadóga go léir atá tú ag iarraidh a chur i bhfeidhm. Is é an bealach is tapúla chun clár a shimpliú agus am a shábháil ná gan rudaí a dhéanamh nár cheart a dhéanamh. Tá an dara acmhainneacht coigilte ama is airde ag an dara céim. Má thomhaiseann tú táirgiúlacht i dtéarmaí línte scríofa, ansin beidh tú ag smaoineamh ar conas tasc a chur i gcrích níos lú táirgiúla, mar is féidir leat an fhadhb chéanna a réiteach le níos lú cód. Ní féidir liom staitisticí cruinne a thabhairt anseo, mar níl aon bhealach agam chun líon na línte nár scríobh mé a chomhaireamh mar gheall ar an am a chaith mé ar an tsonraíocht, is é sin, ar an gcéad agus an dara céim. Agus ní féidir linn turgnamh a dhéanamh anseo ach an oiread, mar i dturgnamh níl sé de cheart againn an chéad chéim a chur i gcrích; socraítear an tasc roimh ré.

Is furasta go leor deacrachtaí a neamhaird i sonraíochtaí neamhfhoirmiúla. Níl aon rud deacair maidir le sonraíochtaí dochta a scríobh le haghaidh feidhmeanna; ní phléifidh mé é seo. Ina áit sin, beidh muid ag caint faoi scríobh sonraíochtaí láidre le haghaidh iompraíochtaí caighdeánach. Tá teoirim ann a shonraíonn gur féidir cur síos a dhéanamh ar aon sraith iompraíochta ag baint úsáide as an maoin slándála (sábháilteacht) agus airíonna marthanachta (beotacht). Ciallaíonn sábháilteacht nach dtarlóidh aon rud dona, ní thabharfaidh an clár an freagra mícheart. Ciallaíonn inmharthanacht go dtarlóidh rud éigin maith luath nó mall, i.e. luath nó mall tabharfaidh an clár an freagra ceart. De ghnáth, is táscaire níos tábhachtaí í an tslándáil; is minic a tharlaíonn earráidí anseo. Dá bhrí sin, chun am a shábháil, ní bheidh mé ag caint faoi marthanacht, cé go bhfuil sé, ar ndóigh, tábhachtach freisin.

Bainimid sábháilteacht amach trí thacar de stáit tosaigh fhéideartha a shonrú ar dtús. Agus ar an dara dul síos, caidreamh le gach stát eile is féidir do gach stát. Déanaimis sinn féin a iompar mar eolaithe agus déanaimid stáit a shainiú go matamaiticiúil. Déanann an fhoirmle cur síos ar thacar na staid tosaigh, mar shampla, i gcás an algartam Eoiclídeach: (x = M) ∧ (y = N). Le haghaidh luachanna áirithe M и N níl ach stát tosaigh amháin ann. Déantar cur síos ar an ngaol leis an gcéad staid eile trí fhoirmle ina scríobhtar athróga an chéad staid eile le príomh, agus ina scríobhtar athróga an stáit reatha gan eochair. I gcás an algartam Eoiclídeach, beimid ag déileáil le dícheangal dhá fhoirmle, i gceann acu x Is é an luach is mó, agus sa dara - y:

Tá níos mó i gceist le ríomhchlárú ná códú

Sa chéad chás, tá luach nua y comhionann leis an luach roimhe y, agus faigheann muid luach nua x tríd an athróg níos lú a dhealú ón gceann is mó. Sa dara cás, déanaimid a mhalairt.

Fillfimid ar an algartam Eoiclídeach. Cuir i gcás arís go bhfuil M = 12, N = 18. Sainmhíníonn sé seo staid tosaigh amháin, (x = 12) ∧ (y = 18). Ansin cuirimid na luachanna seo isteach san fhoirmle thuas agus faighimid:

Tá níos mó i gceist le ríomhchlárú ná códú

Seo an t-aon réiteach féideartha: x' = 18 - 12 ∧ y' = 12, agus faigheann muid an iompar: [x = 12, y = 18]. Ar an mbealach céanna, is féidir linn cur síos a dhéanamh ar gach stát inár n-iompraíocht: [x = 12, y = 18] → [x = 12, y = 6] → [x = 6, y = 6].

Sa stát deireanach [x = 6, y = 6] beidh an dá chuid den abairt bréagach, dá bhrí sin níl an chéad stát eile aige. Mar sin, ní mór dúinn sonraíocht iomlán ar an dara céim - mar a fheicimid, tá sé seo matamaitic go leor gnáth, mar sin de innealtóirí agus eolaithe, agus ní aisteach, mar atá san eolaíocht ríomhaireachta.

Is féidir an dá fhoirmle seo a chomhcheangal in aon fhoirmle amháin de loighic ama. Tá sé galánta agus éasca a mhíniú, ach níl aon am ann anois. D’fhéadfadh go mbeadh gá againn le loighic ama ach amháin maidir le maoin na beocht; ar mhaithe le slándáil níl sé ag teastáil. Ní maith liom loighic ama mar sin, ní gnáth-mhatamaitic í, ach i gcás beogacht is olc riachtanach é.

I algartam Eoiclídeach do gach luach x и y tá luachanna uathúla ann x' и y', a fhágann go bhfuil an gaol leis an gcéad stát eile fíor. I bhfocail eile, tá an t-algartam Eoiclídeach cinntitheach. Chun algartam neamhchinntitheach a shamhaltú, ní mór go mbeadh il-stáit fhéideartha sa todhchaí ag an stát reatha, agus ní mór go mbeadh luachanna iolracha den athróg primed ag gach luach den athróg neamhphríomha ionas go mbeidh an gaol leis an gcéad stát eile fíor. Níl sé seo deacair a dhéanamh, ach ní thabharfaidh mé samplaí anois.

Chun uirlis oibre a dhéanamh, teastaíonn matamaitic fhoirmiúil uait. Conas sonraíocht a dhéanamh foirmiúil? Chun seo a dhéanamh beidh teanga fhoirmiúil de dhíth orainn, e.g. TLA+. Breathnóidh sonraíocht an algartam Eoiclídeach sa teanga seo mar seo:

Tá níos mó i gceist le ríomhchlárú ná códú

Ciallaíonn siombail an chomhartha chomhionann le triantán go gcinntear go bhfuil an luach ar thaobh na láimhe clé den chomhartha comhionann leis an luach ar thaobh na láimhe deise den chomhartha. Go bunúsach, is sainmhíniú é sonraíocht, inár gcás dhá shainmhíniú. Ní mór duit dearbhuithe agus roinnt comhréire a chur leis an tsonraíocht in TLA+, mar atá sa sleamhnán thuas. In ASCII bheadh ​​cuma mar seo air:

Tá níos mó i gceist le ríomhchlárú ná códú

Mar a fheiceann tú, níl aon rud casta. Is féidir an tsonraíocht ar TLA+ a fhíorú, i.e., is féidir gach iompar féideartha a sheachaint i múnla beag. Is é ár gcás, beidh an tsamhail seo ina luachanna áirithe M и N. Is modh fíoraithe an-éifeachtach agus simplí é seo atá go hiomlán uathoibríoch. Ina theannta sin, is féidir cruthúnais fhoirmiúla fírinne a scríobh agus iad a sheiceáil go meicniúil, ach tógann sé seo go leor ama, mar sin ní dhéanann beagnach aon duine é seo.

Is é an príomh-mhíbhuntáiste a bhaineann le TLA+ ná gur matamaitic atá i gceist, agus tá eagla ar ríomhchláraitheoirí agus ar ríomheolaithe roimh an matamaitic. Ar an gcéad amharc is cosúil le joke é seo, ach, ar an drochuair, deirim é seo go dáiríre. Ní raibh mo chomhghleacaí ach ag insint dom conas a rinne sé iarracht TLA+ a mhíniú do roinnt forbróirí. Chomh luath agus a bhí na foirmlí le feiceáil ar an scáileán, tháinig gloineach ar a súile láithreach. Mar sin má tá TLA+ scanrúil, is féidir leat é a úsáid PlusCal, Is cineál teanga ríomhchláraithe bréagán é. Is féidir le slonn i PlusCal a bheith ina slonn TLA+ ar bith, is é sin, go bunúsach aon slonn matamaitice. Ina theannta sin, tá comhréir ag PlusCal le haghaidh halgartaim neamhchinntitheach. Toisc gur féidir le PlusCal aon slonn TLA+ a scríobh, tá sé i bhfad níos sainráiteach ná aon fhíortheanga ríomhchlárúcháin. Ansin, cuirtear PlusCal le chéile i sonraíocht TLA+ atá éasca le léamh. Ní chiallaíonn sé seo, ar ndóigh, go n-iompófar an tsonraíocht casta PlusCal ina sonraíocht shimplí ar TLA+ - ach go bhfuil an comhfhreagras soiléir eatarthu, ní bheidh aon chastacht bhreise le feiceáil. Ar deireadh, is féidir an tsonraíocht seo a fhíorú le huirlisí TLA+. Go ginearálta, is féidir le PlusCal cabhrú le phobia matamaitice a shárú; tá sé éasca le tuiscint fiú do ríomhchláraitheoirí agus ríomheolaithe. D'fhoilsigh mé halgartaim air le tamall (thart ar 10 mbliana) san am atá caite.

B’fhéidir go gcuirfidh duine in aghaidh gur matamaitic iad TLA+ agus PlusCal, agus nach n-oibríonn an mhatamaitic ach le samplaí de dhéantús an duine. Go praiticiúil, is gá duit teanga fíor le cineálacha, nósanna imeachta, rudaí, agus mar sin de. Tá sé seo mícheart. Seo an méid a scríobh Chris Newcomb, a d'oibrigh ag Amazon: “D’úsáideamar TLA+ ar dheich dtionscadal mhóra, agus i ngach cás rinne a úsáid difríocht shuntasach don fhorbairt toisc go rabhamar in ann fabhtanna contúirteacha a ghabháil sular tháinig siad ar an táirgeacht, agus toisc gur thug sé an léargas agus an mhuinín a bhí ag teastáil uainn le bheith ionsaitheach. uasmhéadú feidhmíochta gan tionchar a imirt ar fhírinne an chláir". Is féidir leat a chloisteáil go minic go bhfaigheann muid cód mí-éifeachtach nuair a bhíonn modhanna foirmiúla á n-úsáid againn - go praiticiúil, tá gach rud díreach os coinne. Ina theannta sin, tá an dearcadh ann nach féidir le bainisteoirí a chur ina luí ar an ngá atá le modhanna foirmiúla, fiú má tá ríomhchláraitheoirí cinnte faoina n-úsáidí. Agus scríobhann Newcomb: “Tá bainisteoirí ag brú ar gach bealach is féidir anois sonraíochtaí a scríobh i TLA+, agus tá am á leithdháileadh go sonrach acu dó seo”. Mar sin nuair a fheiceann bainisteoirí go n-oibríonn TLA+, glacann siad leis. Scríobh Chris Newcomb é seo thart ar shé mhí ó shin (Deireadh Fómhair 2014), ach anois, chomh fada agus is eol dom, úsáidtear TLA+ i 14 tionscadal, ní 10. Baineann sampla eile le dearadh an XBox 360. Tháinig intéirneach chuig Charles Thacker agus scríobh sonraíocht don chóras cuimhne. A bhuí leis an tsonraíocht seo, thángthas ar fabht a bheadh ​​neamhbhraite murach sin agus a d’fhágfadh go mbeadh gach XBox 360 tuairteála tar éis ceithre huaire an chloig úsáide. Dheimhnigh innealtóirí ó IBM nach mbeadh an fabht seo aimsithe ag a dtástálacha.

Is féidir leat tuilleadh a léamh faoi TLA+ ar an Idirlíon, ach anois déanaimis labhairt faoi shonraíochtaí neamhfhoirmiúla. Is annamh a bhíonn orainn cláir a scríobh a ríomhann an roinnteoir is lú coitianta agus a leithéid. I bhfad níos minice scríobhaimid cláir ar nós an uirlis priontála deas a scríobh mé do TLA+. Tar éis na próiseála is simplí, bheadh ​​cuma mar seo ar an gcód TLA+:

Tá níos mó i gceist le ríomhchlárú ná códú

Ach sa sampla thuas, is dócha go raibh an t-úsáideoir ag iarraidh na comharthaí comhcheangail agus comhionanna a ailíniú. Mar sin bheadh ​​cuma níos cosúla ar an bhformáid cheart:

Tá níos mó i gceist le ríomhchlárú ná códú

Smaoinigh ar shampla eile:

Tá níos mó i gceist le ríomhchlárú ná códú

Anseo, ar a mhalairt, bhí ailíniú comharthaí comhionann, suimiú agus iolrú sa fhoinse randamach, agus mar sin tá an próiseáil is simplí sách go leor. Go ginearálta, níl aon sainmhíniú cruinn matamaitice ar fhormáidiú ceart, mar go gciallaíonn "ceart" sa chás seo "an rud a theastaíonn ón úsáideoir," agus ní féidir é seo a chinneadh go matamaiticiúil.

Is cosúil, mura bhfuil sainmhíniú ar fhírinne againn, go bhfuil an tsonraíocht gan úsáid. Ach níl sé sin fíor. Díreach toisc nach bhfuil a fhios againn cad ba cheart do chlár a dhéanamh ní gá dúinn smaoineamh ar conas ba cheart dó oibriú - ar a mhalairt, ba cheart dúinn níos mó iarracht a dhéanamh air. Tá an tsonraíocht tábhachtach go háirithe anseo. Tá sé dodhéanta an clár is fearr le haghaidh priontála struchtúrtha a chinneadh, ach ní chiallaíonn sé seo nár cheart dúinn tabhairt faoi ar chor ar bith, agus ní hé an cás a scríobh cód mar shruth comhfhiosachta. Ar deireadh scríobh mé sonraíocht de shé riail le sainmhínithe i bhfoirm tuairimí i gcomhad Java. Seo sampla de cheann de na rialacha: a left-comment token is LeftComment aligned with its covering token. Tá an riail seo scríofa i mBéarla matamaitice, déarfaimid: LeftComment aligned, left-comment и covering token — téarmaí le sainmhínithe. Seo mar a chuireann matamaiticeoirí síos ar an matamaitic: scríobhann siad sainmhínithe ar théarmaí agus, bunaithe orthu, cruthaíonn siad rialacha. Is é an buntáiste a bhaineann leis an tsonraíocht seo ná go bhfuil sé rialacha i bhfad níos éasca le tuiscint agus dífhabhtú ná 850 líne de chód. Caithfidh mé a rá nach raibh sé éasca na rialacha seo a scríobh; thóg sé go leor ama iad a dhífhabhtú. Scríobh mé cód go sonrach chun na críche seo a d'inis dom cén riail a bhí in úsáid. Toisc go ndearna mé tástáil ar na sé riail seo le roinnt samplaí, ní raibh orm 850 líne de chód a dhífhabhtú, agus bhí na fabhtanna sách éasca a aimsiú. Tá uirlisí iontacha ag Java chuige seo. Dá mbeadh an cód díreach scríofa agam, thógfadh sé i bhfad níos faide dom agus bheadh ​​an fhormáidiú ar chaighdeán níos boichte.

Cén fáth nach bhféadfaí sonraíocht fhoirmiúil a úsáid? Ar thaobh amháin, níl an forghníomhú ceart ró-thábhachtach anseo. Is dóigh go mbeidh asphrionta struchtúrtha míshásúil do dhaoine áirithe, agus mar sin níor ghá dom é a chur ag obair i gceart i ngach cás neamhghnách. Níos tábhachtaí fós ná nach raibh uirlisí leordhóthanacha agam. Tá seiceálaí múnla TLA+ gan úsáid anseo, mar sin bheadh ​​orm na samplaí a scríobh de láimh.

Tá gnéithe sa tsonraíocht tugtha atá comónta do na sonraíochtaí uile. Tá sé leibhéal níos airde ná cód. Is féidir é a chur i bhfeidhm i dteanga ar bith. Níl aon uirlisí nó modhanna chun é a scríobh. Ní chuideoidh aon chúrsa ríomhchláraithe leat an tsonraíocht seo a scríobh. Agus níl aon uirlisí ann a d’fhéadfadh an tsonraíocht seo a dhéanamh gan ghá, mura rud é, ar ndóigh, go bhfuil teanga á scríobh agat go sonrach chun cláir struchtúrtha asphrionta a scríobh in TLA+. Ar deireadh, ní deir an tsonraíocht seo rud ar bith faoi conas go díreach a scríobhfaimid an cód, ní shonraíonn sé ach cad a dhéanann an cód. Scríobhaimid sonraíocht chun cabhrú linn smaoineamh ar an bhfadhb sula dtosaímid ag smaoineamh ar an gcód.

Ach tá gnéithe ag an tsonraíocht seo freisin a dhéanann idirdhealú idir é agus sonraíochtaí eile. Tá 95% de na sonraíochtaí eile i bhfad níos giorra agus níos simplí:

Tá níos mó i gceist le ríomhchlárú ná códú

Thairis sin, is sraith rialacha é an tsonraíocht seo. De ghnáth is comhartha de shonraíocht lag é seo. Tá sé deacair go leor iarmhairtí sraith rialacha a thuiscint, agus sin an fáth go raibh orm go leor ama a chaitheamh ag dífhabhtú orthu. Mar sin féin, sa chás seo ní raibh mé in ann teacht ar bhealach níos fearr.

Is fiú cúpla focal a rá faoi chláir a bhíonn ar siúl go leanúnach. Go hiondúil oibríonn siad go comhthreomhar, amhail córais oibriúcháin nó córais dáilte. Is beag duine atá in ann iad a thuiscint ina n-intinn nó ar pháipéar, agus ní duine acu mé, cé go raibh mé in ann é a dhéanamh uair amháin. Mar sin, teastaíonn uirlisí uainn a sheiceálfaidh ár gcuid oibre - mar shampla, TLA+ nó PlusCal.

Cén fáth ar ghá dom sonraíocht a scríobh má bhí a fhios agam cheana féin cad ba cheart don chód a dhéanamh? Go deimhin, níor shíl mé ach go raibh a fhios agam é. Ina theannta sin, agus sonraíocht i bhfeidhm, ní gá do sheachtrach breathnú ar an gcód a thuilleadh chun a thuiscint cad go díreach a dhéanann sé. Tá riail agam: níor cheart go mbeadh aon rialacha ginearálta ann. Tá eisceacht don riail seo ar ndóigh, is é seo an t-aon riail ghinearálta a leanann mé: ba cheart go n-inseodh sonraíocht cad a dhéanann an cód do dhaoine gach rud a theastaíonn uathu agus an cód sin á úsáid acu.

Mar sin, cad go díreach a theastaíonn ó ríomhchláraitheoirí a bheith ar an eolas faoi smaoineamh? Ar an gcéad dul síos, mar an gcéanna do gach duine: mura scríobhann tú, is cuma leatsa amháin go bhfuil tú ag smaoineamh. Chomh maith leis sin, ní mór duit smaoineamh sula ndéanann tú cód, rud a chiallaíonn go gcaithfidh tú scríobh sula ndéanann tú cód. Is éard atá i sonraíocht ná an méid a scríobhaimid sula dtosaímid ar an gcódú. Tá gá le sonraíocht le haghaidh aon chód ar féidir le duine ar bith é a úsáid nó a athrú. Agus b’fhéidir gurb é an “duine” seo údar an chóid mí tar éis é a scríobh. Tá gá le sonraíocht do chláir agus do chórais mhóra, do ranganna, do mhodhanna, agus uaireanta fiú do chodanna casta d’aon mhodh amháin. Cad go díreach ba cheart duit a scríobh faoin gcód? Ní mór duit cur síos a dhéanamh ar a ndéanann sé, is é sin, rud éigin a d'fhéadfadh a bheith úsáideach do dhuine ar bith a úsáideann an cód seo. Uaireanta b'fhéidir go mbeadh sé riachtanach a shonrú freisin conas go díreach a bhaineann an cód a sprioc amach. Má chuaigh muid tríd an modh seo i gcúrsa na halgartaim, ansin tugaimid algartam é. Más rud éigin níos speisialaithe agus nua é, tugaimid dearadh ardleibhéil air. Níl aon difríocht fhoirmiúil anseo: is samhlacha teibí den chlár iad an dá cheann.

Conas go díreach ba chóir duit sonraíocht cód a scríobh? An rud is mó: ba chóir go mbeadh sé leibhéal amháin níos airde ná an cód féin. Caithfidh sé cur síos a dhéanamh ar stáit agus iompraíochtaí. Ba chóir go mbeadh sé chomh dian agus a éilíonn an tasc. Má tá sonraíocht á scríobh agat maidir le conas tasc a chur i bhfeidhm, is féidir é a scríobh i pseudocode nó ag baint úsáide as PlusCal. Ní mór duit foghlaim conas sonraíochtaí a scríobh ag baint úsáide as sonraíochtaí foirmiúla. Tabharfaidh sé seo na scileanna riachtanacha duit a chabhróidh leat freisin le cinn neamhfhoirmiúla. Conas is féidir leat foghlaim conas sonraíochtaí foirmiúla a scríobh? Nuair a d'fhoghlaim muid ríomhchlárú, scríobhamar cláir agus rinneamar iad a dhífhabhtú. An rud céanna anseo: ní mór duit sonraíocht a scríobh, é a sheiceáil le seiceálaí múnla, agus na hearráidí a shocrú. B’fhéidir nach é TLA+ an teanga is fearr do shonraíocht fhoirmiúil, agus is dócha go mbeadh teanga eile níos oiriúnaí do do riachtanais ar leith. Is é an rud iontach faoi TLA+ ná go ndéanann sé jab iontach ag múineadh smaointeoireacht na matamaitice.

Conas sonraíocht agus cód a nascadh? Úsáid a bhaint as tuairimí a nascann coincheapa matamaitice agus a gcur i bhfeidhm. Má oibríonn tú le graif, ansin ag leibhéal an chláir beidh eagair de nóid agus eagair naisc agat. Mar sin ní mór duit a scríobh cé go díreach a chuireann na struchtúir ríomhchláraithe seo i bhfeidhm an graf.

Ba chóir a thabhairt faoi deara nach mbaineann aon cheann díobh thuas leis an bpróiseas chun an cód a scríobh. Nuair a scríobhann tú cód, is é sin, an tríú céim a dhéanamh, ní mór duit freisin smaoineamh agus smaoineamh tríd an gclár. Má tharlaíonn go bhfuil fothasc casta nó nach bhfuil soiléir, ní mór duit sonraíocht a scríobh dó. Ach nílim ag caint faoin gcód féin anseo. Is féidir leat aon teanga ríomhchlárúcháin, aon mhodheolaíocht a úsáid, níl sé seo mar gheall orthu. Chomh maith leis sin, ní chuireann aon cheann díobh thuas deireadh leis an ngá atá le do chód a thástáil agus a dhífhabhtú. Fiú má scríobhtar an tsamhail teibí i gceart, d’fhéadfadh fabhtanna a bheith ann ina chur i bhfeidhm.

Is céim bhreise sa phróiseas códaithe é sonraíochtaí scríbhneoireachta. A bhuíochas leis, is féidir go leor earráidí a ghabháil le níos lú iarracht - tá a fhios againn seo ó thaithí ríomhchláraitheoirí ó Amazon. Le sonraíochtaí, éiríonn cáilíocht na gclár níos airde. Cén fáth, mar sin, a théimid chomh minic sin gan iad? Toisc go bhfuil an scríbhneoireacht deacair. Ach tá an scríbhneoireacht deacair, mar gheall ar seo ní mór duit smaoineamh, agus tá sé deacair freisin smaoineamh. Tá sé i gcónaí níos éasca ligean ort go bhfuil tú ag smaoineamh. Is féidir analaí a tharraingt anseo le rith - dá lú a ritheann tú, is amhlaidh is moille a ritheann tú. Ní mór duit do matáin a oiliúint agus scríbhneoireacht a chleachtadh. Bíonn cleachtadh ann.

Féadfaidh an tsonraíocht a bheith mícheart. B’fhéidir go ndearna tú botún áit éigin, nó b’fhéidir go bhfuil na ceanglais athraithe, nó b’fhéidir go mbeadh gá le feabhsú. Ní mór aon chód a úsáideann aon duine a athrú, mar sin luath nó mall ní bheidh an tsonraíocht ag teacht leis an gclár a thuilleadh. Go hidéalach, sa chás seo, ní mór duit sonraíocht nua a scríobh agus an cód a athscríobh go hiomlán. Tá a fhios againn go han-mhaith nach ndéanann aon duine é seo. Go praiticiúil, déanaimid an cód a phaisteáil agus b'fhéidir an tsonraíocht a nuashonrú. Má tá sé seo faoi cheangal go dtarlóidh sé luath nó mall, cén fáth a scríobh sonraíochtaí ar chor ar bith? Ar an gcéad dul síos, don té a dhéanfaidh do chód a chur in eagar, is fiú a mheáchan in ór gach focal breise sa tsonraíocht, agus seans gur tusa an duine seo. Is minic a chím mé féin as gan a bheith sainiúil go leor nuair a chuirim mo chód in eagar. Agus scríobhann mé níos mó sonraíochtaí ná cód. Mar sin, nuair a chuireann tú an cód in eagar, is gá an tsonraíocht a nuashonrú i gcónaí. Ar an dara dul síos, le gach eagarthóireacht éiríonn an cód níos measa, bíonn sé níos deacra é a léamh agus a chothabháil. Is méadú é seo ar eantrópacht. Ach mura dtosaíonn tú le sonraíocht, ansin beidh gach líne a scríobhann tú ina heagrán, agus beidh an cód toirtiúil agus deacair le léamh ón tús.

Mar a dúirt Eisenhower, níor bhuaigh cath ar bith do réir plean, agus níor bhuaigh cath gan plean. Agus bhí a fhios aige rud éigin faoi cathanna. Tá tuairim ann gur cur amú ama é sonraíochtaí a scríobh. Uaireanta tá sé seo fíor, agus tá an tasc chomh simplí nach bhfuil aon phointe smaoineamh air. Ach ba cheart duit cuimhneamh i gcónaí nuair a mholtar duit gan sonraíochtaí a scríobh, ciallaíonn sé go moltar duit gan smaoineamh. Agus ba cheart duit smaoineamh ar seo gach uair. Ní chinntíonn smaoineamh trí thasc nach ndéanfaidh tú botúin. Mar is eol dúinn, níor chum aon duine slat draíochta, agus is tasc deacair é an ríomhchlárú. Ach mura ndéanann tú machnamh ar an tasc, tá tú cinnte go ndéanfaidh tú botúin.

Is féidir leat tuilleadh a léamh faoi TLA+ agus PlusCal ar shuíomh Gréasáin speisialta, is féidir leat dul ann ó mo leathanach baile по ссылке. Sin uile domsa, go raibh maith agat as d’aire.

Cuimhnigh le do thoil gur aistriúchán é seo. Nuair a scríobhann tú tuairimí, cuimhnigh nach léifidh an t-údar iad. Más mian leat comhrá a dhéanamh leis an údar i ndáiríre, beidh sé ag comhdháil Hydra 2019, a bheidh ar siúl ar 11-12 Iúil, 2019 i St Petersburg. Is féidir ticéid a cheannach ar an láithreán gréasáin oifigiúil.

Foinse: will.com

Add a comment