Mulți oameni au dificultăți sau frustrări cu limbajele de programare pe care le folosesc în fiecare zi. Unii vor ca lucrurile să fie tratate mai abstract, în timp ce altora nu le place caracteristicile de implementare pe care le-ar dori să fie „standard”. Fie că sunteți un profesionist în IT sau doar un hobby, de multe ori s-ar putea să vă treziți dorința de a crea un nou limbaj de programare.
Pași
Pasul 1. Familiarizați-vă cu tehnologia
Nu puteți crea un limbaj de programare dacă nu știți cum să utilizați un computer.
Pasul 2. Familiarizați-vă cu terminologia
Scriitorii compilatorilor folosesc adesea terminologie necunoscută. Citiți despre compilatoare înainte de a continua. Asigurați-vă că știți tot ce trebuie să știți.
Pasul 3. Decideți ce problemă rezolvă limba dvs
Se adresează unei probleme specifice domeniului sau este un limbaj de uz general?
Pasul 4. Gândește-te la semantica limbii tale și la conceptele acesteia
- Aveți de gând să permiteți sau nu accesul direct al indicatorului?
- Care sunt tipurile de date ale limbii dvs.?
- Este un limbaj static sau dinamic?
- Care este modelul dvs. de memorie? Aveți de gând să folosiți un colector de gunoi sau o gestionare manuală a memoriei? (Dacă utilizați un colector de gunoi, pregătiți-vă să scrieți unul sau adaptați unul existent la limba dvs.)
- Cum se va descurca concurența? Vei folosi un model simplu de filetare / blocare sau ceva mai complex, cum ar fi Linda sau modelul actorului? (Din moment ce computerele au mai multe nuclee.)
- Există funcții primitive încorporate în limbaj sau totul va proveni dintr-o bibliotecă?
- Care este paradigma sau paradigmele limbii tale? Funcţional? Orientat spre obiecte? Prototip (cum ar fi JavaScript)? Orientat spre aspect? Orientat spre șablon? Sau ceva cu totul nou?
- Cum va interfața limba dvs. cu bibliotecile și limbile existente (în principal C)? Acest punct este important dacă creați un limbaj specific domeniului.
- În cele din urmă, unele dintre răspunsurile la aceste întrebări vor primi răspuns la al doilea pas și vă vor ajuta să răspundeți la următorul pas.
Pasul 5. Gândește-te la anumite sarcini specifice pe care cineva și-ar dori să le poată îndeplini cu limba ta
De exemplu, „ar putea dori să direcționeze un robot să urmeze o linie” sau „ar putea dori să creeze în el programe de desktop relativ portabile” sau „ar putea dori să creeze aplicații web cu acesta”.
Pasul 6. Experimentați idei de sintaxă (textul limbii) pentru exemplele de mai sus
Aveți grijă să vă păstrați limba în categoria de limbă fără context sau ceva din interior. Generatorul de parser și îl veți aprecia mai târziu
Pasul 7. Scrieți o gramatică formală pentru sintaxă
Pasul 8. Decideți dacă limba va fi interpretată sau compilată
Adică, în lumea interpretată, utilizatorul dvs. vă va edita de obicei programul într-un editor și îl va rula direct pe interpret; în timp ce vă aflați în lumea compilată, utilizatorul vă va edita programul, îl va compila, va salva executabilul rezultat undeva și îl va rula.
Pasul 9. Scrieți scanerul și analizorul frontal sau găsiți un instrument care să vă ajute în acest sens
De asemenea, gândiți-vă la modul în care compilatorul / interpretul dvs. vă va avertiza utilizatorul despre programele eronate și erorile de sintaxă
Pasul 10. Folosiți informațiile parserului pentru a scrie codul obiectului sau o reprezentare intermediară
Solicitați analizorului să creeze un AST, apoi creați codul obiectului dvs. din AST folosind trei coduri de adrese sau SSA-ul său fratele mai mare, apoi creați un tabel de simboluri pentru a vă defini funcțiile, variabilele globale etc.
De asemenea, în funcție de limba dvs., vă recomandăm să creați tabele de pointer virtual sau tabele de informații pentru cursurile dvs. (pentru a sprijini reflecția sau RTTI)
Pasul 11. Scrieți executorul sau generatorul de cod care va lega totul împreună
Pasul 12. Scrieți multe programe de testare pentru a testa limba
Doriți să creați programe care să sublinieze poverile gramaticii dvs. formale pentru a vedea că compilatorul acceptă tot ceea ce se află în definiția dvs. și respinge tot ceea ce este în afara ei
Pasul 13. Luați în considerare modul în care utilizatorul își va depana propriile programe
Pasul 14. Dacă limba dvs. folosește o bibliotecă standard, veți dori să o scrieți
Împreună cu un colector de gunoi sau alte caracteristici de rulare, dacă aveți nevoie de el.
Mai exact, dacă scrieți un compilator, veți avea nevoie de codul pe care sistemul de operare îl va executa pentru a începe să ruleze codul de utilizator (de exemplu, alocarea tuturor variabilelor globale)
Pasul 15. Publică-ți limba, împreună cu specificațiile pentru aceasta și câteva exemple de ceea ce poți face în ea
Nu uitați să documentați cum vă puteți integra cu bibliotecile, limbile existente și cum să utilizați caracteristicile de rulare și / sau biblioteca standard
Video - Prin utilizarea acestui serviciu, unele informații pot fi partajate cu YouTube
sfaturi
- Începeți prin proiectarea limbii dvs. și nu scrieți niciun cod, până când nu sunteți mulțumit și nu ați răspuns la toate (sau la majoritatea) întrebărilor sau problemelor legate de design, deoarece este mai ușor să schimbați designul mai devreme decât mai târziu.
- Cunoașteți-vă platforma țintă (sistemul de operare și bibliotecile) pentru compilatorul / interpretul dvs., la urma urmelor, o veți folosi și manipula.
Avertizări
- Gândiți-vă dacă aveți cu adevărat nevoie de o limbă nouă și de ceea ce are limba dvs. despre noi pe care alte limbi nu le au (poate fi o combinație de caracteristici sau o singură caracteristică).
- Scrierea limbilor este dificilă dacă nu știi ce faci. Este nevoie și de multă practică.
- Pregătiți-vă să petreceți ceva timp în proiectarea limbajului, deoarece nu veți avea șansa de a vă schimba limba după ce ați scris compilatorul și ați trecut de punctul de proiectare.
- Nu încercați să vă bazați caracteristicile într-o uniune de mai multe limbi, cum ar fi să spuneți că limba dvs. va fi o uniune a limbii X, a limbii Y și a limbii Z. Istoria ne-a arătat că limbile create astfel nu vor avea niciodată succes, sau toată lumea ar programa PL / 1 în loc de ceva bazat pe C.