Limbaje de programare, ză fiuciăr

February 15th, 2009 Alex Posted in perl, technology |

Eul meu alternativ a scris pe celălalt blog o mică diatribă despre problemele combinării de biblioteci de cod scrise în limbaje de programare diferite.

Şi mai am o altă problemă: instrumentele curente de design al unui limbaj de programare sunt destul de primitive. Yacc/Lex sunt decente, dar odată parserul complet cam trebuie să lucrezi la propriul backend cu un minim de facilităţi necesare, cum ar fi garbage-collection şi FFI.
Sau interpretorul se poate baza pe un VM stabil şi complet, cum ar fi JVM sau CLR. Însă din păcate maşinile astea virtuale sunt specifice limbajelor statice pentru care-au fost create, Java/C#, şi deşi JRuby în diverse benchmark-uri are performanţe mai bune ca Ruby MRI, asta spune mai multe despre performanţa proastă a implementării de referinţă. Şi există Antlr (gramatică EBNF, parsare LL(*), AntlrWorks, backend-uri multiple), dar nu-mi rezolvă problema.

Am început să mă joc cu Parrot şi cu Rakudo, implementarea de Perl6. Parrot mi se pare genial şi pentru Februarie este pregătită versiunea 1.0. Parte din Parrot face parte şi PGE (Parrot Grammar Engine) ce permite definirea de expresii regulate cu nume ataşat. Mă rog, termenul de „expresie regulată” nu prea e corect deoarece în PGE expresiile pot fi recursive (uite o întrebare de interviu pentru tortură maximă: dă-mi un exemplu de conţinut ce nu poate fi parsat cu un regex şi demonstrează de ce :) ). Şi tot Parrot îţi pune la dispoziţie unelte pentru reprezentarea AST-ului / compilarea în bytecode.

Planul meu de dominare a lumii începe.
~

  1. ce continut nu poate fi parsat cu regex? mi-am batut capul si nu reusesc sa gasesc

  2. Nu este tocmai un exemplu perfect, dar poate fi: Inlaturare comentarii din cod sursa

    O expresie regulata este echivalenta cu un automat finit. Un automat finit nu este recursiv si la fiecare pas nu se retine nimic decat pozitia curenta in automat. De cele mai multe ori asta inseamna ca nu-ti poti da seama de contextul in care apare o bucata de text gasita.

    Exemplul clasic: verifica daca o insiruire de paranteze este corecta (i.e. parantezele sunt inchise corect). Sau daca exemplul este fara utilitate, gandeste-te atunci cum poti verifica daca o bucata de cod html este xml valid.

    In acelasi spirit, un articol de pe un blog faimos … The Problem with URLs … unde Jeff Atwood o cam dă de gard cu soluţia propusă :)

Leave a Reply