Bu nedenler Scala'yı Xtend ve Kotlin ile sulamaya çalışıyor? [kapalı]


26

Şimdi Eclipse Xtend'e teklif etti ve JetBrains, her ikisi de Scala'nın sulandırılmış gibi göründüğü Kotlin'i sunuyor. Benim sorum neden? Scala ile biraz oynadım ve o kadar da zor değil . Bu sadece zorunluluktan işlevselliğe sıçramanın doğasında yaşanan zorluklara bir tepki mi, yoksa işte başka bir şey var mı?


EDIT: Özür dilerim. Soruyu orjinal olarak söylediğim gibi tekrar okurken nerede trol gibi göründüğünü görebiliyorum. Soruyu ifade etme yöntemim, soruyu sormanın en iyi yolu gibi görünüyordu. "Scala çok zor / Scala çok karmaşık" ve ayrıca "Kotlin Scala'yı yapma çabası ama daha basit" efekti için blog gönderileri gördüm. Cümlenin aslını olduğu gibi bırakacağım ama dürüst olmak gerekirse troll yapmaya çalışmıyordum.


20
Scala'ya biraz benzerliği olan yeni bir dilin, Scala'nın zor olduğu kişiler tarafından yazılmış "Scala'nın sulandırılmış bir versiyonu" olması gerektiğini varsaymak bana oldukça önem veriyor. Soruyu bu şekilde ortaya koyarak iyi düşünülmüş cevaplar almanız daha az olasıdır.
Michael Borgwardt

8
Montaj sadece makine kodunun sulandırılmış bir versiyonudur, değil mi?
Ben Brocka

6
@BenBrocka: Hayır, makine kodunun izomorfik olması;)

4
Scala harika. Bana gelince, insanların Java tereddütlerinden vazgeçmeleri ve yeniden icat eden bisikletleri (tüm bu yeni diller, bahsetti ve söylememeleri) ve sadece Scala'yı kullanıp geliştirmelerine inanıyorum. BENİM NACİZANE FİKRİME GÖRE.
Ivan

2
@MichaelBogwardt adil bir nokta. Ben iddiayı blog dünyasında gördüklerime dayandırıyorum. "Scala çok zor" ve "Scala çok karmaşık", nispeten yaygın şikayetler gibi görünmektedir.
Onorio Catenacci

Yanıtlar:


39

Son 7 yıldır Java'da programlama yapan ve en güçlü dilim olan IMHO, Scala'yı oldukça yabancı buluyorum ve buna alışmakta zorlanıyorum.

Xtend , Java'ya daha çok benziyor ve onunla daha hızlı bir şekilde basit bir uygulama yazabiliyordu. Scala ile kendime yeterince zaman vermedim, ancak bazılarının neden kapatılabileceğini kesinlikle anladım.

Olduğu söyleniyor, insanlar yabancı bir cennet üzerinde tanıdık bir cehennem seçecektir.


19
+1: "insanlar yabancı bir cennette tanıdık bir cehennem seçecek".
Giorgio

18

JetBrains, Scala ile Kotlin'i karşılaştıran bir wiki sayfasına sahiptir ve Kotlin'in yaptığı ve Scala'nın yapamadığı birkaç şey var gibi görünüyor:

  • Sıfır yükü sıfır güvenlik. Scala'nın sözdizimsel ve çalışma zamanı sarmalayıcı olan Option'ı vardır.
  • Akıllı yayınlar
  • Statik uzatma fonksiyonları. Çalışma zamanında kaydırma yerine
  • Kotlin'in satır içi işlevleri, yerel olmayan atlamaları kolaylaştırıyor
  • Dize şablonları. Benzer işlevselliğe sahip scala için 3. taraf derleyici eklentisi var: ScalaEnhancedStrings
  • Birinci sınıf delegasyon. Ayrıca 3. parti eklenti aracılığıyla da uygulanmıştır: Autoproxy Modules

Bu yüzden Kotlin'i Scala'dan aşağıya su olarak adlandırmak muhtemelen bir aşırı basitleştirmedir. Xtend'e gelince, daha geniş bir kitleye değil, çoğunlukla Xtext kullanıcılarına yönelik olduğunu düşünüyorum. Scala'daki en büyük fark, Xtend'in bytecode yerine Java'yı derlemesidir.

Listenize eklemeniz gereken bir başka "Java katili" dili de Red Hat'in Seylanı'dır , ancak Scala ile nasıl ve nasıl karşılaştırılacağı hakkında hiçbir fikrim yok.


13
Otomatik atma korkutucu geliyor.
Jonas

14
Endüstri, geliştiricilerin bir uç noktadan ve tekrar tekrar gideceği döngüsel devrimlere sahiptir. Zengin güç kodlayıcı dilleri özelliği iyiydi, sonra aptallar kötü kodlar yazdı ve tehlikeleri bulduk; böylece insanlar, tekrar güç kodlayıcıları için tekrar algılanan Java güvenliğine akın ettiler. Javascript ve tarayıcı temelinin ne kadar iyi olduğuna bakın, sonra uygulamalar geldi ve tarayıcı eklentileriyle birlikte RIA iyiydi ve Javascript kötü, sonra modern AJAX çerçeveleri geldi ve eklentiler güvensiz ve kötüydü, sonra Silverlight geldi ve insanlar AJAX'ın öldüğünü söyledi, ŞİMDİ HTML5 moda ve eklentileri yine kötü! :)
maple_shaft

3
Eğer @Jonas ben bile bilmiyorum ben ona katılmam, ama ben fark etmiş olduğu bir olgudur. Kesinlikle her devrim ile daha sofistike bir çözüm geliyor, ancak her çözüm her zaman bir Aşil Topuğuna sahip. Topuk sorununu çözmek, bazılarının fikirlerin önceki çözümlerine geriye bakmasına neden olur, ancak zamanla insanlar eski çözümlerin neden orijinal olarak bırakıldığını unutur. Zamanla, her devrimle birlikte, Topuk küçülmeye devam ediyor. Java + XTend kesinlikle Scala kadar karmaşık olmayabilir, ancak problemler tamamen yeni bir dile geçmek için yapılan yatırımdan daha küçüktür.
maple_shaft

2
@Jonas Peki, teknolojik evrimin aşırı basit bir şekilde aşırı basitleştirilmesi bir yorumda yer alacak. Ancak maple_shaft ile aynı fikirdeyim, teknolojik evrimin tekrarlayıcı bir havası var .
yannis

3
@Jonas bu oyuncular otomatik değil, akıllı yayınlar: Eğer içine bakarsanız aynı olmadığını göreceksiniz: kotlinlang.org/docs/reference/typecasts.html
cy6erGn0m

11

Scala'yı geçen yıl için ana dilim olarak kullanıyorum (her ikisi de eski Java kodu tabanındaki Java ile yakın bir saniye olarak.) Kullanılmadıysam, hala temel özelliklere bakmam gerekiyor süre. Tabii, olabilir hızla bazı Scala yazma, ancak son derece zengin özelliklere sahip bir dil, ve o usta uzun zaman alır.

Dahası, karmaşıklığı sadece insanlar için değil, aynı zamanda IDE'ler ve derleyiciler için de bir problemdir. Hem Celyon hem de Kotlin, doğrudan JavaScript'i temizlemek için derler. Scala, GWT üzerinden JavaScript üretebilir, buna rağmen karmaşık hale gelir ve GWT çıktısı okunaklı değildir ve harici JavaScript veya HTML ile güzelce oynamak için tasarlanmamıştır.

Kesinlikle Scala'da Java'dan daha üretkenim ve kod daha kompakt ve okunaklı (biraz Scala'yı tanıdığınızda). Ancak karmaşıklığı beni başkalarına tavsiye etmekte tereddüt ediyor. Karmaşıklığın% 20'sine sahip, ancak kapasitenin% 80'i olan bir dil hoş bir alternatif olacaktır.

[Eski kodun sözünü kaldırmak için düzenlendi, aşağıdaki yoruma bakın.]

[2017 eki: Scala, artık JavaScript'i yapı hedefi olarak desteklerken, Kotlin, Scala benzeri bir Java / Groovy / JavaScript değişikliği için anlamlı olan özellikler eklemeye devam etti. Şimdi bunu ilk yazdığımdan daha belirgin diller.]


Lütfen "gecikme kısmını" biraz daha detaylandırabilir misiniz? Örneğin, Sıralar yerine Listeler almak için hangi yöntemleri kastettiniz?
kiritsuku

Bunu değiştireceğim, çünkü yansıma üzerine standart Scala kütüphanesi bunu nadiren yapıyor. JSONArray bir Liste alır, ancak çoğu yapıcı yok. Ne olursa olsun, belgelerde hala Listelere yönelik bir önyargı var, özellikle Scala'daki Programlama, 2nd Edition, yalnızca Vektörlerden önce gelen Scala 2.8'i kapsıyor. Ve onun kod örnekleri, Listenin daha iyi olacağı Listeyi alan inşaatçılara sahip olma eğilimindedir.
David Leppik

Evet, 2.10 için bazı şeyler daha iyidir ( +:örneğin aspiratörler). Umarım Scala'daki Programlama yakın zamanda güncellenecektir. 2.11 için bazı şeyler daha da iyileşir. Stdlib şimdiden kullanımdan kaldırılmıştır ve biraz da küçülecektir. Belki scala.util.parsingde stdlib'in dışına taşınır. Göreceğiz ...
kiritsuku

1
Listelerle Vektörler arasındaki asıl sorunumun bir listeye öğe eklemenin (yani Scala'da Seq) çok temel bir işlem olduğunu ve bunu yapmanın çok zor eşdeğer yollarının olduğunu söylemeliyim. hatırlamak. Kurallı yoldur ::, ::=ya +:=hangi konuyu başa, ama insanların çoğu istediğiniz :+=ekler hangi ama bu Listesi için verimli değildir.
David Leppik

10

JetBrains, Kotlin için hedeflerini açıkça belirtti :

Daha etkileyici bir dile geçerek daha üretken olmak istiyoruz. Aynı zamanda, Java ile birlikte çalışabilirlik (yeni dil kademeli olarak tanıtılacak ve mevcut kod tabanı ile sorunsuz bir şekilde birlikte çalışmamız gerekecek) veya derleme hızından ödün veremiyoruz. javac ve bunu daha yavaş hale getirmeyi göze alamayız). Bir sonraki şey de oldukça basit: Kotlin'in IntelliJ IDEA'nın satışını artırmasını bekliyoruz.


8

Scala'yı Eclipse'de Play Framework ile birkaç ay kullandım. Dili severim ama sevmediğim şeyler de var.

Benim için Java'dan başka bir dile geçmenin nedeni daha üretken olmak.

Şimdiye kadar Scala ile daha üretken olmadım. Bunun bir nedeni, Eclipse'deki Scala'ya iyi destek verilmemesidir, Scala eklentisi kötüdür (örneğin girinti başarısız) ve henüz çok fazla işlevi yoktur (örneğin, "Açık Çağrı Hiyerarşisi" yok). Scala derleyicisi de yavaştır, bu bir sorun olmayabilir, ancak her isteğin kodunu derleyen Scala'yı Play Framework ile kullanıyorum ve orada derleyici hızı önemlidir.


2
Belki de yeterince Scala deyimi öğrenmemişsindir. Scala'yı küçük projeler (araçlar) için kullandım ve Java'da (> 10 yıl) Scala'dan (<2 yıl) çok daha fazla deneyime sahip olmama rağmen, Scala'da Java'dan çok daha üretkenim.
Giorgio

4

Kotlin'i bilmiyorum, ama Scala ve Xtend iki farklı canavar.

Yaygın sözlerin aksine, Scala daha iyi bir Java DEĞİLDİR. Scala, kendi sözdizimi ve anlambilimiyle ve kendi temel kütüphaneler paketiyle Java'dan çok daha özellikli bir dildir.

Xtend daha iyi bir Java IS. Java anlamını korur ve sözdizimini geliştirir. Xtend kodunun her satırı doğrudan bir grup java kod satırına çevrilebilir. Hiçbir ek çalışma zamanı yok.

Her iki yaklaşımın da farklı olmasına rağmen bence doğru olduğunu düşünüyorum. Scala'dan hoşlanmıyorum (dil olarak), ancak Scala kavanozlarının projelerime eklenmesini istemiyorum. Scala'yı Android'de de uygun şekilde kullanamıyorum (ağırlık ve performans sorunları da ekliyor). Xtend pek özellikli değil, ama benim için Tamam (Java dilinden çok kullanmaya değer) ve her platformda doğrudan Java'da yazıyormuşum gibi çalışıyor.

Her iki dilin de farklı nişleri kapsadığını ve birbirlerini etkilemeden bir arada olabileceğine inanıyorum. IMHO, Scala sadece çok karmaşık ve yeni bir şey eklemiyor. Daha işlevsel ve daha az OO gitmek istiyorsanız, sadece Clojure veya JHaskell gibi daha basit işlevsel dillerden birini seçin. Java'yı biraz daha iyi sözdizimi ve biraz da işlevsel programlama ile istiyorsanız, Fantom Scala kadar harika olurdu (C # 'a çok benziyor).

Fakat Xtend'in tüm bu diller arasında tatlı bir noktada olduğunu görüyorum. Java için istediğim tüm sözdizimsel kalıpları ekleyerek, Java'nın (semantikasının) iyi kısımlarını tutar. Java için Coffescript olarak düşünün.

Ve Eclipse desteği mükemmel ...


… Ve sadece Eclipse’de destekleniyor. Sağ? Ve Eclipse bir cehennem…
Sarge Borsch

Xtend'in ek bir çalışma zamanı var. En son 3 MB kontrol ettim.
mm2001

@ mm2001 Evet bağımlılıklar var: küçük test projemde xtend için yaklaşık 300 Ko ve guava için 2 Mo ( github.com/pdemanget/examples/tree/master/xtend/message-send ) Ama bu bir çalışma zamanı değil, bunlar InputOutput gibi bir şey için ilave sınıflar, ilave açıklamalar. Scala ve Xtend'in bu cevapta söylendiği gibi çok farklı 2 dil olduğu ana noktayı çıkarmadı.
pdem
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.