È "passa per valore" sinonimo di "programmazione funzionale"

2

"passa per valore" sinonimo di "programmazione funzionale"?

  1. Esistono linguaggi di programmazione iterativi che sono (in gran parte) "passano per valore"?
  2. Ci sono linguaggi di programmazione funzionale che sono (in gran parte) "passano per riferimento"?

Grazie.

    
posta uday 18.08.2013 - 06:59
fonte

2 risposte

10

Is "pass by value" synonymous with "functional programming" ?

No, non sono solo "non sinonimi", sono completamente e completamente estranei. Non hanno assolutamente nulla a che fare l'uno con l'altro.

Are there any iterative programming languages that are (largely) "pass by value"?

Suppongo che intenda i linguaggi di programmazione imperativi. Sì, ci sono linguaggi di programmazione imperativi che passano per valore. In effetti, ce ne sono pochissimi che non sono: C, Java, JavaScript, Python, Ruby, praticamente tutti i Lisps, Smalltalk, Self, Newspeak, Io, Ioke, Seph, sono solo alcuni degli esempi. Non sono solo "in gran parte" passano per valore, sono passati per valore. Periodo. Nessuna eccezione, senza se, senza ma.

C ++, C #, Visual Basic.NET, PHP sono passati per valore, è necessario esplicitamente chiedere il passaggio per riferimento, ad es. utilizzando la parola chiave ref in C #.

Are there any functional programming languages that are (largely) "pass by reference"?

La differenza tra passaggio per valore e passaggio per riferimento può essere osservata solo quando il riferimento è mutato. I linguaggi di programmazione funzionale non consentono la mutazione, quindi non è possibile stabilire se un linguaggio di programmazione funzionale passi per valore o passi per riferimento. Gli implementatori linguistici fanno uso di ciò scegliendo una delle due strategie a seconda di quale si ottengono prestazioni migliori per un particolare pezzo di codice.

Ad esempio, gli oggetti di grandi dimensioni verranno passati per riferimento, ma gli oggetti più piccoli in cui l'oggetto stesso è grande come un riferimento o più piccoli (come ad esempio interi in una rappresentazione puntatore codificata) verranno passati per valore.

Si noti inoltre che entrambi passano per valore e passano per riferimento sono strategie di valutazione ansiose, mentre alcuni dei più popolari linguaggi di programmazione funzionale (ad es. Haskell, Frege) hanno una semantica non rigida e quindi vengono solitamente implementati usando una qualche forma di valutazione pigra . Alcuni dei più popolari compilatori Haskell, ad esempio, utilizzano le chiamate in base alla necessità con una condivisione limitata.

    
risposta data 18.08.2013 - 11:47
fonte
3

C è un linguaggio imperativo che passa per valore. Fortran è un linguaggio imperativo passato per riferimento. C # supporta sia la programmazione funzionale (lambda, ecc.) Che il passaggio per riferimento.

Pertanto, la risposta è no , non sono sinonimi.

    
risposta data 18.08.2013 - 08:59
fonte

Leggi altre domande sui tag