Rodin

From HaskellWiki
Revision as of 14:25, 28 August 2008 by Ha$kell (talk | contribs) (Uploading a new version of the Rodin DSL (modulo included))
Jump to navigation Jump to search

.Limbajul Rodin, un limbaj pseudocod nou implementat (2008), in stil C, proiectat pentru profesorii si elevii din România, pentru orele de algoritmistica.

Nu uitati sa scanati cu un antivirus executabilul din arhiva.


Upgradati la RodinV06-Ro care are si operatorul modulo, notat %.  

. Download direct !

<Download> Rodinv06-Ro.exe.zip din 28 august 2008. Are si operatorul modulo, pe care nu-l inclusesem in versiunea anterioara.
<Download> Rodin-Ro-floppy.zip incluzand RodinV05-Ro din 7 august 2008.

.Ce este Rodin ?

Un limbaj de programare imperativ, asemanator cu C-ul, destinat rularii de programe in pseudocod. Doriti un software care sa execute, pentru elevii dumneavoastra , programele scrise de ei in pseudocod ? Daca Da, Rodin este pentru dumneavoastra. Limbajul Rodin este foarte bun pentru invatat o serie de notiuni de algoritmistica, dupa parerea beta-testerilor nostri. Limbajul Rodin raspunde la intrebarea "Cum sa rulez pseudocod scris in limba româna, pe calculator, la lectiile de informatica de la liceu sau scoala generala, ori chiar facultate ?" Limbajul pseudocod Rodin este rezultatul a 7 ani de studiu si cercetare universitara in teoria limbajelor modulare.

. De unde vine numele Rodin ?

Rodin, RoDin, Din Ro , Din România. Este un mic limbaj care vine din România, scris de un român pentru colegii sai profesori de liceu Români sau asistentii de la facultatile românesti, oriunde ar fi sau ar preda ei.

. Ce aduce nou Rodin ?

Cuvinte cheie in limba româna, cateva inovatii in materie de expresii (admite si unele lambda expresii cu un parametru impreuna cu operatia de aplicare). Este primul interpretor modular de pseudocod care foloseste cuvinte cheie romanesti.

. Ce mai ofera Rodin ?

O posibilitate de a vedea seria de atribuiri care au loc in timpul executiei programului (lansati-l cu switch-ul -mem). Liberatatea de a alege orice extensie pentru fisiere si orice editor pentru a scrie programe, chiar si Notepad-ul. Nu este nevoie sa declarati variabilele, cel putin deocamdata.Ele se declara automat imediat ce scrieti o atribuire.

. Ce legatura este intre Rodin si Haskell

Rodin a fost scris in Haskell 98 si compilat cu GHC-ul.

. Unde gasesc pagina limbajului pseudocod Rodin ?

Intrati la www.haskell.org si cautati cu motorul de cautare din dreapta sus cuvinte cum ar fi: pseudocod, Rodin. Pe lista pagini apare pagina Rodin. Nu il puteti gasi cu Google ! Sau mergeti direct la http://www.haskell.org/haskellwiki/Rodin.

. Ce v-a determinat sa alegeti Haskell ca limbaj de implementare ?

Productivitatea sa fantastica. RodinV05-Ro a fost scris in circa 4 zile a cate 4 ore de munca, timp in care am facut si cercetare. Dar dupa cativa ani buni (7) de studii in domeniul constructiei compilatoarelor si interpretoarelor limbajelor de programare.

. De unde se poate obtine Rodin ?

De la un alt beta tester Rodin, deocamdata. Urmeaza sa-l distribuim si prin alte metode: dischete, e-mail, download. Deocamdata il distribuim prin e-mail. sau puteti cere o discheta ori un CD de la Univ. Bacau, de la cabinetul domnului Popa. Ori puteti veni cu un stick :)

. Cine este autorul Rodin ?

Dan V.Popa. Actualmente lucreaza la Universitatea Bacau.

. Cum arata cele mai scurte program in Rodin posibile ?

Unul din cele mai scurte programe, care face totusi o operatie cu datele utilizatorului (reafisarea lor) ar fi:

{ tasteaza x;
  scrie x;
}

Vom mai adauga exemple.

. Unde gasim alte exemple de programe in Rodin ?

Aici vom posta exemple imediat ce vin de la beta testeri si le verificam.


Exemplu. Id: A-1
Beta tester: Adrian
Tema: Bucle imbricate; 1000 x 1000 operatii
Obs: Executia dureaza, bucla interioara fiind o temporizare. 
 
{fie n=1000; 
 cat timp (n>0)
   {fie x=0;
    cat timp (x<1000)
       fie x=x+1;
    fie n=n-1;
    scrie n;
    };
};


Exemplu. Id: A-2
Beta tester: Adrian
Tema: Calculul factorialului
 
{
 fie x=0;
 tasteaza x;
 fie g=1;
 executa 
 {
  fie g=g*x;
  fie x=x-1;
 }
 atat cat (x>1);
 scrie g;
}
Exemplu. Id: D-cmmdc
Beta tester: Dan
Tema: Calculul celui mai mare divizor comun
Notiuni: repeta ... pina cand (ca in Pascal) si operatorul modulo, notat %
Ruleaza pe: RodinV06-Ro din 28 aug 2008. Upgradati daca aveti RodinV05-Ro
 
{ tasteaza a;
  tasteaza b;
  fie undeimp=a;
  fie unimp=b;
  repeta
    { fie unrest=undeimp%unimp;
      fie undeimp=unimp;
      fie unimp=unrest;
     }
  pana cand (unimp==0);
  scrie undeimp;
};


. Asemenea programe pot fi rulate efectiv pe calculator ?

Da, fireste. De altfel aceasta este o definitie a pseudocodului: pseudocodul este un limbaj scris cu propriile noastre cuvinte dar suficient de precis incat daca am avea o masina capabila sa-l ruleze el al rula.

Iata o imagine pentru cei care nu sunt convinsi: - Click aici. Programul a calculat factorialul numarului trei, care este 6.

. Ce facem daca un program nu ruleaza corect ?

Consultati lista de sugestii si subtilitati cunoscute:

S1) Atentie:   let x=1,x     va fi perceput ca      let x = (1,x) 
puneti (let x=1),x in loc. 
Dar         {1;2;}
             1,2     

S2) Puneti spatiu dupa do la do while . Obligatoriu.

S3) 12+(\\ y . y) (4+4) -- nu puneti spatii linga plusuri si alti operatori.    Valabil si pentru comparatii: <,>, ==, !=

S4) Daca incercati sa folositi o atribuire pe post de expresie,
si o puneti in paranteza, atunci  inchideti paranteza imediat, fara spatii:

H:\_Pr>MainV03.exe Rodin2.hs
Asa nu e bine:

{ let y =2;
  let x=100;
  while (x>10)
    let x=x-(let y = 1 );
  print x;
  print y;
}

H:\_P>MainV03.exe Rodin2.hs
Dar asa e bine (dar nu uitati la RodinV05-Ro sa scrieti cuvintele cheie pe romaneste conform listei de echivalente de mai jos.)

{ let y =2;
  let x=100;
  while (x>10)
    let x=x-(let y = 1);
  print x;
  print y;
}

S5) \" este " ca si in C
Deci mesajul: 
unexpected "\""
expecting space or expresion
inseamna ca a gasit o " neasteptata in string-ul de intrare

S6) Recomandare: Desi in teorie numele variabilelor
poate sa inceapa cu orice litera, Rodin nu accepta (cel putin acest prototip)
variabile care incep cu aceeasi litera ca si cuvintele cheie. 
(deoarece are un fel de scannerless parser).
NU FOLOSITI VARIABILE CARE INCEP LA FEL CA SI
CUVINTELE CHEIE,deci evitati: d a c f p r s t
sau prefixati variabilele cu o litera
cum ar fi m.  

Iata `cuvintele` cheie din Rodin, desi unele nu sunt cuvinte ci 
adevarate sintagme:

if = "daca"
then = "atunci"
else = "altfel"
let = "fie"
while = "cat timp" 
do = "executa"   / in versiunile vechi era "socoteste"
print = "scrie"
read = "tasteaza"
begin = "{"
end = "}"
repeat = "repeta"
until = "pina cand"
for = "pentru"

'Egalitatile' sugereaza cu ce alte cuvinte din alte limbaje de programare se aseamana cuvintele din limbajul Rodin.

Lista este orientativa, n-ar fi exclus s-o mai schimbam daca gasim motive intemeiate pentru a face acest lucru.


s7) Nu incepeti programul cu un rand liber ! 
Rodin va da eroare gasind acel Enter.

s8) Puneti imediat ; dupa atribuirea 
fie x=0;  asa e bine 
dar nu asa  
fie x=0 ; 

s9) dupa "socoteste" /"executa" deschideti pe acelasi rand acolada,
puneti un spatiu (macar) intre "socoteste"/"executa" si acolada.

Atentie, una din versiunile mai vechi ale Limbajului foloseste "socoteste" alta "executa". Orientati-va dupa numarul ei si data de lansare pentru a le deosebi.


. Putem contribui la dezvoltarea Rodin ?

Daca stiti Haskell si extensiile sale, daca cunoasteti transformatori de monade, daca ati folosit parsere modulare, atunci da. Ca alternativa sper sa pot publica un mic ghid dupa care un necunoscator al acestora sa poata scrie totusi componente pentru Rodin.

Alt mod de a contribui la dezvoltarea Rodin este sa scrieti pur si simplu programe in Rodin si sa le postati pe aceasta pagina. Ma oblig sa le verific inainte, daca nu sunt prea complicate sau prea multe. (Altfel n-as avea timp indeajuns pentru ele.)

. Faceti si instruire in priviinta Rodin ?

Da, daca exista cerere. Voi anunta prin e-mail.

. Pe ce notiuni se bazeaza Rodin

Pe notiuni de teoria categoriilor, monade, semantici monadice modulare si altele despre care am scris mai sus.

. Ar putea un elev de liceu sa programeze in limbajul Rodin sau sa fie beta tester ?

Cu siguranta. Limbajul a fost inventat tocmai cu acest gand in minte, sa fie accesibil elevilor si profesorilor. Dar totusi sa fie suficient de strict ca sa te oblige sa deprinzi disciplina programarii.

. Ce cunostinte ar trebui sa aiba cineva ca sa utilizeze Limbajul Rodin ?

Minim: Deschiderea unei console Windows cu Run-> Command -> cmd apoi tastarea unei linii de comenzi. Plus cateva cunostinte despre limbajul C cu care Rodin se aseamana. Mediu: C la un nivel didactic. Abilitatea de a intelege C-ul dincolo de cuvintele sale cheie. Maxim: C si lambda calcul, daca doriti sa exploatati puterea unor expresii speciale (lambda expresiile numite abstractii).


. De ce exemplele de pe lista de subtilitati sunt in engleza ?

Natural, facand cercetare pentru prezentarea la o intalnire stiintifica internationala, primele experimente au fost in limba engleza. Dorim tare mult sa sustinem simultan abele versiuni de Rodin: Rodin-Ro si Rodin-En, fiecare folosind alt set de cuvinte cheie. Afirm ca s-ar putea trece de la Rodin-Ro la C prin intermediul Rodin-En, eventual folosindu-l ca suport pentru realizarea temelor. (Ipoteza. Ce zic specialistii in pedagogia informaticii ?)


Pagina proiectului Rodin este in dezvoltare. Vizitati-o regulat pentru a gasi noutatile, programele si exercitiile noi adaugate.