Perché questi tentativi di abbattere Scala con Xtend e Kotlin? [chiuso]

26

Quindi ora Eclipse ha offerto Xtend e JetBrains sta offrendo Kotlin - entrambe le versioni sembrano essere state ridotte di Scala. La mia domanda è perché? Ho suonato un po 'con Scala e non è quello difficile. È solo una reazione alla difficoltà intrinseca del salto da imperativo a funzionale o c'è qualcos'altro al lavoro qui?

EDIT: scuse. Rileggendo la domanda come originariamente postata, posso vedere dove sembra un po 'trolling. Il modo in cui ho formulato la domanda mi è sembrato il modo migliore per porre la domanda. Ho visto blog postings sull'effetto "Scala è troppo difficile / Scala è troppo complessa" e anche "Kotlin è un tentativo di fare Scala ma più semplice". Lascerò il fraseggio com'era in origine ma sinceramente non stavo cercando di trollare.

    
posta Onorio Catenacci 08.11.2011 - 13:01
fonte

6 risposte

39

IMHO da qualcuno che ha programmato in Java negli ultimi 7 anni ed essendo il mio linguaggio più strong, trovo che Scala è piuttosto alieno e sto facendo fatica ad abituarmi ad esso.

Xtend si sente più simile a Java ed è stato in grado di scrivere una semplice applicazione con molto più rapidamente. Certo, non mi sono concesso abbastanza tempo con Scala, ma certamente capisco perché alcuni potrebbero essere spenti.

Detto questo, le persone sceglieranno un inferno familiare su un paradiso sconosciuto.

    
risposta data 08.11.2011 - 13:35
fonte
18

JetBrains ha una pagina wiki che confronta Scala con Kotlin, e sembra che ci siano pochi cose che Kotlin fa e Scala no:

  • Zero-overhead null-safety. Scala has Option, which is a syntactic and run-time wrapper
  • Smart casts
  • Static extension functions. Instead of wrapping at runtime
  • Kotlin's Inline functions facilitate Nonlocal jumps
  • String templates. There's 3rd party compiler plugin for scala with similar functionality: ScalaEnhancedStrings
  • First-class delegation. Also implemented via 3rd party plugin: Autoproxy Modules

Quindi definire Kotlin come un'acqua giù Scala è probabilmente una semplificazione eccessiva. Per quanto riguarda Xtend, penso che sia rivolto principalmente agli utenti Xtext, piuttosto che a un pubblico più ampio. Una grande differenza rispetto a Scala è che Xtend si compila in Java piuttosto che in bytecode.

Un'altra lingua "Java killer" che dovresti aggiungere alla tua lista è Red Hat's Ceylon , anche se non ho idea se e come si confronta con Scala.

    
risposta data 08.11.2011 - 13:33
fonte
11

Ho usato Scala come lingua principale per l'ultimo anno (con Java come secondo di chiusura, entrambi all'interno di un grande codice base legacy Java.) I ancora devo cercare abbastanza semplice caratteristiche se non li ho usati in un istante. Certo, puoi scrivere velocemente qualche Scala, ma è un linguaggio estremamente ricco di funzionalità e richiede molto tempo per essere controllato.

Inoltre, la sua complessità non è solo un problema per gli esseri umani, ma anche per IDE e compilatori. Sia Celyon che Kotlin compilano direttamente JavaScript abbastanza pulito. Scala può produrre JavaScript, tramite GWT, anche se arrivarci è complicato e l'output GWT non è né leggibile né progettato per giocare bene con JavaScript o HTML esterni.

Sono decisamente più produttivo in Scala che in Java, e il codice è più compatto e leggibile (una volta che conosci un po 'di Scala). Ma la sua complessità mi esita a raccomandarlo ad altri. Una lingua con il 20% della complessità, ma l'80% della capacità sarebbe un'alternativa benvenuta.

[Modificato per rimuovere la menzione del codice legacy, vedi commento sotto.]

[Aggiunta al 2017: Scala ora supporta JavaScript come target di build, mentre Kotlin ha continuato ad aggiungere funzionalità che hanno senso per una sostituzione Java / Groovy / JavaScript simile a Scala. Ora sono lingue più distintive di quando l'ho scritto per la prima volta.]

    
risposta data 28.02.2013 - 19:53
fonte
10

JetBrains ha chiaramente ha dichiarato i propri obiettivi per Kotlin :

We want to become more productive by switching to a more expressive language. At the same time, we cannot accept compromises in terms of either Java interoperability (the new language is going to be introduced gradually, and needs to interoperate smoothly with the existing code base) or compilation speed (our code base takes long enough to compile with javac, and we cannot afford making it any slower). The next thing is also fairly straightforward: we expect Kotlin to drive the sales of IntelliJ IDEA.

    
risposta data 08.11.2011 - 13:32
fonte
8

Ho usato Scala alcuni mesi in Eclipse con Play Framework. Mi piace la lingua ma ci sono anche cose che non mi piacciono.

Per me, la ragione per passare da Java a un'altra lingua è essere più produttivi.

Finora non sono stato più produttivo con Scala. Una ragione è la mancanza di un buon supporto per Scala in Eclipse, il plug-in Scala non è valido (ad esempio, il rientro non riesce) e non ha ancora molte funzioni (ad esempio no "Open Call Hierarchy"). Anche il compilatore Scala è lento, questo potrebbe non essere un problema, ma uso Scala con Play Framework, che compila il codice per ogni richiesta, e lì la velocità del compilatore è importante.

    
risposta data 08.11.2011 - 13:40
fonte
4

Non so nulla su Kotlin, ma Scala e Xtend sono due animali molto diversi.

Contrariamente ai detti più comuni, Scala NON è un Java migliore. Scala è un linguaggio molto più dettagliato di Java, con una propria sintassi e semantica e un proprio pacchetto di librerie di base.

Xtend È un Java migliore. Mantiene la semantica di Java e ne migliora la sintassi. Ogni riga del codice Xtend può essere direttamente tradotta in un gruppo di linee di codice java. Non c'è nessun runtime aggiuntivo, neanche.

Penso che entrambi gli approcci siano giusti, anche se diversi. Non mi piace Scala (come lingua), ma non mi piace avere i barattoli di Scala aggiunti ai miei progetti. Non riesco a utilizzare correttamente Scala in Android, nemmeno (aggiunge peso e problemi di prestazioni). Xtend non è tanto descritto, ma è Ok per me (vale la pena usarlo più del linguaggio Java) e funziona su ogni piattaforma come se scrivessi direttamente in Java.

Credo che entrambe le lingue coprano diverse nicchie e possano coesistere senza interferire l'una con l'altra. IMHO, Scala è semplicemente troppo complesso, aggiungendo nulla di nuovo. Se vuoi essere più funzionale e meno OO, scegli uno dei tanti linguaggi funzionali più semplici, come Clojure o JHaskell. Se vuoi solo Java con una sintassi migliore e un po 'di programmazione funzionale, Fantom sarebbe fantastico come Scala (assomiglia molto a C #).

Ma trovo che Xtend sia in un punto delicato tra tutte quelle lingue. Aggiunge tutti quei pattern sintattici che volevo per Java, mantenendo le parti buone di Java (la sua semantica). Pensaci come Coffescript per Java.

E il supporto di Eclipse è superbo ...

    
risposta data 20.06.2013 - 04:13
fonte

Leggi altre domande sui tag