2016-02-03 11 views
5

Quando si utilizza Scala per la prima volta in un IDE (Idea), ho notato che il completamento automatico è notevolmente più lento, quindi durante la codifica di Java. Anche se parte del rallentamento può essere dovuto all'immaturità relativa dell'ecosistema degli utensili di scala al momento, sospetto che parte di questo rallentamento possa essere una proprietà intrinseca della complessità algoritmica del codice di analisi che richiede l'inferenza di tipo.L'inferenza del tipo rallenta il completamento automatico nell'IDE

java:

MyType type; type.doSomething() //Class of type already known 

Scala:

val type = new MyType; type.doSomething() //Class of type must be inferred or cached 

Sebbene lingue che hanno inferenza di tipo sono molto più succinta (e quindi più facile da leggere), fa questo vada a scapito di utensili più lento ? C'è un compromesso intrinseco?

risposta

1

Sì.

In una certa misura, Scala è inevitabilmente più lento. Uno dei costi per aver dedotto tipi, impliciti e zucchero sintattico è il tempo di compilazione. I tempi esatti possono essere migliorati, ma Scala verrà sempre compilato più lentamente rispetto a ex.java.

Personalmente, faccio volentieri questo scambio. Avere una base di codice pulita e leggibile è molto più importante per me dei tempi di compilazione (che sono spesso inferiori a 1 sec se si utilizza la compilazione incrementale).

+0

Grazie per il tuo contributo. La mia domanda è più diretta sull'attrezzatura, che so è legata al tempo di compilazione, ma il completamento automatico può anche essere facilitato da una compilazione semi-elaborata (lexing senza generazione di byte code) e analisi statica. Quindi suppongo che quello che sto chiedendo è se l'inferenza di tipo impedisce l'utilizzo di questo tipo di ottimizzazione delle prestazioni, con conseguente strumenti più lenti. – murungu

+0

Immagino di non essere abbastanza esperto per rispondere. Non conosco gli interni di Scala (ed eclipse e intellij) per capire se un tipo esplicito aiuta il completamento automatico. Poi di nuovo, nota che un IDE Scala tipicamente cerca sia i metodi normali sia i metodi _ esplicitamente_ disponibili. Vedi, ad esempio, "abcde" .take (3) (il metodo 'take' è invocato su' String'). – VasyaNovikov

Problemi correlati