RWSH - Utilitar - București - Lucrari 2019 Nationala

Informatii generale

Descriere

Un shell alternativ pentru sisteme UNIX-like.

Pe sistemele UNIX-like, shell-ul, sau linia de comandă, este interfața textuală a sistemului de operare. Utilizatorul poate să execute comenzi în modul interactiv, sau poate să execute fișiere script. Astfel, shell-ul este în același timp și interpretor pentru un limbaj specializat de programare.

Programele de la linia de comandă a unui OS tip UNIX-like comunică cu utilizatorul și cu alte programe prin intermediul interfeței text. Aceste programe procesatoare de text pot fi înlănțuite prin pipe-uri pentru a pasa rezultatele ca date de intrare intre ele. Multe programe din arsenalul UNIX se ocupa special de procesarea de texte. Unele operatii, precum taierea sufixului unui sir de caractere, nu sunt triviale in aceste shell-uri, ci necesita folosirea unor astfel de programe. Multe shell-uri moderne, precum bash si zsh, au adaugat ulterior sintaxa speciala, dar limitata, pentru astfel de operatii simple.

RWSH combina shell-ul, o interfata textuala, cu cea a procesorului de text, printr-o metoda inedita: Structural Regular Expressions. Aceste expresii regulate speciale au debutat in sistemul experimental de operare Plan 9. Ele se diferentiaza de regex-urile folosite in majoritatea uneltelor UNIX prin faptul ca nu se limiteaza la conceptul de linie. Unelte precum grep, sed si awk aplica regex-ul linie cu linie. Expresiile structurale sunt aplicate pe intreg fisierul. Ele pot descrie cu adevarat forma datelor de tip text atunci cand nu se respecta neaparat structura de “array of lines”.

RWSH, prin intermediul acestor expresii, ofera un mecanism puternic de pattern matching, care executa comenzi pe bucatile din fluxul text (flux care poate fi infinit) care se potrivesc cu regex-ul, cat si mecanisme de prelucrare rapida a textului, printr-un limbaj special, similar celui din editorul de texte sam, tot din sistemul de operare Plan 9. RWSH este un limbaj de programare puternic, dedicat interactiunilor dintre programe si datele textuale pe care opereaza. Este ca un fel de combinatie intre bash si awk, dar cu imbunatatiri conceptuale. Sintaxa este reimprospatata, nefiind compatibila standardului POSIX.

Tehnologii

Programul este scris in limbajul de programare Rust.
Am ales limbajul de programare Rust deoarece este un limbaj de programare modern, adecvat programarii de sistem (systems programming), care ofera mecanisme pentru prevenirea erorilor de memorie care pot duce la vulnerabilitati si crash-uri (exemplu: ShellShock).

Cum aceste mecanisme nu sunt de ajuns, codul este insotit de unit test-uri pentru parser, care reprezinta o buna parte din codul proiectului.

Restul se testează prin script-uri de test, pentru fiecare funcționalitate a shell-ului.

Proiectul beneficiază de un CI pipeline care compilează programul, executa testele si verifica ca toate fișierele sursa sa conțină antetul pentru licenta GPL:
https://builds.sr.ht/~tudor/rwsh

Repo-ul principal este pe sourcehut: ~tudor/rwsh - sourcehut git
Un mirror la GitHub exista pentru convenienta.

Cerinte sistem

Programul este compatibil cu toate sistemele UNIX-like care respecta POSIX. Testat doar pe Linux.

Realizatori

Tudor Roman

  • Scoala: Colegiul Național de Informatică “Tudor Vianu”
  • Clasa: 10
  • Judet: București
  • Oras: București

Screenshots