Pieci jautājumi par programmÄ“Å”anas valodas dizainu

Pieci jautājumi par programmÄ“Å”anas valodas dizainu

VadoŔā filozofija

1. ProgrammÄ“Å”anas valodas cilvēkiem

ProgrammÄ“Å”anas valodas ir veids, kā cilvēki runā ar datoriem. Dators ar prieku runās jebkurā valodā, kas nav viennozÄ«mÄ«ga. Iemesls, kāpēc mums ir augsta lÄ«meņa valodas, ir tas, ka cilvēki nevar rÄ«koties ar maŔīnvalodu. ProgrammÄ“Å”anas valodu mērÄ·is ir novērst to, ka mÅ«su nabadzÄ«gās, trauslās cilvēka smadzenes tiek nomāktas ar pārāk daudzām detaļām.

Arhitekti zina, ka dažas dizaina problēmas ir ikdieniŔķākas nekā citas. Dažas no skaidrākajām un abstraktākajām dizaina problēmām ir tiltu projektÄ“Å”ana. Å ajā gadÄ«jumā jÅ«su uzdevums ir veikt nepiecieÅ”amo attālumu, izmantojot pēc iespējas mazāk materiālu. Spektra otrā galā ir krēslu dizains. Krēslu dizaineriem vajadzētu pavadÄ«t laiku, domājot par cilvēku dibeniem.

ProgrammatÅ«ras izstrādei ir lÄ«dzÄ«ga atŔķirÄ«ba. Algoritmu izstrāde datu marÅ”rutÄ“Å”anai tÄ«klā ir jauka, abstrakta problēma, piemēram, tiltu projektÄ“Å”ana. Savukārt programmÄ“Å”anas valodu projektÄ“Å”ana ir kā krēslu projektÄ“Å”ana: jātiek galā ar cilvēka vājÄ«bām.

Lielākajai daļai no mums to ir grÅ«ti saprast. Elegantu matemātisko sistēmu projektÄ“Å”ana lielākajai daļai no mums izklausās daudz pievilcÄ«gāka nekā cilvēku vājo vietu pielāgoÅ”ana. Matemātiskās elegances loma ir tāda, ka zināma elegance padara programmas vieglāk saprotamas. Bet tas nav viss par eleganci.

Un, kad es saku, ka valodas ir jāveido tā, lai tās atbilstu cilvēka vājÄ«bām, es nedomāju, ka valodām jābÅ«t izstrādātām sliktiem programmētājiem. PatiesÄ«bā jums vajadzētu izstrādāt programmatÅ«ru labākajiem programmētājiem, taču pat labākajiem programmētājiem ir savas robežas. Nedomāju, ka kādam patiktu programmÄ“Å”ana valodā, kurā visi mainÄ«gie bÅ«tu apzÄ«mēti ar burtu "x" ar veseliem skaitļu apakÅ”indeksiem.

2. Dizains sev un draugiem

Ja paskatās uz programmÄ“Å”anas valodu vēsturi, lielākā daļa labāko valodu bija paredzētas to autoriem, un lielākā daļa sliktāko bija paredzētas citiem cilvēkiem.

Kad valodas ir paredzētas citiem cilvēkiem, tā vienmēr ir noteikta cilvēku grupa: cilvēki nav tik gudri kā valodas radÄ«tāji. Tādā veidā jÅ«s iegÅ«stat mēli, kas runā ar jums. Kobols ir visievērojamākais piemērs, taču lielākā daļa valodu ir piesātinātas ar Å”o garu.

Tam nav nekāda sakara ar valodas līmeni. C līmenis ir diezgan zems, taču tas tika izveidots, lai to izmantotu tā autori, tāpēc hakeriem tas patīk.

Arguments valodu izstrādei sliktiem programmētājiem ir tāds, ka sliktu programmētāju ir vairāk nekā labu. VarbÅ«t tas tā ir. Bet Å”is mazais labo programmētāju skaits raksta nesamērÄ«gi vairāk programmatÅ«ras.

Mans jautājums ir, kā izveidot valodu, kas patÄ«k labākajiem hakeriem? Man Ŕķiet, ka Å”is jautājums ir identisks jautājumam par to, kā izveidot labu programmÄ“Å”anas valodu?, bet pat ja tā nav, tas ir vismaz interesants jautājums.

3. Dodiet programmētājam pēc iespējas lielāku kontroli

Daudzas valodas (Ä«paÅ”i tās, kas paredzētas citiem cilvēkiem) darbojas kā auklÄ«tes: tās cenÅ”as jÅ«s brÄ«dināt no lietām, kuras, viņuprāt, jums nebÅ«s noderÄ«gas. Man ir pretējs viedoklis: dodiet programmētājam tik daudz kontroles, cik varat.

Kad es pirmo reizi uzzināju Lispu, man visvairāk patika tas, ka mēs runājām kā lÄ«dzvērtÄ«gi. Citās valodās, kuras es lÄ«dz tam biju iemācÄ«jies, bija valoda, un tajā bija mana programma, un tās pastāvēja diezgan atseviŔķi. Bet programmā Lisp funkcijas un makro, ko es uzrakstÄ«ju, bija tās paÅ”as, kurās tika rakstÄ«ta pati valoda. Es varētu pārrakstÄ«t paÅ”u valodu, ja es gribētu. Tam bija tāda pati pievilcÄ«ba kā atvērtā pirmkoda programmatÅ«rai.

4. ÄŖsums ir talanta māsa

ÄŖsums ir nenovērtēts un pat nicināts. Bet, ja ieskatÄ«sies hakeru sirdÄ«s, redzēsi, ka viņiem ļoti patÄ«k Ä«sums. Cik reižu esat dzirdējuÅ”i, ka hakeri mīļi runā par to, kā, piemēram, APL, viņi var paveikt pārsteidzoÅ”as lietas, izmantojot tikai dažas koda rindiņas? Es domāju, ka patieŔām gudriem cilvēkiem patÄ«k tam pievērst uzmanÄ«bu.

Es uzskatu, ka gandrÄ«z viss, kas padara programmas Ä«sākas, ir laba lieta. Bibliotēkas funkcijām vajadzētu bÅ«t daudzām, visam, kas var bÅ«t netieÅ”s, tā jābÅ«t; sintaksei jābÅ«t kodolÄ«gākai; pat entÄ«tiju nosaukumiem jābÅ«t Ä«siem.

Un ne tikai programmām jābūt īsām. Rokasgrāmatām arī jābūt īsām. Liela daļa rokasgrāmatu ir piepildīta ar paskaidrojumiem, atrunām, brīdinājumiem un īpaŔiem gadījumiem. Ja jums ir jāsaīsina rokasgrāmata, vislabākais risinājums ir labot valodu, kas prasa tik daudz paskaidrojumu.

5. Atzīstiet, kas ir uzlauŔana

Daudzi cilvēki vēlētos, lai uzlauÅ”ana bÅ«tu matemātika vai vismaz kaut kas lÄ«dzÄ«gs zinātnei. Es domāju, ka uzlauÅ”ana ir vairāk kā arhitektÅ«ra. ArhitektÅ«ra ir par fiziku tādā ziņā, ka arhitektam ir jāprojektē ēka, kas nekritÄ«s, bet arhitekta patiesais mērÄ·is ir radÄ«t lielisku ēku, nevis veikt atklājumus statikas jomā.

Hakeriem patÄ«k radÄ«t lieliskas programmas. Un es domāju, ka vismaz mÅ«su paÅ”u domās mums vajadzētu atcerēties, ka lielisku programmu rakstÄ«Å”ana ir brÄ«niŔķīga lieta, pat ja Å”o darbu nav viegli pārvērst parastajā zinātnisko rakstu intelektuālajā valÅ«tā. No intelektuālā viedokļa ir tikpat svarÄ«gi izstrādāt valodu, kas programmētājiem patiks, kā arÄ« izstrādāt Å”ausmÄ«gu valodu, kas iemieso ideju, par kuru varat publicēt rakstu.

Atvērt problēmas

1. Kā organizēt lielas bibliotēkas?

Bibliotēkas kļūst par svarÄ«gu programmÄ“Å”anas valodu sastāvdaļu. Tie kļūst tik lieli, ka var bÅ«t bÄ«stami. Ja ir nepiecieÅ”ams ilgāks laiks, lai bibliotēkā atrastu funkciju, kas dara to, kas jums nepiecieÅ”ams, nekā paÅ”am rakstÄ«t Å”o funkciju, viss kods nedara neko citu, kā tikai padara rokasgrāmatu biezāku. (Simbolikas rokasgrāmatas bija piemērs tam.) Tātad mums bÅ«s jāatrisina bibliotēkas organizācijas problēma. Ideālā gadÄ«jumā noformējiet tos tā, lai programmētājs varētu uzminēt, kura bibliotēkas funkcija ir piemērota.

2. Vai tieŔām cilvēki baidās no prefiksu sintakses?

Tā ir atklāta problēma tādā ziņā, ka es par to domāju jau vairākus gadus un joprojām nezinu atbildi. Prefiksu sintakse man Ŕķiet pilnÄ«gi dabiska, izņemot varbÅ«t tās izmantoÅ”anu matemātikā. Bet var gadÄ«ties, ka liela daļa Lispa nepopularitātes ir vienkārÅ”i nepazÄ«stamās sintakses dēļ... Vai mums kaut kas bÅ«tu jādara lietas labā, ja tā ir taisnÄ«ba, tas ir cits jautājums.

3. Kas nepiecieŔams servera programmatūrai?

Es domāju, ka lielākā daļa lietojumprogrammu, kas tiks rakstÄ«tas nākamo divdesmit gadu laikā, bÅ«s tÄ«mekļa lietojumprogrammas tādā nozÄ«mē, ka programmas atradÄ«sies serverÄ« un sazināsies ar jums, izmantojot tÄ«mekļa pārlÅ«kprogrammu. Un, lai rakstÄ«tu Ŕādus pieteikumus, mums ir vajadzÄ«gas jaunas lietas.

Viena no Ŕīm lietām ir atbalsts jaunam servera lietojumprogrammu izlaiÅ”anas veidam. Viena vai divu lielu izlaidumu vietā gadā, piemēram, galddatoru programmatÅ«ra, servera programmatÅ«ra tiks izlaista ar virkni nelielu izmaiņu. Jums var bÅ«t pieci vai desmit izlaidumi dienā. Un visiem vienmēr bÅ«s jaunākā versija.

Vai jūs zināt, kā izveidot programmas, lai tās būtu apkopjamas? Servera programmatūra ir jāveido tā, lai tā būtu maināma. Jums vajadzētu būt iespējai to viegli mainīt vai vismaz zināt, ko nozīmē nelielas izmaiņas un kas ir svarīgi.

Vēl viena lieta, kas var bÅ«t noderÄ«ga servera programmatÅ«rā, pēkŔņi ir piegādes nepārtrauktÄ«ba. TÄ«mekļa lietojumprogrammā varat izmantot kaut ko lÄ«dzÄ«gu CPSlai iegÅ«tu rutÄ«nas efektu tÄ«mekļa sesiju bezvalstniecÄ«bas pasaulē. Piegādes nepārtrauktÄ«ba var bÅ«t tā vērta, ja funkcija nav pārāk dārga.

4. Kādas jaunas abstrakcijas vēl ir jāatklāj?

Es neesmu pārliecināts, cik saprātÄ«ga ir Ŕī cerÄ«ba, bet personÄ«gi es patieŔām vēlētos atklāt jaunu abstrakciju - kaut ko tādu, kas varētu bÅ«t tikpat nozÄ«mÄ«gs kā pirmās klases funkcijas vai rekursija vai vismaz noklusējuma parametri. VarbÅ«t tas ir neiespējams sapnis. Tādas lietas bieži netiek atklātas. Bet es nezaudēju cerÄ«bu.

Maz zināmi noslēpumi

1. Varat izmantot jebkuru valodu, kuru vēlaties

IepriekÅ” lietojumprogrammu izveide nozÄ«mēja darbvirsmas programmatÅ«ras izveidi. Un galddatoru programmatÅ«rā ir liela nosliece uz lietojumprogrammu rakstÄ«Å”anu tajā paŔā valodā kā operētājsistēma. Tātad pirms desmit gadiem programmatÅ«ras rakstÄ«Å”ana kopumā nozÄ«mēja programmatÅ«ras rakstÄ«Å”anu C valodā. Galu galā tradÄ«cija attÄ«stÄ«jās: lietojumprogrammas nedrÄ«kst rakstÄ«t neparastās valodās. Un Ŕī tradÄ«cija ir attÄ«stÄ«jusies tik ilgi, ka arÄ« netehniskie cilvēki, piemēram, vadÄ«tāji un riska kapitālisti, to ir apguvuÅ”i.

Servera programmatÅ«ra pilnÄ«bā iznÄ«cina Å”o modeli. Izmantojot servera programmatÅ«ru, varat izmantot jebkuru valodu, kuru vēlaties. To vēl gandrÄ«z neviens nesaprot (Ä«paÅ”i vadÄ«tāji un riska kapitālisti). Bet daži hakeri to saprot, tāpēc mēs dzirdam par indy valodām, piemēram, Perl un Python. Mēs nedzirdam par Perl un Python, jo cilvēki tos izmanto, lai rakstÄ«tu Windows lietojumprogrammas.

Ko tas nozÄ«mē mums, programmÄ“Å”anas valodas dizaina interesentiem, ka mÅ«su darbam ir potenciālā auditorija.

2. Ātrums nāk no profilētājiem

Valodu izstrādātājiem vai vismaz valodas ieviesējiem patÄ«k rakstÄ«t kompilatorus, kas Ä£enerē ātru kodu. Bet es domāju, ka tas nav tas, kas padara valodas lietotājiem ātras. Knuts jau sen atzÄ«mēja, ka ātrums ir atkarÄ«gs tikai no dažām vājajām vietām. Un ikviens, kurÅ” ir mēģinājis paātrināt programmu, zina, ka jÅ«s nevarat uzminēt, kur ir vājā vieta. Profiler ir atbilde.

Valodu izstrādātāji risina nepareizu problēmu. Lietotājiem nav nepiecieÅ”ami etaloni, lai tie darbotos ātri. Viņiem ir vajadzÄ«ga valoda, kas var parādÄ«t, kuras viņu programmas daļas ir jāpārraksta. Å ajā brÄ«dÄ« praksē ir nepiecieÅ”ams ātrums. Tāpēc varbÅ«t bÅ«tu labāk, ja valodas ieviesēji pusi no laika veltÄ«tu kompilatora optimizÄ“Å”anai un tērētu to laba profilētāja rakstÄ«Å”anai.

3. Jums ir nepiecieÅ”ama lietotne, kas attÄ«sta jÅ«su valodu

Tā var nebÅ«t galÄ«gā patiesÄ«ba, taču Ŕķiet, ka labākās valodas attÄ«stÄ«jās kopā ar lietojumprogrammām, kurās tās tika izmantotas. C rakstÄ«ja cilvēki, kuriem bija nepiecieÅ”ama sistēmu programmÄ“Å”ana. Lisp daļēji bija paredzēts simboliskai diferencÄ“Å”anai, un Makartijs tik ļoti vēlējās sākt darbu, ka viņŔ pat sāka rakstÄ«t diferenciācijas programmas pirmajā Lisp dokumentā 1960. gadā.

Tas ir Ä«paÅ”i labi, ja jÅ«su lietojumprogramma atrisina dažas jaunas problēmas. Tas liek jÅ«su valodai iegÅ«t jaunas funkcijas, kuras vēlas programmētāji. Man personÄ«gi interesē uzrakstÄ«t valodu, kas derēs servera lietojumprogrammām.

[Diskusijas laikā Gajs StÄ«ls arÄ« norādÄ«ja uz Å”o punktu, piebilstot, ka lietojumprogramma nedrÄ«kst sastāvēt no kompilatora rakstÄ«Å”anas jÅ«su valodai, ja vien jÅ«su valoda nav paredzēta kompilatoru rakstÄ«Å”anai.]

4. Valodai jābÅ«t piemērotai vienreizēju programmu rakstÄ«Å”anai.

JÅ«s zināt, ko nozÄ«mē vienreizēja programma: tas ir tad, kad jums ātri jāatrisina kāda ierobežota problēma. Es uzskatu, ka, palÅ«kojoties apkārt, jÅ«s atradÄ«sit daudzas nopietnas programmas, kas sākās kā vienreizējas. Es nebÅ«tu pārsteigts, ja lielākā daļa programmu tiktu sāktas kā vienreizējas. Tādējādi, ja vēlaties izveidot valodu, kas bÅ«s piemērota programmatÅ«ras rakstÄ«Å”anai kopumā, tad tai vajadzētu bÅ«t piemērotai arÄ« vienreizēju programmu rakstÄ«Å”anai, jo tas ir daudzu programmu sākuma posms.

5. Sintakse ir saistīta ar semantiku

Tradicionāli tiek uzskatÄ«ts, ka sintakse un semantika ir ļoti dažādas lietas. Tas var izklausÄ«ties Å”okējoÅ”i, bet tā nav. Es domāju, ka tas, ko vēlaties sasniegt savā programmā, ir saistÄ«ts ar to, kā jÅ«s to paužat.

Es nesen runāju ar Robertu Morisu, un viņŔ atzÄ«mēja, ka operatora pārslodze ir liels pluss valodu uzvarai ar infix sintaksi. Valodās ar prefiksa sintaksi jebkura jÅ«su definētā funkcija faktiski ir operators. Ja vēlaties pievienot jauna veida numuru, ko izdomājāt, varat vienkārÅ”i definēt jaunu funkciju, lai to pievienotu. Ja to darāt valodā ar infix sintaksi, jÅ«s redzēsit, ka pastāv liela atŔķirÄ«ba starp pārslogota operatora izmantoÅ”anu un funkcijas izsaukÅ”anu.

Idejas, kas laika gaitā atgriežas

1. Jaunas programmēŔanas valodas

Atskatoties uz 1970. gadiem, modē bija izstrādāt jaunas programmÄ“Å”anas valodas. Tagad tas tā nav. Bet es uzskatu, ka serveru programmatÅ«ra atkal atgriezÄ«s jaunu valodu radÄ«Å”anas modi. Izmantojot servera programmatÅ«ru, jÅ«s varat izmantot jebkuru valodu, kuru vēlaties, tāpēc, ja kāds izveido valodu, kas Ŕķiet labāka par pārējām, bÅ«s cilvēki, kas izlems to izmantot.

2. Laika dalīŔana

Ričards Kelsijs nāca klajā ar Å”o ideju, kuras laiks atkal ir pienācis, un es to pilnÄ«bā atbalstu. Mans minējums (un arÄ« Microsoft) ir tāds, ka liela daļa skaitļoÅ”anas tiks pārvietota no darbvirsmas uz attāliem serveriem. Citiem vārdiem sakot, laika dalÄ«Å”ana ir atgriezusies. Es domāju, ka tam bÅ«s nepiecieÅ”ams atbalsts valodu lÄ«menÄ«. Piemēram, Ričards un Džonatans RÄ«vi ir paveikuÅ”i daudz darba, lai ieviestu procesa plānoÅ”anu shēmā 48.

3. Efektivitāte

Nesen Ŕķita, ka datori jau ir pietiekami ātri. Mēs arvien vairāk dzirdam par baitkodu, kas vismaz man nozÄ«mē, ka mums ir rezerves jauda. Bet es domāju, ka ar servera programmatÅ«ru mums tās nav. Kādam bÅ«s jāmaksā par serveriem, kuros darbojas programmatÅ«ra, un lietotāju skaits, ko serveris var atbalstÄ«t uz vienu maŔīnu, dalÄ«s viņu kapitāla izmaksas.

Es domāju, ka efektivitātei bÅ«s nozÄ«me, vismaz skaitļoÅ”anas vājajās vietās. Tas bÅ«s Ä«paÅ”i svarÄ«gi I/O operācijām, jo ā€‹ā€‹serveru lietojumprogrammas veic ļoti daudz Ŕādu darbÄ«bu.

Galu galā var izrādÄ«ties, ka baitkods nav risinājums. Å Ä·iet, ka Sun un Microsoft Å”obrÄ«d sadarbojas baitkoda laukā. Taču viņi to dara tāpēc, ka baitkods ir ērta vieta, kur sevi iegult procesā, nevis tāpēc, ka pats baitkods ir laba ideja. Var izrādÄ«ties, ka visa Ŕī cīņa paliks nepamanÄ«ta. Tas bÅ«tu smieklÄ«gi.

Lamatas un lamatas

1. Klienti

Tas ir tikai minējums, taču vienīgās lietojumprogrammas, kas gūs labumu, ir tās, kuras ir pilnībā servera puses. Programmatūras izstrāde, kas darbojas, pamatojoties uz pieņēmumu, ka ikvienam būs klients, ir kā veidot sabiedrību, pamatojoties uz pieņēmumu, ka visi būs godīgi. Tas noteikti būtu ērti, bet jāpieņem, ka tas nekad nenotiks.

Es domāju, ka strauji pieaugs tÄ«mekļa ierīču skaits, un mēs varam pieņemt, ka tās atbalstÄ«s pamata html un formas. Vai jÅ«su tālrunÄ« ir pārlÅ«kprogramma? Vai jÅ«su PalmPilot bÅ«s tālrunis? Vai jÅ«su Blackberry bÅ«s lielāks ekrāns? Vai jÅ«s varēsiet piekļūt internetam no sava spēlētāja? No jÅ«su pulksteņa? es nezinu. Un man nebÅ«s jānoskaidro, ja es derÄ“Å”u, ka viss bÅ«s serverÄ«. Ir tikai daudz uzticamāk, ja visas smadzenes atrodas serverÄ«. .

2. Objektorientētā programmÄ“Å”ana

Es saprotu, ka tas ir pretrunÄ«gs paziņojums, bet es nedomāju, ka OOP ir tik svarÄ«gs. Es domāju, ka Ŕī ir piemērota paradigma konkrētām lietojumprogrammām, kurām nepiecieÅ”amas noteiktas datu struktÅ«ras, piemēram, logu sistēmas, simulācijas, CAD sistēmas. Bet es nesaprotu, kāpēc tai vajadzētu bÅ«t piemērotai visām programmām.

Es domāju, ka cilvēkiem lielos uzņēmumos daļēji patīk OOP, jo tas padara daudzas lietas, kas izskatās pēc darba. To, ko dabiski varētu attēlot kā, teiksim, veselu skaitļu sarakstu, tagad var attēlot kā klasi ar visdažādākajām sastatnēm, kņadu un burzmu.

Vēl viena pievilcÄ«ga OOP iezÄ«me ir tā, ka metodes sniedz daļu no pirmās klases funkciju efekta. Bet tas nav jaunums Lisp programmētājiem. Ja jums ir patiesas pirmās klases funkcijas, varat tās vienkārÅ”i izmantot jebkurā veidā, kas atbilst konkrētajam uzdevumam, tā vietā, lai visu ievietotu klaÅ”u un metožu kopsavilkumā.

Es domāju, ka valodas dizainam tas nozīmē, ka nevajadzētu tajā pārāk dziļi iegult OOP. Varbūt atbilde ir piedāvāt vispārīgākas, pamata lietas un ļaut cilvēkiem veidot jebkuras objektu sistēmas kā bibliotēkas.

3. Komitejas dizains

Ja jÅ«su valodu ir izstrādājusi komiteja, jÅ«s esat iesprostoti, un ne tikai iemeslu dēļ, ko visi zina. Ikviens zina, ka komitejas mēdz veidot nevienmērÄ«gus, nekonsekventus valodas dizainus. Bet es domāju, ka liela bÄ«stamÄ«ba ir tajā, ka viņi neriskē. Kad viena persona ir atbildÄ«ga, viņŔ uzņemas riskus, ko komiteja nekad nepiekristu uzņemties.

Vai jums ir jāuzņemas risks, lai izveidotu labu valodu? Daudziem cilvēkiem varētu bÅ«t aizdomas, ka valodas dizains ir vieta, kur jums ir jāpaliek diezgan tuvu tradicionālajai gudrÄ«bai. Varu derēt, ka tas tā nav. Visā pārējā, ko cilvēki dara, atlÄ«dzÄ«ba ir proporcionāla riskam. Tātad, kāpēc valodas dizainam vajadzētu atŔķirties?

Avots: www.habr.com

Pievieno komentāru