2012-05-07 4 views
5

Qual è la differenza tra un'estensione di libreria e di lingua? Specificamente in Scala.Estensione Library vs Language

+1

Cosa intendi per dire * estensione della lingua *? –

risposta

6

Questo vale sia per Scala e per Java, una biblioteca potrebbe essere definita come:

In informatica, una biblioteca è una raccolta di risorse utilizzate per sviluppare software. Questi possono includere codice pre-scritto e subroutine, classi, valori o specifiche del tipo.

Significa che (lo so, lo semplificare un sacco) di una libreria è una raccolta di routine che si useranno nel codice per implementare un algoritmo . Ti salvano per scrivere lo stesso codice ancora e ancora (ad esempio, non è necessario reinventare la ruota ogni volta che devi stampare una stringa per console).

Un'estensione lingua non è il codice che ti chiami (o uso) direttamente dal codice, ma qualcosa che cambierà il modo di scrivere vostri programmi. Può cambiare (e in genere lo fa) la sintassi del linguaggio stesso e spesso è un plug-in per il compilatore. Molte delle funzionalità aggiunte al linguaggio Java sono l'estensione (generici, per esempio).

Per esempio Session-Scala è un estensioni fatte di entrambi:

  • una libreria per gestire la programmazione parallela (codice è possibile chiamare direttamente dal codice).
  • un'estensione di linguaggio: per rendere più chiaro il codice che scrivi (a volte chiamato zucchero sintattico), cambia la sintassi della lingua per rendere più facile l'uso delle sue funzioni di libreria (dovrei dire nice?)

Per un esempio dare un'occhiata a this page.

Detto questo, spesso con Scala un'estensione di lingua non è realmente necessaria (anche se è così facile da scrivere, più che per i linguaggi .NET, ad esempio) a causa della sua sintassi. La prima cosa che mi viene in mente sono gli operatori infissi, ma in generale tutta la sua sintassi per l'invocazione dei metodi rende tutto semplice da utilizzare come DSL senza un DSL.

1

Se per estensione del linguaggio si intende un plug-in del compilatore, quindi può controllare o trasformare il codice sorgente specificato in un altro codice Scala semplice al momento della compilazione. Tuttavia, altri che usano lo stesso codice sorgente originale devono anche avere il plugin del compilatore installato per compilare il codice.

Una libreria, d'altra parte, in Scala può sembrare un'estensione di linguaggio grazie al supporto di Scala per infix notation/suffix notation e symbolic methods. Tuttavia, non viene fatto nulla di speciale in fase di compilazione, anche se naturalmente chiunque compila e quindi esegue lo stesso codice sorgente avrà bisogno di tutte le librerie di riferimento per farlo.

15

This is the Scala language specification. Se è possibile scrivere con la lingua descritta da questa specifica, allora è una libreria . Se si apportano modifiche alla lingua descritta da questo documento che non è possibile scrivere nella lingua stessa, è un'estensione di lingua.

+3

+1 lo adoro, non può essere più conciso! –