De ce am creat ESR (gândurile mele despre ESS)

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

De când foloseam un editor de text pentru RI, folosesc ESS. Asta face acum 10 ani. Și așa, am decis că este suficient.

Am început să folosesc R în timpul studiilor de master pentru analiza mea statistică. Am vrut să învăț nucleul limbii și așadar, am decis că nu vreau să am nicio interfață între mine și limbă. Îmi scriam tot codul direct în consolă, salvam niște date Rdata și țineam evidența istoricului. Și am învățat multe.

Câțiva ani mai târziu, mi-am început doctoratul și am decis că asta era prea arhaic. Din anumite motive, am vrut să mă feresc de Rstudio și am început să caut un editor de text bun pentru R. Am fost surprins să constat că există o mulțime de opțiuni bune. Dar aveam un plan: am decis să încerc câteva ca să văd ce simt cu fiecare și apoi să aleg. Am făcut o listă de 3 sau 4 și am început cu primul. Era Emacs cu ESS. Nu am ajuns niciodată la al 2-lea.

Încă de la început, Emacs mi s-a părut foarte natural și intuitiv. Bănuiesc că structura și modul de lucru se potrivesc mentalității mele. Am adoptat ESS în același mod, pur și simplu ca parte a experienței mele Emacs. Am învățat legăturile de bază ale tastelor, conexiunea la consola R și câteva comenzi rapide pentru dezvoltarea pachetelor și comploturi. În cel mai scurt timp am avut un mediu de lucru grozav pentru R. A fost faza îndrăgostirii și mi-a plăcut totul.

ESS are un scop interesant: să facă statisticile ușoare și posibile cu Emacs. Dacă te gândești la asta dincolo de domeniul de aplicare al lui R, sarcina este uriașă. ESS oferă o mulțime de funcționalități pentru alte limbaje statistice, cum ar fi SAS, S-plus și recent chiar Julia. Potrivit wikipedia, „are capacitatea de a trimite un job de lot pentru pachete statistice precum SAS, BUGS sau JAGS atunci când o sesiune interactivă este nedorită din cauza timpului potențial îndelungat necesar pentru finalizarea sarcinii”. Ar putea fi unul dintre primii editori pentru R, cu mult înainte ca Rstudio să fie imaginat.

Restul său scade până în 1992 cu versiunea 3.41. Aceasta ar putea fi în jurul versiunii 18 a Emacs. În momentul scrierii acestei postări, ESS este la versiunea 25.01.0 și Emacs la 30.2. Este evident că ESS a fost creat cu instrumente Emacs foarte vechi și limitate. Și pentru utilizatorul cu experiență, este, de asemenea, clar că ESS a avut probleme în a se adapta la evoluția Emacs. Echipa de dezvoltatori din spatele Emacs a fost foarte inteligentă în a încorpora biblioteci care sunt de mare valoare atât pentru utilizatorul final, cât și pentru programatorul elisp. Emacs este atât de flexibil și versatil încât este bun să țină pasul cu tehnologia de ultimă oră, cum ar fi LSP, tree sitter și, mai recent, AI generativă. Din păcate, nu putem spune același lucru despre ESS.

Echipa ESS a făcut cu adevărat o treabă remarcabilă cu acest pachet. Nu numai că funcționează, dar depășește și încearcă să vă ofere o mulțime de instrumente pentru a face lucrul cu statistici ușor. R este vedeta pachetului, are 9 fișiere elisp dedicate exclusiv pentru acesta și o mulțime de funcționalități suplimentare sau de susținere împrăștiate peste cod. Primește o atenție specială pentru adăugarea de noi funcții și rezolvarea erorilor. Mi-a plăcut întotdeauna cât de ușor este să pornești o nouă consolă R și să asociezi orice buffer de script R cu ea. Îmi place mult sistemul său de depanare. Și am o grămadă de funcții R învăluite în jurul unui cod elisp simplu de executat la combinarea tastelor. Au creat un mediu de dezvoltare excelent pentru codul R. Din păcate, acesta este, de asemenea, foarte tradiționalist în vechiul mod R, iar lucrurile încep să se încețească atunci când încercați metode alternative de dezvoltare a codului R, cum ar fi box și rhino.

În ciuda tuturor lucrurilor minunate pe care le oferă, are și o mulțime de dezavantaje. Baza de cod este prea mare și prea veche. Când încerci să contribui sau pur și simplu să repari sau să schimbi ceva ce presupune a fi simplu, te poți pierde cu ușurință într-un labirint de funcții și variabile elisp împrăștiate peste tot. Există totuși o anumită structură, așa că odată ce începi să te obișnuiești cu ea și înveți ce script este pentru ce, labirintul poate fi navigabil cu ajutorul xref-ului. Dar atunci, codul este prea vechi, a crescut de-a lungul a 40 de ani. De multe ori am avut situații în care, la actualizarea la o nouă versiune Emacs, o grămadă de avertismente și/sau erori apar brusc pentru câteva pachete. Asta pentru că Emacs a schimbat anumite lucruri în anumite funcții, uneori pot fi variabile noi, valori implicite diferite, schimbarea locației sau implementarea a ceva, etc. În general, aștept doar ca întreținerii să o repare. Întotdeauna există unii utilizatori care rulează cel mai nou Emacs pre-lansat și îl raportează rapid, astfel încât întreținerii să îl poată repara rapid. Din păcate, acesta nu este cazul ESS. Din experiența mea, ESS a fost întotdeauna ultimul care a remediat erori de genul acesta. Și când te scufundi în cod, este plin de comentarii despre ceea ce ar fi o implementare bună, cod comentat și mulți lucrează pentru a remedia acest tip de erori, mai degrabă decât să încerce să o implementeze în noul mod pe care îl sugerează Emacs. Și nu-i dau vina pe ei. Codul lor este atât de mare și interdependent, încât, uneori, repararea a ceva care presupune a fi simplu, poate întrerupe alte funcții în flux sau poate întrerupe implementarea acestuia, după cum este necesar, din amonte.

În plus față de toată această agitație, ESS poate fi prea obișnuit cu privire la anumite subiecte. Exemplul meu preferat este lucrul cu proiecte. Spre deosebire de orice alt mod major pentru un limbaj de programare, ESS are propria sa definiție pentru un proiect. Există o întreagă discuție în numărul 1289 dacă vrei să citești părerile. Este conceput astfel încât să setați proiectele în modul R, dar apoi, dacă alegeți să lucrați cu Rhino ai doar dureri de cap. Obișnuiam să lucrez la un proiect R pentru o conductă de date mari care era o bază de cod bine structurată, în afara „modului R”, așa că, ori de câte ori doream să folosesc funcționalitatea proiectului, aceasta nu era disponibilă pentru mine. Am ajuns să adaug un .Rprofile doar pentru asta. Dar este supărător faptul că dezvoltatorii de pachete ajung să decidă cum ar trebui să arate un proiect R.

Toate acestea ne duce la incapacitatea lor de a avea o implementare a tree sitter pentru ESS. Îmi voi păstra comentariile pe această temă, puteți verifica singuri detaliile la numărul 1239, care a fost inițiat pe 5 februarie 2023. Trei ani mai târziu, trageți propriile concluzii.

Se pare că au prea multe în farfurie pur și simplu. Chiar și atunci când R este punctul lor principal, trebuie să tragă tot restul bazei de cod, ceea ce este uriaș. ESR sa născut pentru că credem că utilizatorii R merită o experiență Emacs mai bună. Merităm un mod major în care R este un cetățean de primă clasă, la fel ca python sau java script. Și asta ne permite să ținem pasul cu cele mai recente instrumente R precum radian și aer. Ținta ESR este să fie un pachet minimalist axat pe R, cu sprijinul tree sitter.

Există câteva diferențe remarcabile cu ESS:

  • Emacs Speaks R în loc de Emacs Speaks Statistics. ESR se concentrează pe R.

  • Utilizarea tree setter. Acest lucru deschide o mulțime de noi posibilități pentru evidențierea sintaxelor, navigarea codului și editarea codului.

  • Utilizarea funcționalității încorporate Emacs. Nu reinventați roata și actualizați la instrumente Emacs mai noi.

  • Hartă cheie minimă. ESS oferă o hartă uriașă a cheilor care seamănă cu butoanele și meniurile Rstudio. ESR încearcă să se îndepărteze de acea strategie, menținând curată harta cheilor.

  • Utilizarea instrumentelor moderne pentru a alimenta dezvoltarea R, cum ar fi Eglot și Vterm, care pot suporta Radian și Air.

ESR s-a născut ca mod tree sitter pentru R, dar datorită sprijinului comunității interesate de acesta, continuă să crească ca alternativă la ESS. Suntem foarte recunoscători pentru munca pe care ESS a depus-o de-a lungul acestor ani și am decis să denumim pachetul pentru a onora acest lucru. Vom munci din greu pentru a ne asigura că Emacs Speak R.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.