2010-04-02 13 views

risposta

15

Il motivo imperativo che I "m consapevoli è prestazioni. Digitare accennando a clojure rimuove riflessione, che può rallentare le prestazioni. Così mi metterei tipo accenni nelle funzioni che ho misurata essere prestazioni critiche.

C'è un description nella sezione Java interoperabilità a clojure.org Tra le osservazioni:..

Clojure supporta l'uso di tipo suggerimenti per aiutare il compilatore ad evitare riflessione in aree di performance-critical di codice Normalmente, si dovrebbe evitare l'uso di suggerimenti tipo finché non si verifica un collo di bottiglia prestazionale noto.

... Una volta che un suggerimento tipo è stato posizionato su un identificatore o un'espressione, il compilatore proverà a risolvere qualsiasi chiamata ai metodi in quel momento in fase di compilazione. Inoltre, il compilatore traccerà l'utilizzo di qualsiasi valore restituito e inferirà i tipi per il loro uso e così via, quindi sono necessari pochissimi suggerimenti per ottenere una serie di chiamate risolte completamente in fase di compilazione. Nota che i suggerimenti di tipo non sono necessari per i membri statici (o i loro valori di ritorno!) Poiché il compilatore ha sempre il tipo di statica.

È sempre possibile attivare l'avviso sul flag di riflessione per vedere dove viene chiamato il riflesso e, di conseguenza, dove i suggerimenti sul tipo potrebbero essere utili.

EDIT:

quanto riguarda la tua domanda "Solo per Java interoperabilità?" --no. I suggerimenti di tipo saranno utili anche in un'applicazione di clojura pura. La questione della riflessione che rallenta le prestazioni è un dato di fatto sulla JVM ed è un problema che i linguaggi dinamici devono affrontare in generale.

Per quanto riguarda dove tipo suggerimenti possono essere posizionati, da clojure.org:

Possono essere immessi sul parametri di funzione, i nomi di lasciare-bound, i nomi var (quando definito), e le espressioni:

+0

cos'è un membro statico in questo contesto? – johnbakers

8

So che hai già accettato una risposta e questa non è una risposta diretta alla tua domanda, ma Lau ha appena pubblicato un articolo molto bello su Functional Fluid Dynamics in Clojure che è abbastanza istruttivo quando si tratta di suggerimento di tipo per motivi di prestazioni.

+0

+1 Questo è un grande articolo. –

+0

404 - l'articolo sembra scomparso ora :( – jocull

+1

[wayback machine] (https://web.archive.org/web/20100403083120/http://www.bestinclass.dk/index.php/2010/03/ functional-fluid-dynamics-in-clojure /) al salvataggio! –