Quando e dove inserire annotazioni di tipo nel codice Clojure? Ovviamente quando la prestazione conta. Ma ci sono delle regole in base alle quali puoi vivere di quando (solo quando fai Java Interop?) E dove aggiungerle (argomenti di definizione della funzione)?Quando e dove inserisci annotazioni di tipo nel codice Clojure?
risposta
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:
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.
+1 Questo è un grande articolo. –
404 - l'articolo sembra scomparso ora :( – jocull
[wayback machine] (https://web.archive.org/web/20100403083120/http://www.bestinclass.dk/index.php/2010/03/ functional-fluid-dynamics-in-clojure /) al salvataggio! –
- 1. Rails: dove inserisci il codice non di modello?
- 2. Inserisci codice HTML grezzo nel componente Elm
- 3. Incorporamento di oggetti arbitrari nel codice Clojure
- 4. Inserisci il codice Excel-VBA nel modulo o nel foglio?
- 5. SQLite Inserisci o Sostituisci Dove
- 6. Dove sono le annotazioni JDBC4?
- 7. Semplificare le annotazioni di tipo
- 8. Java Generics Inserisci Codice di cancellazione byte
- 9. Inserisci immagine nel database
- 10. Inserisci elemento nel flusso
- 11. Generazione di codice in Clojure
- 12. Quando usare "se" e "quando" in Clojure?
- 13. Inserisci CSS e JavaScript nei file o nel codice HTML principale?
- 14. C#, Ninject: dove inserisci il kernel e i tuoi moduli?
- 15. stile codice con annotazioni
- 16. Inserisci Gridster nel modello WordPress
- 17. Inserisci dove non esiste, senza chiave primaria
- 18. Annotazioni del tipo di flusso e origine JavaScript valida
- 19. annotazioni di tipo richieste nel contesto di tipi associati e iteratori
- 20. SQL Server 2014 Inserisci dove NON IN
- 21. Tipo annotazioni in Elm REPL
- 22. Quando e dove viene inizializzata/memorizzata la stringa nel codice sorgente Java?
- 23. Differenza nel Clojure tra l'uso e richiedere
- 24. Curl Inserisci richiesta in codice pycurl
- 25. Scala tipo alias per le annotazioni
- 26. Inserisci immagine nel multicell TCPDF
- 27. Buoni esempi di codice Clojure?
- 28. Dove si trova Model.py nel codice sorgente di Django?
- 29. Quando prendere RuntimeExceptions nel codice?
- 30. Diagrammi interattivi e dinamici/grafici nel clojure
cos'è un membro statico in questo contesto? – johnbakers