Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Masina de copt paine - pareri

Cum reactivez Google Maps?

Conectare tableta X220la Tv

Femeile tinere nu mai vor sa munc...
 La mulți ani @un_dac!

La multi ani de Sfantul Gheorghe&...

Job - Facultate sau certificare

Deadpool & Wolverine (2023)
 sistem hibrid eoliana + panouri +...

Outlook e muta pe Android

Constructie Mun. Iasi. Casa P+1.

Cum mai rezolvati cu chiriasii ra...
 Tastatura si mouse cu baterie int...

AC Gree duce la palpait de becuri

Sfat / recomandare construire aco...

Cablu analog vs digital
 

Rust - de ce este println! macro?

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

#1
0x3F

0x3F

    Junior Member

  • Grup: Members
  • Posts: 224
  • Înscris: 06.01.2015
Am inceput sa invat Rust. Am facut primele 2 exemple din carte. Am aflat ca println! este macro si nu functie. Nu prea inteleg de ce.

Probabil scrierea pe ecran nu se face la fel de simplu ca in C++ sau C (cu o singura linie de cod), iar acel macro de fapt inglobeaza mai multe functii si simplifica lucrurile. Asa ma gandesc, nu stiu daca am dreptate. Daca am dreptate, este acesta singurul motiv?

#2
neur0

neur0

    Guru Member

  • Grup: Senior Members
  • Posts: 26,795
  • Înscris: 01.11.2011
https://github.com/r...st/issues/17190

#3
OriginalCopy

OriginalCopy

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

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
E un macro deoarece doar așa poate face lucruri înainte de compilare, lucruri care în limbajele clasice se fac la runtime.

Nu are legătură cu "mai multe funcții", ci cu analiza statică a codului.

#4
0x3F

0x3F

    Junior Member

  • Grup: Members
  • Posts: 224
  • Înscris: 06.01.2015

View PostOriginalCopy, on 22 mai 2015 - 14:59, said:

Nu are legătură cu "mai multe funcții", ci cu analiza statică a codului.


Sa vad daca am inteles. Ajuta deoarece poti vedea codul detaliat dupa preprocesare, adica lipsit de abstractizari (nu mai e println!, ci instructiunile ce compun acest macro)?

Edited by 0x3F, 22 May 2015 - 15:20.


#5
OriginalCopy

OriginalCopy

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

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Preprocesorul rust e mai avansat decât cel C, primește ca parametru AST-ul, și generează erori dacă ceva nu e în ordine. Erorile sunt generate în timpul preprocesării, nu după, ca în C.

#6
neur0

neur0

    Guru Member

  • Grup: Senior Members
  • Posts: 26,795
  • Înscris: 01.11.2011
E nevoie de macro pentrucă Rust are niște limitări când vine vorba de formatarea stringurilor și Rust nu are capacități avansate de metaprogramare precum are C++ cu template.

#7
OriginalCopy

OriginalCopy

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

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

View Postneur0, on 22 mai 2015 - 15:40, said:

E nevoie de macro pentrucă Rust are niște limitări când vine vorba de formatarea stringurilor și Rust nu are capacități avansate de metaprogramare precum are C++ cu template.

Eu gust trollingul tau, insa el s-ar putea sa nu-si dea seama ca raspunsul tau n-are legatura cu intrebarea lui.

#8
0x3F

0x3F

    Junior Member

  • Grup: Members
  • Posts: 224
  • Înscris: 06.01.2015

View PostOriginalCopy, on 22 mai 2015 - 16:56, said:

Eu gust trollingul tau, insa el s-ar putea sa nu-si dea seama ca raspunsul tau n-are legatura cu intrebarea lui.
Nici nu am inteles raspunsul lui.

#9
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012
Seamana surprinzator cu un post de-aici:
https://github.com/r...st/issues/17190

Quote

@oconnor663: Rust doesn't have compile-time function execution and variadic generics so it can't do the compile-time format string checking and code expansion without it. Macros are used to work around missing features, and in cases where they are very commonly used it would be better to improve the underlying language.
Sincer... pare cam dubios (desi formatarea din C/printf este si ea dubioasa, si unsafe). OK, limbajul nu suporta functii cu numar variabil de parametri, dar este dependinta de macro-uri o solutie buna?

#10
OriginalCopy

OriginalCopy

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

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

View PostTS030, on 22 mai 2015 - 18:05, said:

Seamana surprinzator cu un post de-aici:
https://github.com/r...st/issues/17190

Sincer... pare cam dubios (desi formatarea din C/printf este si ea dubioasa, si unsafe). OK, limbajul nu suporta functii cu numar variabil de parametri, dar este dependinta de macro-uri o solutie buna?
Rust are functii variadice, dar doar cand interactioneaza cu C (deocamdata).

Sa presupunem ca ar avea functii variadice. Cum ar face asta apelul la println sigur? Ca macro, poate sa analizeze codul inainte de compilare si daca e in neregula, sa nu-i dea voie.

Decat cu gaurile de securitate din C/C++, eu unul prefer asa.

#11
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012
Ce spun eu este ca printf! nu poate fi o functie, fara a accepta numar variabil de parametri. Nu ca ar trebui sa fie, sau ca astfel s-ar asigura corectitudinea codului.
Desigur, prefer erorile de compilare celor de runtime ;)

P.S. printf()-ul si functiile din aceeasi familie din C sunt evident unsafe - suficient pentru a avea propria categorie de vulnerabilitati. Functioneaza, cu atentie si analiza statica de cod, insa n-o sa ma vezi zicand vreodata ca Rust sau oricare alt limbaj ar trebui sa implementeze o solutie similara ;)
Pe de alta parte, nu poti sa judeci un limbaj dupa niste functii de librarie introduse prin anii '70.

Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

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