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


26

Quindi ora Eclipse ha offerto Xtend e JetBrains offre Kotlin, che sembrano entrambi annacquati nelle versioni di Scala. La mia domanda è: perché? Ho suonato un po 'con la Scala e non è poi così difficile. È solo una reazione alla difficoltà intrinseca del passaggio dall'imperativo al funzionale o c'è qualcos'altro al lavoro qui?


EDIT: scuse. Rileggendo la domanda mentre l'ho postata inizialmente, posso vedere dove suona un po 'come la pesca a traina. Il modo in cui ho formulato la domanda sembrava essere il modo migliore per porre la domanda. Ho visto post di blog sull'effetto "Scala è troppo difficile / Scala è troppo complessa" e anche "Kotlin è un tentativo di fare Scala ma più semplice". Lascerò la frase com'era in origine, ma sinceramente non stavo cercando di trollare.


20
Mi sembra piuttosto bigotto supporre semplicemente che un nuovo linguaggio che abbia una certa somiglianza con la Scala debba essere una "versione annacquata della Scala" scritta da persone per le quali la Scala è troppo dura. È meno probabile che tu ottenga risposte ben ponderate ponendo la domanda in questo modo.
Michael Borgwardt,

8
L'assemblaggio è solo una versione annacquata del codice macchina, giusto?
Ben Brocka,

6
@BenBrocka: No, è isomorfo rispetto al codice macchina;)

4
Scala è fantastica. Per quanto mi riguarda, credo che la gente dovrebbe rinunciare alla necromanzia Java e al reinventare le biciclette (tutte quelle nuove lingue, menzionate e non) e semplicemente usare e migliorare Scala. A PARER MIO.
Ivan,

2
@MichaelBogwardt un punto giusto. Sto basando l'affermazione su ciò che ho visto nella blogosfera. "Scala è troppo difficile" e "Scala è troppo complessa" sembrano essere lamentele relativamente comuni.
Onorio Catenacci,

Risposte:


39

IMHO di qualcuno che ha programmato in Java negli ultimi 7 anni ed essendo il mio linguaggio più forte, trovo che Scala sia piuttosto alieno e non riesco ad abituarmi.

Xtend è più simile a Java ed è stato in grado di scrivere un'applicazione semplice con essa molto più velocemente. Certo, non mi sono concesso abbastanza tempo con Scala, ma certamente capisco perché alcuni potrebbero esserne spenti.

Detto questo, la gente sceglierà un inferno familiare su un paradiso sconosciuto.


19
+1: "la gente sceglierà un inferno familiare su un paradiso sconosciuto".
Giorgio,

18

JetBrains ha una pagina wiki che confronta Scala con Kotlin, e sembrano esserci alcune cose che Kotlin fa e Scala no:

  • Zero-overhead null-safety. Scala ha Option, che è un wrapper sintattico e run-time
  • Cast intelligenti
  • Funzioni di estensione statica. Invece di avvolgere in fase di esecuzione
  • Le funzioni Inline di Kotlin facilitano i salti non locali
  • Modelli di stringhe. Esiste un plug-in di compilazione di terze parti per scala con funzionalità simili: ScalaEnhancedStrings
  • Delegazione di prima classe. Implementato anche tramite plug-in di terze parti: moduli Autoproxy

Quindi chiamare Kotlin un'acqua in fondo alla Scala è probabilmente una semplificazione eccessiva. Per quanto riguarda Xtend, penso che sia indirizzato 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 altro linguaggio "killer Java" che dovresti aggiungere alla tua lista è Ceylon di Red Hat , anche se non ho idea se e come possa essere paragonato a Scala.


13
Il cast automatico sembra spaventoso.
Jonas,

14
L'industria ha queste rivoluzioni cicliche in cui gli sviluppatori passeranno da un estremo e ancora e ancora e ancora. I linguaggi ricchi di funzionalità per i codificatori di potenza erano buoni, quindi gli idioti hanno scritto codici errati e abbiamo scoperto i pericoli in modo che le persone si affollassero alla sicurezza percepita di Java, ora di nuovo ai codificatori di potenza. Guarda come Javascript e browser sono stati buoni, poi sono arrivate le applet e RIA con i plugin del browser erano buoni e Javascript cattivi, poi sono arrivati ​​i moderni framework AJAX e plug-in non sicuri e cattivi, quindi Silverlight è arrivato e la gente ha detto che AJAX era morto, NOW HTML5 è di nuovo voga e plugin! :)
maple_shaft

3
@Jonas Non so nemmeno se sono d'accordo, ma è un fenomeno che ho notato. Certamente ad ogni rivoluzione arriva una soluzione più sofisticata, ma ogni soluzione ha sempre un tallone d'Achille. Risolvere il problema Heel fa sì che alcuni guardino indietro alle precedenti soluzioni di idee, ma nel tempo le persone dimenticano perché quelle vecchie soluzioni sono state abbandonate in origine. Con il passare del tempo, tuttavia, ad ogni rivoluzione, il tallone continua a ridursi. Java + XTend potrebbe non essere sofisticato come Scala, tuttavia i problemi sono più piccoli dell'investimento per passare completamente a una nuova lingua.
maple_shaft

2
@Jonas Beh, solo un'estrema semplificazione dell'evoluzione tecnologica di alto livello si adatterebbe a un commento. Sono d'accordo con maple_shaft però, l'evoluzione tecnologica non hanno un iterativo sensazione .
yannis,

3
@Jonas questi cast non sono automatici ma intelligenti: se guardi dentro vedrai che non è lo stesso: kotlinlang.org/docs/reference/typecasts.html
cy6erGn0m

11

Ho usato Scala come lingua principale per l'ultimo anno (con Java come secondo vicino, entrambi all'interno di una base di codice Java legacy di grandi dimensioni.) Devo ancora cercare funzionalità abbastanza basilari se non li ho usati in un mentre. Certo, puoi scrivere un po 'di Scala rapidamente, ma è un linguaggio estremamente ricco di funzionalità e richiede molto tempo per padroneggiarlo.

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

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

[Modificato per rimuovere la menzione del codice legacy, vedere il commento di seguito.]

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


Potresti per favore elaborare un po 'di più la "parte di lagacy"? Ad esempio, quali metodi intendi per prendere le liste anziché le Seq?
Kiritsuku,

Ho intenzione di modificare il fatto che, dato il riflesso, raramente la libreria Scala standard lo fa. JSONArray prende un elenco, ma la maggior parte dei costruttori no. Indipendentemente da ciò, c'è ancora un pregiudizio nella documentazione relativa agli Elenchi, in particolare dal momento che Programmazione in Scala, 2a edizione, copre solo Scala 2.8, che precede i vettori. E i suoi esempi di codice tendono ad avere costruttori che prendono List dove Seq sarebbe meglio.
David Leppik,

Sì, per 2.10 alcune cose sono migliori ( +:estrattori per esempio). Spero che la programmazione in Scala sarà aggiornata nel prossimo futuro. Per 2.11 alcune cose migliorano ulteriormente. Lo stdlib è già libero dalle deprecazioni e si ridurrà un po '. Forse scala.util.parsingverrà spostato anche al di fuori di stdlib. Vedremo ...
Kiritsuku

1
Dovrei aggiungere che il mio vero problema con Elenchi contro Vettori è che l'aggiunta di elementi a un elenco (ovvero Seq in Scala) è un'operazione molto semplice e ci sono troppi modi equivalenti per farlo, tutti con simboli divertenti che sono difficili da ricorda. Il modo in cui canonica è ::, ::=o +:=che prepend, ma la maggior parte la gente vuole :+=che aggiunge, ma che non è efficiente per una lista.
David Leppik

10

JetBrains ha chiaramente indicato i propri obiettivi per Kotlin :

Vogliamo diventare più produttivi passando a un linguaggio più espressivo. Allo stesso tempo, non possiamo accettare compromessi in termini di interoperabilità Java (la nuova lingua verrà introdotta gradualmente e deve interagire senza problemi con la base di codice esistente) o la velocità di compilazione (la nostra base di codice impiega abbastanza tempo per essere compilata con javac, e non possiamo permetterci di renderlo più lento). La prossima cosa è abbastanza semplice: prevediamo che Kotlin guiderà le vendite di IntelliJ IDEA.


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, il motivo per passare da Java a un'altra lingua è quello di essere più produttivo.

Finora non sono stato più produttivo con Scala. Uno dei motivi è la mancanza di un buon supporto per Scala in Eclipse, il plug-in Scala è male (ad es. Il rientro fallisce) e non ha ancora molte funzioni (ad es. Nessuna "Gerarchia delle chiamate aperte"). Anche il compilatore Scala è lento, questo potrebbe non essere un problema, ma io uso Scala con Play Framework, che compila il codice per ogni richiesta, e lì la velocità del compilatore è importante.


2
Forse non hai imparato abbastanza modi di dire alla Scala. Ho usato Scala per piccoli progetti (strumenti) e sono molto più produttivo in Scala che in Java, anche se ho molta più esperienza in Java (> 10 anni) che in Scala (<2 anni).
Giorgio

4

Non so di Kotlin, ma Scala e Xtend sono due bestie molto diverse.

Contrariamente a quanto si dice, Scala NON è un Java migliore. Scala è un linguaggio molto più caratterizzato rispetto a Java, con la sua sintassi e semantica e il suo pacchetto di librerie di base.

Xtend È un Java migliore. Mantiene la semantica Java e migliora la sua sintassi. Ogni riga di codice Xtend può essere tradotta direttamente in un gruppo di righe di codice java. Non è necessario alcun tempo di esecuzione aggiuntivo.

Penso che entrambi gli approcci siano giusti, sebbene diversi. Non mi piace Scala (come lingua), ma non mi piace avere vasi di Scala aggiunti ai miei progetti. Non riesco a usare Scala correttamente su Android, né (aggiunge problemi di peso e prestazioni). Xtend non ha molte funzionalità, ma per me va bene (vale la pena usarlo rispetto al linguaggio Java) e funziona su ogni piattaforma come se stessi scrivendo direttamente in Java.

Credo che entrambe le lingue coprano nicchie diverse e possano coesistere senza interferire l'una con l'altra. IMHO, Scala è troppo complessa, non aggiunge nulla di nuovo. Se vuoi diventare più funzionale e meno OO, scegli uno dei molti 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 quanto Scala (ricorda molto C #).

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

E il supporto Eclipse è eccezionale ...


... ed è supportato solo in Eclipse. Destra? Ed Eclipse è un inferno ...
Sarge Borsch,

Xtend ha un runtime aggiuntivo. Circa 3MB ho controllato l'ultima volta.
mm2001,

@ mm2001 Sì, ci sono dipendenze: circa 300 Ko per xtend e 2 Mo per guava sul mio piccolo progetto di test ( github.com/pdemanget/examples/tree/master/xtend/message-send ) Ma non è un runtime, ci sono classi addizionali per cose come InputOutput, le annotazioni addizionali. Non toglie il punto principale per me che Scala e Xtend sono 2 lingue molto diverse, come detto in questa risposta.
pdem,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.