Mengapa upaya ini untuk mempermudah Scala dengan Xtend dan Kotlin? [Tutup]

26

Jadi sekarang Eclipse telah menawarkan Xtend dan JetBrains menawarkan Kotlin - yang keduanya tampaknya dipermudah versi Scala. Pertanyaan saya adalah mengapa? Saya telah bermain dengan Scala sedikit dan itu tidak bahwa sulit. Apakah ini hanya reaksi terhadap kesulitan yang melekat dari lompatan dari keharusan ke fungsional atau apakah ada sesuatu yang bekerja di sini?


EDIT: Permintaan Maaf. Membaca ulang pertanyaan seperti yang saya posting awalnya saya bisa melihat di mana itu terdengar seperti trolling Cara saya mengutarakan pertanyaan itu sepertinya merupakan cara terbaik untuk mengajukan pertanyaan. Saya telah melihat posting blog dengan efek "Scala terlalu keras / Scala terlalu kompleks" dan juga "Kotlin adalah upaya untuk melakukan Scala tetapi lebih sederhana". Saya akan meninggalkan frasa seperti aslinya tetapi saya sejujurnya tidak berusaha untuk menjebak.

Onorio Catenacci
sumber
20
Bagiku cukup fanatik untuk hanya berasumsi bahwa bahasa baru yang memiliki beberapa kesamaan dengan Scala haruslah "versi Scala yang dipermudah" yang ditulis oleh orang-orang yang menganggap Scala terlalu keras. Anda cenderung mendapatkan jawaban yang dipertimbangkan dengan mengajukan pertanyaan seperti itu.
Michael Borgwardt
8
Assembly hanyalah versi sederhana dari kode mesin, kan?
Ben Brocka
6
@ BenBrocka: Tidak, itu isomorfik untuk kode mesin;)
4
Scala bagus. Sedangkan bagi saya, saya percaya orang-orang harus menyerahkan necromancy dan sepeda Java reinventing (semua bahasa baru, disebutkan dan tidak) dan hanya menggunakan dan meningkatkan Scala. MENURUT OPINI SAYA.
Ivan
2
@MichaelBogwardt poin yang adil. Saya mendasarkan pernyataan pada apa yang saya lihat di sekitar blogosphere. "Scala terlalu sulit" dan "Scala terlalu rumit" tampaknya merupakan keluhan yang relatif umum.
Onorio Catenacci

Jawaban:

39

IMHO dari seseorang pemrograman di Jawa selama 7 tahun terakhir dan menjadi bahasa terkuat saya, saya menemukan Scala sangat asing dan saya mengalami kesulitan membiasakan diri dengannya.

Xtend terasa lebih seperti Java dan mampu menulis aplikasi sederhana dengan itu lebih cepat. Memang saya tidak memberi diri saya cukup waktu dengan Scala, tetapi saya tentu mengerti mengapa beberapa orang mungkin dimatikan olehnya.

Dengan itu dikatakan, orang akan memilih neraka akrab dari surga asing.

maple_shaft
sumber
19
+1: "orang akan memilih neraka yang dikenal daripada surga yang tidak dikenal".
Giorgio
18

JetBrains memiliki halaman wiki yang membandingkan Scala dengan Kotlin, dan tampaknya ada beberapa hal yang tidak dilakukan oleh Kotlin dan Scala:

  • Zero-overhead null-safety. Scala memiliki Opsi, yang merupakan pembungkus sintaksis dan run-time
  • Gips cerdas
  • Fungsi ekstensi statis. Alih-alih membungkus saat runtime
  • Fungsi Inline Kotlin memfasilitasi lompatan nonlokal
  • Templat string. Ada plugin kompiler pihak ke-3 untuk scala dengan fungsi serupa: ScalaEnhancedStrings
  • Delegasi kelas satu. Juga diterapkan melalui plugin pihak ke-3: Modul Autoproxy

Jadi menyebut Kotlin sebagai air di Scala mungkin merupakan penyederhanaan yang berlebihan. Adapun Xtend, saya pikir itu menargetkan sebagian besar pengguna Xtext, daripada audiens yang lebih luas. Perbedaan utama dengan Scala adalah Xtend mengkompilasi ke Java daripada bytecode.

Bahasa "Java killer" lain yang harus Anda tambahkan ke daftar Anda adalah Ceylon Red Hat , meskipun saya tidak tahu apakah dan bagaimana cara membandingkannya dengan Scala.

yannis
sumber
13
Gips otomatis terdengar menakutkan.
Jonas
14
Industri memiliki revolusi siklus di mana pengembang akan pergi dari satu ekstrem dan kembali lagi dan lagi. Bahasa kaya fitur coder yang bagus, maka para idiot menulis kode yang buruk dan kami menemukan bahaya sehingga orang berbondong-bondong ke Jawa dianggap keselamatan, sekarang kembali lagi ke power coders. Lihatlah bagaimana Javascript dan browser berbasis baik, lalu applet datang dan RIA dengan plugins browser baik dan Javascript buruk, maka kerangka kerja AJAX modern datang dan plugins tidak aman dan buruk, lalu Silverlight datang dan orang-orang mengatakan AJAX sudah mati, SEKARANG HTML5 adalah mode dan plugin buruk lagi! :)
maple_shaft
3
@Jonas Saya bahkan tidak tahu apakah saya setuju dengan itu, tetapi ini adalah fenomena yang saya perhatikan. Tentu dengan setiap revolusi datang solusi yang lebih canggih, namun setiap solusi selalu memiliki Tumit Achilles. Memecahkan masalah Tumit membuat beberapa orang melihat ke belakang pada solusi sebelumnya untuk ide, tetapi seiring waktu orang lupa mengapa solusi lama itu ditinggalkan pada awalnya. Namun seiring waktu, dengan setiap revolusi, Tumit terus semakin kecil. Java + XTend mungkin tidak secanggih Scala, namun masalahnya lebih kecil dari investasi untuk beralih sepenuhnya ke bahasa baru.
maple_shaft
2
@Jonas Yah, hanya penyederhanaan tingkat tinggi yang berlebihan dari evolusi teknologi yang sesuai dengan komentar. Saya setuju dengan maple_shaft meskipun, evolusi teknologi tidak memiliki berulang nuansa .
yannis
3
@Jonas para pemain ini tidak otomatis tetapi pemain cerdas: jika Anda melihat Anda akan melihat itu tidak sama: kotlinlang.org/docs/reference/typecasts.html
cy6erGn0m
11

Saya telah menggunakan Scala sebagai bahasa utama saya untuk tahun lalu (dengan Java sebagai dekat kedua, keduanya dalam basis kode Java warisan besar.) Saya masih harus mencari fitur yang cukup mendasar jika saya belum menggunakannya dalam sementara. Tentu, Anda dapat menulis beberapa Scala dengan cepat, tetapi ini adalah bahasa yang sangat kaya fitur, dan perlu waktu lama untuk dikuasai.

Terlebih lagi, kerumitannya bukan hanya masalah bagi manusia, tetapi juga untuk IDE dan kompiler. Baik Celyon dan Kotlin mengkompilasi langsung ke JavaScript yang cukup bersih. Scala dapat menghasilkan JavaScript, melalui GWT, meskipun untuk mencapai sana rumit dan output GWT tidak dapat dibaca atau dirancang untuk bermain dengan baik dengan JavaScript eksternal atau HTML.

Saya jelas lebih produktif di Scala daripada Java, dan kodenya lebih ringkas dan dapat dibaca (begitu Anda tahu sedikit Scala.) Tetapi kompleksitasnya membuat saya ragu untuk merekomendasikannya kepada orang lain. Bahasa dengan 20% kompleksitas tetapi 80% kapabilitas akan menjadi alternatif yang disambut baik.

[Diedit untuk menghapus penyebutan kode lawas, lihat komentar di bawah.]

[Adendum 2017: Scala sekarang mendukung JavaScript sebagai target build, sementara Kotlin terus menambahkan fitur yang masuk akal untuk penggantian Java / Groovy / JavaScript yang mirip Scala. Mereka sekarang menjadi bahasa yang lebih khas daripada ketika saya pertama kali menulis ini.]

David Leppik
sumber
Bisakah Anda menjelaskan sedikit "bagian lagacy"? Misalnya, metode apa yang Anda maksud yang mengambil daftar daripada seqs?
kiritsuku
Saya akan mengedit itu, karena setelah refleksi, perpustakaan Scala standar sebenarnya jarang melakukan itu. JSONArray mengambil Daftar, tetapi sebagian besar konstruktor tidak. Apapun, masih ada bias dalam dokumentasi terhadap Daftar, terutama karena Pemrograman di Scala, Edisi ke-2, hanya mencakup Scala 2.8, yang mendahului Vektor. Dan contoh kode tersebut cenderung memiliki konstruktor yang mengambil Daftar di mana Seq akan lebih baik.
David Leppik
Ya, untuk 2.10 beberapa hal lebih baik ( +:ekstraktor misalnya). Saya harap Pemrograman dalam Scala akan diperbarui dalam waktu dekat. Untuk 2.11 beberapa hal meningkatkan lebih lanjut. Stdlib sudah dibebaskan dari penghinaan dan juga akan menyusut sedikit. Mungkin scala.util.parsingakan dipindahkan di luar stdlib juga. Kita akan melihat ...
kiritsuku
1
Saya harus menambahkan bahwa masalah saya yang sebenarnya dengan Daftar vs Vektor adalah bahwa menambahkan item ke daftar (yaitu Seq di Scala) adalah operasi yang sangat dasar, dan ada terlalu banyak cara yang setara untuk melakukannya, semua dengan simbol lucu yang sulit untuk ingat. Cara kanonik adalah ::, ::=atau +:=mana yang lebih dulu, tetapi kebanyakan orang menginginkan :+=yang ditambahkan, tetapi itu tidak efisien untuk suatu Daftar.
David Leppik
10

JetBrains dengan sangat jelas menyatakan tujuan mereka untuk Kotlin :

Kami ingin menjadi lebih produktif dengan beralih ke bahasa yang lebih ekspresif. Pada saat yang sama, kami tidak dapat menerima kompromi dalam hal interoperabilitas Java (bahasa baru akan diperkenalkan secara bertahap, dan perlu diintegrasikan dengan lancar dengan basis kode yang ada) atau kecepatan kompilasi (basis kode kami membutuhkan waktu yang cukup lama untuk dikompilasi dengan javac, dan kami tidak mampu membuatnya lebih lambat). Hal berikutnya juga cukup mudah: kami berharap Kotlin akan mendorong penjualan IntelliJ IDEA.

Michael Borgwardt
sumber
8

Saya telah menggunakan Scala beberapa bulan di Eclipse with Play Framework. Saya suka bahasanya tetapi ada juga hal-hal yang tidak saya sukai.

Bagi saya, alasan untuk beralih dari Jawa ke bahasa lain adalah untuk menjadi lebih produktif.

Sejauh ini saya belum lebih produktif dengan Scala. Salah satu alasannya adalah kurangnya dukungan yang baik untuk Scala di Eclipse, plugin Scala buruk (misalnya lekukan gagal) dan belum memiliki banyak fungsi (misalnya tidak ada "Open Call Hierarchy"). Kompilator Scala juga lambat, ini mungkin tidak menjadi masalah, tapi saya menggunakan Scala dengan Play Framework, yang mengkompilasi kode untuk setiap permintaan, dan di sana kecepatan kompilator penting.

Jonas
sumber
2
Mungkin Anda belum cukup belajar idiom Scala. Saya telah menggunakan Scala untuk proyek-proyek kecil (alat) dan saya jauh lebih produktif di Scala daripada di Jawa, meskipun saya memiliki lebih banyak pengalaman di Jawa (> 10 tahun) daripada di Scala (<2 tahun).
Giorgio
4

Tidak tahu tentang Kotlin, tetapi Scala dan Xtend adalah dua binatang yang sangat berbeda.

Berlawanan dengan perkataan umum, Scala BUKAN Java yang lebih baik. Scala lebih banyak menampilkan bahasa daripada Java, dengan sintaks dan semantiknya sendiri, dan paket pustaka basisnya sendiri.

Xtend ADALAH Java yang lebih baik. Itu membuat Java semantik dan meningkatkan sintaksisnya. Setiap baris kode Xtend dapat langsung diterjemahkan ke sekelompok baris kode java. Tidak ada runtime tambahan.

Saya pikir kedua pendekatan itu benar, walaupun berbeda. Saya tidak suka Scala (sebagai bahasa), tetapi tidak suka memiliki botol Scala ditambahkan ke proyek saya. Saya juga tidak bisa menggunakan Scala di Android (ini menambah masalah berat dan kinerja). Xtend tidak sebanyak yang ditampilkan, tetapi tidak masalah bagi saya (lebih baik menggunakannya daripada bahasa Jawa) dan berfungsi pada setiap platform seolah-olah saya menulis langsung di Jawa.

Saya percaya kedua bahasa tersebut membahas ceruk yang berbeda dan dapat hidup berdampingan tanpa saling mengganggu satu sama lain. IMHO, Scala terlalu rumit, tidak ada yang baru. Jika Anda ingin lebih fungsional dan kurang OO, cukup pilih salah satu dari banyak bahasa fungsional yang lebih sederhana, seperti Clojure atau JHaskell. Jika Anda hanya ingin Java dengan beberapa sintaks yang lebih baik dan sedikit pemrograman fungsional, Fantom akan sama hebatnya dengan Scala (ini menyerupai banyak C #).

Tapi saya menemukan Xtend berada di titik manis di antara semua bahasa itu. Itu menambahkan semua pola sintaksis yang saya inginkan untuk Jawa, menjaga bagian-bagian yang baik dari Jawa (semantiknya). Pikirkan sebagai Coffescript untuk Java.

Dan dukungan Eclipse luar biasa ...

Ivan Hernandez
sumber
... dan itu hanya didukung di Eclipse. Kanan? Dan Eclipse adalah neraka ...
Sarge Borsch
Xtend memang memiliki runtime tambahan. Tentang 3MB terakhir saya periksa.
mm2001
@ mm2001 Ya ada dependensi: sekitar 300 Ko untuk xtend dan 2 Mo untuk jambu pada proyek uji kecil saya ( github.com/pdemanget/examples/tree/master/xtend/message-send ) Tapi itu bukan runtime, ini adalah kelas tambahan untuk hal-hal seperti InputOutput, penjelasan tambahan. Itu tidak menghilangkan poin utama bagi saya bahwa Scala dan Xtend adalah 2 bahasa yang sangat berbeda seperti yang dikatakan dalam jawaban ini.
pdem