estratègia utilitzada pels llenguatges de programació per determinar dues coses: quan s'han d'avaluar els arguments d'una trucada de funció i quin tipus de valor passar a la funció From Wikipedia, the free encyclopedia
En un llenguatge de programació, una estratègia d'avaluació és un conjunt de regles per avaluar expressions. El terme s'utilitza sovint per referir-se a la noció més específica d'una estratègia de pas de paràmetres que defineix el tipus de valor que es passa a la funció per a cada paràmetre (l'estratègia d'enllaç) i si cal avaluar els paràmetres d'una crida de funció, i si és així, en quin ordre (l'ordre d'avaluació). La noció d'estratègia de reducció és diferent, tot i que alguns autors combinen els dos termes i la definició de cada terme no està àmpliament d'acord.[1][2][3][4][5][6]
Per il·lustrar-ho, l'execució d'una crida a una funció f(a,b)
pot avaluar primer els arguments a
i b
, emmagatzemar els resultats en referències o ubicacions de memòria ref_a
i ref_b
, i després avaluar el cos de la funció amb aquestes referències passades. Això li dona a la funció la possibilitat de buscar els valors dels arguments, modificar-los mitjançant l'assignació com si fossin variables locals i retornar valors mitjançant les referències. Aquesta és l'estratègia d'avaluació de crida per referència.[7]
L'estratègia d'avaluació forma part de la semàntica de la definició del llenguatge de programació. Alguns llenguatges, com PureScript, tenen variants amb diferents estratègies d'avaluació. Alguns llenguatges declaratius, com Datalog, admeten múltiples estratègies d'avaluació. Alguns idiomes defineixen una convenció de crida.
Es tracta d'una taula d'estratègies d'avaluació i idiomes representatius per any introduït. Les llengües representatives s'enumeren per ordre cronològic, començant per la o les llengües que van introduir l'estratègia i seguides per les llengües destacades que utilitzen l'estratègia.[8] :434
Estratègia d'avaluació | Llengües representatives | Primer any introduït |
---|---|---|
crida per referència | FORTRAN II, PL/I | 1958 |
crida per valor | ALGOL, C, Esquema, MATLAB [9] | 1960 |
crida pel nom | ALGOL 60, Simula | 1960 |
crida per còpia-restauració | Fortran IV, Ada [10] | 1962 |
crida per necessitat | SASL,[11] Haskell, R [12] | 1971 |
crida compartint | CLU, Java, Python, Ruby, Julia | 1974 [13] |
paràmetres de crida per referència | C++, PHP,[14] C#,[15] Visual Basic . NET [16] | 1985 [17] |
crida per referència a const | C++, C | 1985 [17] |
En la crida per valor, el valor avaluat de l'expressió argument està lligat a la variable corresponent de la funció (freqüentment copiant el valor en una nova regió de memòria). Si la funció o procediment és capaç d'assignar valors als seus paràmetres, només s'assigna la seva variable local, és a dir, qualsevol cosa que es passi a una crida de funció no canvia en l'àmbit de la persona que crida quan la funció torna.
La crida per referència (o passa per referència) és una estratègia d'avaluació on un paràmetre està lligat a una referència implícita a la variable utilitzada com a argument, en lloc d'una còpia del seu valor.
La crida per referència es pot simular en llenguatges que utilitzen crida per valor i no admeten exactament la crida per referència, fent ús de referències (objectes que fan referència a altres objectes), com ara punters (objectes que representen les adreces de memòria d'altres objectes) . Llenguatges com C, ML i Rust utilitzen aquesta tècnica. No es tracta d'una estratègia d'avaluació separada —el llenguatge crida per valor—, però de vegades s'anomena "crida per adreça" o "pass per adreça". En ML, les referències són segures per a tipus i memòria, de manera similar a Rust.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.