Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
La multi ani de Florii!

Stihl fs 70 c-e

Challengers (2024)

Care mai sunt mediile de admitere...
 Laptop cu HDD atasare memorie MMC...

Hartile google nu mai au chenarul...

Tomate in ghiveci la curte?

Idei cale de actiune recuperare g...
 Intoleranța lactoza- vegan v...

Tobe acustice insonorizare in blo...

Cine canta? Fragment din melodie...

Tablou sigurante Dacia Sandero 2012
 Baby Reindeer - 2024

Hotii voteaza hoti?!

Camera video masina

Zilele emailului din gospodaria n...
 

Rust 1.0 - un nou limbaj: sigur, pragmatic, performant

- - - - -
  • Please log in to reply
23 replies to this topic

Poll: Rust 1.0 - un nou limbaj: sigur, pragmatic, performant (23 member(s) have cast votes)

Ai incercat rust pana acum?

  1. Da (3 votes [13.04%] - View)

    Percentage of vote: 13.04%

  2. Nu (20 votes [86.96%] - View)

    Percentage of vote: 86.96%

Esti curios sa inveti rust?

  1. Da (12 votes [52.17%] - View)

    Percentage of vote: 52.17%

  2. Nu (9 votes [39.13%] - View)

    Percentage of vote: 39.13%

  3. Stiu deja / stiu ceva, inca mai invat (2 votes [8.70%] - View)

    Percentage of vote: 8.70%

Ai folosi sau vei folosi rust pentru un proiect (la munca sau de hobby)?

  1. Da (6 votes [26.09%] - View)

    Percentage of vote: 26.09%

  2. Nu (8 votes [34.78%] - View)

    Percentage of vote: 34.78%

  3. Nu stiu inca, ma voi documenta (9 votes [39.13%] - View)

    Percentage of vote: 39.13%

Vote Guests cannot vote

#1
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Rust 1.0 (pagina oficiala) a fost lansat (clip: release party, mici prezentari) acum cateva ore.

Din experientele mele cu acest limbaj, pot spune ca te forteaza sa gandesti foarte disciplinat (nu ma consider un programator nedisciplinat, dar am simtit ca rust ma forteaza sa imi slefuiesc abilitatile). E greu la inceput, dar cred ca merita efortul pe termen lung.

La aspectul performanta, genereaza codul binar via LLVM, deci este la fel de performant ca un cod C de o calitate comparabila (cu error checking facut curat).

Diferenta este ca face foarte multe verificari la compilare, asadar bugurile triviale sunt evitate.

Din punctul de vedere al ergonomiei codului, un cod scris in rust pare mai lung de cat e necesar, insa daca te gandesti la ceea ce face codul, se ajunge cam la acelasi gen de cod ca C/C++.

Ergonomia codului unui proiect poate fi imbunatatita folosind "preprocesorul rust", via macros, care manipuleaza direct AST-ul, in contrast cu cel C/C++, care stie doar sa inlocuiasca niste parametri. Asadar: e mai complicat sa scrii macros pentru lucruri simple, dar mult mai usor sa scrii macros pentru lucruri complicate.

Multumita ownership si lifetimes disponibile direct in limbaj, codul se simte de ca si cum ar avea un GC, insa generarea codului care elibereaza resursele e facuta la compilare, ceea ce-l face sa se simta pe alocuri ca un limbaj de scripting. La acest aspect e superior lui golang.

Superior lui golang mai este si deoarece: are generics (in C++ cunoscut ca templates), iar cargo (un fel de make on steroids) stie si de managementul dependintelor (daca respecta semver, ceea ce orice proiect modern face oricum).

Interoperabilitatea cu C e gratuita / ieftina (cod rust poate apela cod C, si vice-versa).

Din experienta mea, lucrurile dificile (usor frustrante dupa ce cunosti cat de cat limbajul) includ modelarea structurilorr de date izomorfe (arbori, liste inlantuite), iar mai frustrante sunt structurile de date ciclice (liste inlantuite circulare, grafuri).

Limbajul si toolingul au incluse:
  • infrastructura de testare (separarea curata intre unit testing si integration testing)
  • de generare a documentatiei (documentatia care contine exemple de cod nu e compilata, daca exemplele nu pot fi compilate cu succes)
  • mesaje de eroare si avertizari foarte clare: se vede cum compilatorul detine o "intelegere" consecventa a codului
  • versionarea stabilitatii functiilor, modulelor
Fiind versiunea 1.0, ma astept ca multe lucruri sa se imbunatateasca pe parcurs, insa, fiind in dezvoltare din 2010, e un limbaj robust.

Personal, imi place sa programez in el, iar atunci cand ma lovesc de o problema, imi plac provocarile pe care mi le da compilatorul (prin mesaje de eroare foarte clare); din experienta mea cu acest limbaj, de fiecare data cand compilatorul a spus ca gresesc, am fost fortat sa regandesc codul si a rezultat un cod mai curat.

Pentru programatori, Rust for C++ programmers este o introducere decenta si probabil suficienta. La nevoie, va stau la dispozitie

Edited by OriginalCopy, 16 May 2015 - 15:00.


#2
championul

championul

    Junior Member

  • Grup: Members
  • Posts: 162
  • Înscris: 29.06.2006
M-am uitat și eu peste el. Tot citesc articole de vreo câteva luni, de când am aflat cu ce se mănâncă și m-am lămurit că nu e doar un „toy language”. Mozilla are planuri mari cu rust: din ce am înțeles, vor să înlocuiască treptat codul scris în c++ pentru Firefox cu o variantă în rust

#3
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 championul, on 16 mai 2015 - 13:14, said:

M-am uitat și eu peste el. Tot citesc articole de vreo câteva luni, de când am aflat cu ce se mănâncă și m-am lămurit că nu e doar un „toy language”. Mozilla are planuri mari cu rust: din ce am înțeles, vor să înlocuiască treptat codul scris în c++ pentru Firefox cu o variantă în rust
In prezentarea din postarea #1 demonstreaza deja servo, fundatia exista deja - statistici in linii de cod ale lui servo:
[ https://i.imgur.com/FkdGO6Y.png - Pentru incarcare in pagina (embed) Click aici ]

Dar nu e doar mozilla, e un proiect open-source de care (dupa cum vezi in prezentatie) multe companii se intereseaza inca din prima zi, iar la lucrurile (benefice) pe care le aduce, prevad ca numarul celor interesati va creste.

Edited by OriginalCopy, 16 May 2015 - 13:29.


#4
aloha2015

aloha2015

    Member

  • Grup: Validating
  • Posts: 341
  • Înscris: 26.12.2014
Anul trecut parca aveau si un REPL disponibil pentru Rust.

Sper sa apara din nou Posted Image

#5
championul

championul

    Junior Member

  • Grup: Members
  • Posts: 162
  • Înscris: 29.06.2006
@OriginalCopy:  După ce ai programat o perioadă în Rust  și te-ai întors la programarea în c++ ai simțit vreo diferență în codul scris în c++ ? Ai început să scrii codul ținând cont de restricțiile pe care le are rust, făcându-l mai sigur ?

#6
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 championul, on 17 mai 2015 - 08:27, said:

@OriginalCopy:  După ce ai programat o perioadă în Rust  și te-ai întors la programarea în c++ ai simțit vreo diferență în codul scris în c++ ? Ai început să scrii codul ținând cont de restricțiile pe care le are rust, făcându-l mai sigur ?
Normal ca tin cont, insa e greu pentru un om sa tina minte toate lifetimes si mutabilitatea tuturor obiectelor, mai ales cand e un codebase mare.

Oricat ai tine cont, compilatoarele c/c++ nu pot egala rust, pentru ca nu au la dispozitie toate acele informatii. rustc te avertizeaza oricand calci stramb fara sa-ti dai seama, c/c++ nu o poate face.

 aloha2015, on 16 mai 2015 - 21:06, said:

Anul trecut parca aveau si un REPL disponibil pentru Rust.
Sper sa apara din nou
Nu cred ca va apare oficial, dar exista alternative, chiar daca mai trebuiesc imbunatatite.

Edited by OriginalCopy, 17 May 2015 - 09:06.


#7
m3th0dman

m3th0dman

    Senior Member

  • Grup: Senior Members
  • Posts: 9,269
  • Înscris: 03.01.2007
În esenþã implmenteazã actor model din Erlang (idee de vreo 30 de ani) într-un limbaj compilat, în contrast cu Erlang însuºi sau cu Go care ruleazã pe maºinã virtualã. Nu prea vine cu chestii noi...

 OriginalCopy, on 16 mai 2015 - 13:08, said:

La aspectul performanta, genereaza codul binar via LLVM, deci este la fel de performant ca un cod C de o calitate comparabila (cu error checking facut curat).
That's bullshit. Ori îi memory safe ori la fel de rapid ca C; însã nu ambele simultan.

#8
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 m3th0dman, on 17 mai 2015 - 13:04, said:

That's bullshit. Ori îi memory safe ori la fel de rapid ca C; însă nu ambele simultan.
Dat fiind un program in C memory-safe (cu zilioane de if-uri si else-uri si managementul manual al resurselor), un program scris in rust care satisface aceleasi cerinte functionale este aproximativ la fel de performant ca acel program in C.

Bineinteles, la tooling, optimizari, etc, mai e loc de imbunatatiri, dar astea sunt detalii care vor fi slefuite pe parcurs si nu exista impedimente tehnice in a le implementa - e o chestiune de timp si efort investit.

Un program C poate fi notabil mai rapid doar daca sare peste toate mecanismele de siguranta pe care compilatorul rust le face la compilare.

Potentialul lui rust e mare, dar nu ma tem ca fanboii java (sau al oricarui alt limbaj) nu vor gasi orice oportunitate de a diminua partile bune ale lui rust, ridicand in slavi stop-the-world garbage collection.


Stai linistit ca nu feeduiesc trollul, raspund spre binele celor mai slabi de inger care pot pune botul la prostii.

Rust are un punct slab, dar acela nu e nici siguranta, nici performanta, si nici potentialul.

#9
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,240
  • Înscris: 24.02.2007
Multumita smart-pointerilor din C++(11) si a Null-Object pattern, aproape ca uit ce-i aia management manual al memorie, avand in acelasi timp o solutie eficienta, determinista (fara GC), si, mai ales, putin cod dedicat problemei.

Apoi, un simplu typedef imi transforma orice structura de date intr-una immutable, ca in exemplul de mai jos:
#include <iostream>
#include <string>
#include <memory>

using namespace std;

typedef shared_ptr<const string> immutable_string;

int main()
{
   immutable_string a = make_shared<string>("1234");
   immutable_string b = make_shared<string>("12345");
   immutable_string c = a;

   cout << "Before" << endl;
   cout << "a = " << *a << endl;
   cout << "b = " << *b << endl;
   cout << "c = " << *c << endl;
   cout << endl;

   //*a += 'c'; //compiler error
   //(*a)[1] = 'c';//compiler error

   a = b;
   b = make_shared<string>("9876");

   cout << "After" << endl;
   cout << "a = " << *a << endl;
   cout << "b = " << *b << endl;
   cout << "c = " << *c << endl;

   return 0;
}

Quote

Before
a = 1234
b = 12345
c = 1234

After
a = 12345
b = 9876
c = 1234

Din punctele astea de vedere, ce imi ofera Rust incat sa ma motiveze sa invat un (cu totul) alt limbaj?

#10
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 dani.user, on 17 mai 2015 - 14:21, said:

Din punctele astea de vedere, ce imi ofera Rust incat sa ma motiveze sa invat un (cu totul) alt limbaj?
Cel mai probabil aceleasi motive care au determinat-o pe mozilla sa isi doreasca migrarea de la C++ la un limbaj propriu.

Daca ai o echipa disciplinata tot timpul [1], care programeaza curat in C++ modern, cel mai probabil nu ai avea un beneficiu atat de mare incat sa merite efortul.

Dar

Quote

Rust combines powerful and flexible modern programming constructs with a clear performance model to make program efficiency predictable and manageable. One important way it achieves this is by allowing fine-grained control over memory allocation through contiguous records and stack allocation. This control is balanced with the absolute requirement of safety: Rust’s type system and runtime guarantee the absence of data races, buffer overflow, stack overflow or access to uninitialized or deallocated memory.
( https://www.mozilla....earch/projects/ )

Practica ne spune ca, chiar daca poti compensa cu disciplina mentala lipsurile dintr-un compilator C++, greseli se intampla.

Nu gasesc acum referinte, insa exista de exemplu o situatie in care toate bugurile gasite intr-un bug hunting day in Firefox nu ar fi existat daca ar fi fost scris in rust.

[1] Acel "daca" si "tot timpul" sunt lucruri destul de marete; in practica e dificil asa ceva.

#11
fantom007

fantom007

    New Member

  • Grup: Junior Members
  • Posts: 9
  • Înscris: 16.05.2015
Rust asta are si framework pentru GUI ?

#12
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,604
  • Înscris: 30.07.2003

 OriginalCopy, on 17 mai 2015 - 13:41, said:

Potentialul lui rust e mare, dar nu ma tem ca fanboii java (sau al oricarui alt limbaj) nu vor gasi orice oportunitate de a diminua partile bune ale lui rust
Limbaje noi cu facilitati utile au tot fost dar pe de o parte istoria e mai puternica decat fanii in cauza pentru ca trebuie intretinut destul cod pe tehnologiile ce au prins deja iar pe de alta parte conteaza si cine sustine un produs nou, cand MS, IBM, Apple si multi altii publica SDK/API-uri cu nemiluita in ce au ales acestia, e greu pentru unul mic sa tina pasul iar beneficiarul se uita la raportul cost/productivitate.

Edited by neagu_laurentiu, 17 May 2015 - 15:24.


#13
aloha2015

aloha2015

    Member

  • Grup: Validating
  • Posts: 341
  • Înscris: 26.12.2014

 fantom007, on 17 mai 2015 - 15:21, said:

Rust asta are si framework pentru GUI ?

limbaj de programare =/= ecosistem

Deocamdata poti folosi frameworkuri existente, scrise in C++ (cum ar fi Qt).

 m3th0dman, on 17 mai 2015 - 13:04, said:

That's bullshit. Ori îi memory safe ori la fel de rapid ca C; însă nu ambele simultan.

Oare? Daca muti tot efortul acesta la compilare, nu vad ce piedica ar fi in calea performantei la rulare. Cat despre C++, cred ca ai nevoie de 9 vieti, ca pisica, pentru a-i putea invata toate chichitele (nu doar un subset, fiindca o alta echipa poate folosi un cu totul alt subset al ecosistemului).

#14
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,240
  • Înscris: 24.02.2007

 aloha2015, on 17 mai 2015 - 17:56, said:

nu doar un subset, fiindca o alta echipa poate folosi un cu totul alt subset al ecosistemului

Pentru asa ceva imi plac tehnologii gen COM.
Fiecare isi dezvolta componentele cum doreste (in acest caz chiar in ce limbaj doreste), dar intre ele comunica intr-un mod stabilit/standardizat.

Edited by dani.user, 17 May 2015 - 19:59.


#15
m3th0dman

m3th0dman

    Senior Member

  • Grup: Senior Members
  • Posts: 9,269
  • Înscris: 03.01.2007

 OriginalCopy, on 17 mai 2015 - 13:41, said:

Dat fiind un program in C memory-safe (cu zilioane de if-uri si else-uri si managementul manual al resurselor), un program scris in rust care satisface aceleasi cerinte functionale este aproximativ la fel de performant ca acel program in C.
N-are cum să fie la fel de performant ca şi C. Cine crezi că adaugă tot timpul check-uri de memorie în C, în special dacă vrea să obţină cod performant? Repet, ori e memory-safe ori e la fel de rapid ca C; însă nu ambele simultan. De fapt şi cu C++ e aproape imposibil.
Vezi asta inclusiv pe blog, la unul din nenii care lucrează efectiv la Rust: http://pcwalton.blog...xt-of-rust.html
"It's impossible to be "as fast as C" in all cases while remaining safe."

 aloha2015, on 17 mai 2015 - 17:56, said:

Oare? Daca muti tot efortul acesta la compilare, nu vad ce piedica ar fi in calea performantei la rulare. Cat despre C++, cred ca ai nevoie de 9 vieti, ca pisica, pentru a-i putea invata toate chichitele (nu doar un subset, fiindca o alta echipa poate folosi un cu totul alt subset al ecosistemului).
Şi dacă eu aloc memorie dinamic? Cum muţi tot efortul acesta la compilare?

Edited by m3th0dman, 17 May 2015 - 21:16.


#16
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 m3th0dman, on 17 mai 2015 - 21:14, said:


N-are cum să fie la fel de performant ca şi C. Cine crezi că adaugă tot timpul check-uri de memorie ĂŽn C, ĂŽn special dacă vrea să obţină cod performant? Repet, ori e memory-safe ori e la fel de rapid ca C; ĂŽnsă nu ambele simultan. De fapt şi cu C++ e aproape imposibil.
Vezi asta inclusiv pe blog, la unul din nenii care lucrează efectiv la Rust: http://pcwalton.blog...xt-of-rust.html
"It's impossible to be "as fast as C" in all cases while remaining safe."


Şi dacă eu aloc memorie dinamic? Cum muţi tot efortul acesta la compilare?

Cred că înțelepciunea e rezervată oamenilor care nu citesc articole vechi de 5 ani doar ca să-și justifice prostiile.

https://i.imgur.com/RsJiKgj.jpg

Cum se face că toți au înțeles despre ce e vorba, numai Gică Contra nu?

Bine că nu dă nimeni doi bani pe păreri neavizate.

#17
aloha2015

aloha2015

    Member

  • Grup: Validating
  • Posts: 341
  • Înscris: 26.12.2014

 m3th0dman, on 17 mai 2015 - 21:14, said:

"It's impossible to be "as fast as C" in all cases while remaining safe."

Pai, vezi tu, ai ignorat o bucatica: "while remaining safe".

Imi aduce aminte de trenul de mare viteza chinezesc. (Legenda spune ca) au luat un proiect german, i-au scos unele echipamente de siguranta a pasagerilor ca sa-l faca mai usor, apoi i-au batut pe germani la viteza maxima. Cam asa e si rationamentul tau cu C++.

Comparatia trebuie sa fie intre Rust si C++ cu facilitati de siguranta echivalente ;)

#18
m3th0dman

m3th0dman

    Senior Member

  • Grup: Senior Members
  • Posts: 9,269
  • Înscris: 03.01.2007

 OriginalCopy, on 18 mai 2015 - 08:31, said:

Cred că înțelepciunea e rezervată oamenilor care nu citesc articole vechi de 5 ani doar ca să-și justifice prostiile.

https://i.imgur.com/RsJiKgj.jpg

Cum se face că toți au înțeles despre ce e vorba, numai Gică Contra nu?

Bine că nu dă nimeni doi bani pe păreri neavizate.
Adică dacă e din 2010 nu e valid? S-a schimbat ceva fundamental în C sau în Rust de atunci? Dacă da ce anume?

Uite benchmark-uri recente C vs. Rust http://benchmarksgam.../u64q/rust.html
Cu o singură excepţie C e mai rapid; excepţie care de altfel o găseşti şi dacă rulezi C vs. Java.
La C++ sunt două excepţii: http://benchmarksgam...=rust&lang2=gpp

Are Rust multe avantaje; dar viteza similară C sau C++ nu e unul dintre ele.

Şi dacă nu ştii să răspunzi la probleme tehnice, nu răspunde; lasă atacurile personale deoparte. E penibil...

 OriginalCopy, on 18 mai 2015 - 08:31, said:

Bine că nu dă nimeni doi bani pe păreri neavizate.
Deci părerea unui lead engineer de la Mozilla care lucreaza la Rust nu e avizată şi părerea lui OriginalCopy de pe forumul Softpedia e avizată...

 aloha2015, on 18 mai 2015 - 10:01, said:

Pai, vezi tu, ai ignorat o bucatica: "while remaining safe".

Imi aduce aminte de trenul de mare viteza chinezesc. (Legenda spune ca) au luat un proiect german, i-au scos unele echipamente de siguranta a pasagerilor ca sa-l faca mai usor, apoi i-au batut pe germani la viteza maxima. Cam asa e si rationamentul tau cu C++.

Comparatia trebuie sa fie intre Rust si C++ cu facilitati de siguranta echivalente Posted Image
N-am ignorat; am zis de la bun început: „Ori îi memory safe ori la fel de rapid ca C; însă nu ambele simultan.”

Nu eu am făcut comparaţia cu C; am subliniat faptul că nu merită comparat cu C din punct de vedere al performanţei, deoarece n-are rost.

Şi încă nu mi-ai răspuns marea inovaţie a Rust: cum asigură memory safety la compile time pentru memoria alocata dinamic...

Edited by m3th0dman, 18 May 2015 - 18:55.


Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate