Creați un limbaj de programare

Mulți oameni întâmpină dificultăți sau sunt frustrați de limbile de programare pe care le folosesc în fiecare zi. Unii doresc ca lucrurile să fie tratate mai abstract, în timp ce altele sunt nemulțumite de implementarea funcțiilor pe care le doresc, fiind "standard". Indiferent dacă sunteți un expert IT sau doar un pasionat, de multe ori veți fi în poziția de a crea un nou limbaj de programare.

metodă

1
Familiarizați-vă cu terminologia. Autorii compilatorilor folosesc adesea termeni necunoscuți. Aflați mai multe despre compilatoare înainte de a continua. Ar trebui să știi tot ce trebuie să știi.
  • 2
    Decideți ce problemă va rezolva limba dvs. Se adresează o problemă a unei anumite zone sau este o limbă cu scop general?
  • 3
    Gândiți-vă la semantica limbii și conceptelor dvs.
  • Veți permite accesul direct la indicii sau nu?
  • Ce tipuri de date are limba dvs.?
  • Este o limbă statică sau dinamică?
  • Cum arată modelul dvs. de memorie? Veți folosi un colector de gunoi sau o gestionare manuală a depozitării? (Când utilizați un colector de gunoi, fiți pregătit să scrieți sau să adaptați unul existent la limba dvs.)
  • Cum vei face față concurenței? Veți folosi un model simplu de filetare / blocare sau ceva mai complex decât Linda sau modelul de actor? (Computerele de astăzi au mai multe nuclee.)
  • Există funcții primitive încorporate în limbaj sau totul dintr-o bibliotecă?
  • Care este paradigma sau sunt paradigmele limbii voastre? Funcțională? orientate spre obiect? Prototype (cum ar fi jаvascript)? orientate spre aspect? orientate spre șablon? Sau ceva complet nou?
  • Ce interfețe există între limba dvs. și bibliotecile și limbile existente (mai ales C)? Acest lucru este important atunci când dezvoltați un limbaj specific domeniului.
  • În cele din urmă, unele dintre răspunsurile la aceste întrebări sunt furnizate în al doilea pas și vă vor ajuta să răspundeți la următorul pas.
  • 4
    Gândiți-vă la sarcinile specifice pe care cineva ar dori să le facă cu limba dvs. de programare. De exemplu, "ar putea să dorească să spună unui robot să urmeze o linie" sau "ar putea dori să dezvolte programe de desktop relativ portabile" sau "ar putea dori să creeze aplicații web cu el".
  • 5
    Experimentați cu ideile de sintaxă (textul limbajului de programare) pentru exemplele de mai sus.
  • Asigurați-vă că păstrați limbajul de programare în categoria limbajului fără contexte. Generatorul dvs. de parser și veți aprecia acest lucru mai târziu.
  • 6
    Elaborează o gramatică formală pentru sintaxa.
  • 7
    Decideți dacă limba este interpretată sau compilată. În lumea interpretată, utilizatorul dvs. manipulează programul într-un editor și îl execută direct pe computer în timp ce editează, compilază, compilază și apoi execută programul în lumea compilatoarelor.
  • 8
    Scrieți scanerul frontal și parserul sau găsiți un instrument care vă va ajuta.
  • De asemenea, gândiți-vă cum vă va avertiza compilatorul / interpretul despre programele proaste și erorile de sintaxă.


  • 9
    Utilizați informațiile de parser pentru a scrie codul obiect pentru o prezentare intermediară. Permiteți parserului să creeze un AST, apoi să creeze codul obiect de la codul de adresă sau de la cel mai mare frate SSA și apoi să creeze o hartă de caractere pentru a defini funcțiile, variabilele globale și așa mai departe.
  • În funcție de limba dvs., ați putea dori, de asemenea, să creați tabele virtuale de indicatori sau tabele de date pentru clasele dvs. (pentru a susține o reflecție sau RTTI).
  • 10
    Scrie exportatorul sau generator de cod care conectează totul.
  • 11
    Scrieți multe programe de testare pentru a testa limba de programare.
  • Ar trebui să creați programe care pun accentul pe gramatica dvs. formală sub stres pentru a vedea că compilatorul dvs. acceptă tot ceea ce merge cu definiția dvs. și respinge orice altceva.
  • 12
    Luați în considerare modul în care utilizatorul va depana propriile programe.
  • 13
    Dacă limba dvs. de programare utilizează o bibliotecă standard, ar trebui să o scrieți. În plus față de un colector de gunoi sau alte caracteristici runtime, dacă aveți nevoie de el.
  • În special, atunci când scrieți un compilator, aveți nevoie de codul pe care sistemul de operare îl execută pentru a executa codul utilizatorului (de exemplu, atribuirea variabilelor globale).
  • 14
    Publicați-vă limba de programare împreună cu specificația și câteva exemple despre ce puteți face cu ea.
  • Nu uitați să documentați cum să integrați bibliotecile existente și limbajele de programare și cum să utilizați aceste funcții de rulare și / sau biblioteca standard.
  • Sfaturi

    • Începeți prin proiectarea limbajului dvs. de programare și nu scrieți niciun cod până când nu sunteți mulțumit și ați răspuns la toate (sau cele mai multe) întrebări sau probleme cu privire la design, deoarece modificarea designului este mai ușoară decât a fost.
    • Cunoașteți platforma țintă (sistemul de operare și bibliotecile) pentru compilatorul / interpretul dvs., eventual îl veți utiliza și îl veți edita.

    avertismente

    • Gândiți-vă dacă aveți într-adevăr nevoie de o nouă limbă și ce limbă aveți noi pe care alții nu o au (poate fi o combinație de caracteristici sau o singură caracteristică).
    • Limba de scriere este dificilă dacă nu știți ce faceți. De asemenea, este nevoie de multă practică.
    • Fiți pregătit să dedicați ceva timp proiectării limbajului deoarece nu aveți nicio modalitate de a vă schimba limba odată ce ați scris compilatorul și sunteți dincolo de faza de proiectare.
    • Nu încercați să vă bazați trăsăturile pe o uniune de mai multe limbi, să zicem. De exemplu, limba dvs. este o combinație de Limba X, Limba Y și Limba Z. Trecutul a arătat că limbile create astfel nu au reușit niciodată.

    Ce ai nevoie

    • răbdare
    • Cunoașterea caracteristicilor limbajelor de programare și proiectarea unui limbaj de programare (poate doriți să citiți Concepte de proiectare a limbajului de programare de David A. Watt).
    • Cunoașterea teoriei compilatorului (deoarece veți scrie un compilator / interpret pentru limba dvs. și implementarea dvs. va fi implementarea referinței).
    • Aplicații pentru limba dvs. de programare (rețineți că unele dintre limbile cele mai frecvent utilizate, cum ar fi C sau Lisp, au fost create pentru a face ceva specific, cum ar fi crearea de UNIX sau aritmetică simbolică).
    Distribuiți pe rețelele sociale:

    înrudit