Teraz Eclipse oferuje Xtend, a JetBrains oferuje Kotlin - oba wydają się być rozwodnioną wersją Scali. Moje pytanie brzmi: dlaczego? Grałem trochę ze Scalą i nie jest to takie trudne. Czy to tylko reakcja na nieodłączną trudność przejścia z trybu imperatywnego na funkcjonalny, czy może działa tu jeszcze coś innego?
EDYCJA: Przeprosiny. Ponownie czytając pytanie, jak je pierwotnie opublikowałem, widzę, że brzmi to trochę jak trolling. Sposób, w jaki sformułowałem pytanie, wydawał się po prostu najlepszym sposobem na zadanie pytania. Widziałem posty na blogu, że efekt „Scala jest zbyt trudna / Scala jest zbyt złożona”, a także „Kotlin to próba zrobienia Scali, ale prostsza”. Zostawię frazowanie tak, jak było na początku, ale szczerze mówiąc, nie próbowałem trollować.
źródło
Odpowiedzi:
IMHO od kogoś, kto programuje w Javie przez ostatnie 7 lat i jest moim najsilniejszym językiem, uważam Scalę za obcą i trudno mi się przyzwyczaić.
Xtend czuje bardziej jak Javie i mógł napisać prostą aplikację z nim znacznie szybciej. To prawda, że nie poświęciłem sobie wystarczająco dużo czasu ze Scalą, ale z pewnością rozumiem, dlaczego niektórzy mogą go wyłączyć.
Powiedziawszy to, ludzie wybiorą znane piekło nad nieznanym niebem.
źródło
JetBrains ma stronę wiki porównującą Scalę do Kotlina i wydaje się, że Kotlin robi kilka rzeczy, a Scala nie:
Tak więc nazywanie Kotlina wodą ze Scali jest prawdopodobnie nadmiernym uproszczeniem. Jeśli chodzi o Xtend, myślę, że jest skierowany głównie do użytkowników Xtext, a nie do szerszej publiczności. Główną różnicą w stosunku do Scali jest to, że Xtend kompiluje się do Javy zamiast kodu bajtowego.
Kolejnym językiem „zabójcy Java”, który powinieneś dodać do swojej listy, jest Cejlon Red Hata , chociaż nie mam pojęcia, czy i jak to się ma do Scali.
źródło
Używam Scali jako mojego głównego języka przez ostatni rok (z Javą jako drugą sekundą, obie w dużej bazie kodu Java). Nadal muszę szukać dość podstawowych funkcji, jeśli nie użyłem ich w podczas. Jasne, może napisać Scala szybko, ale jest to język bardzo bogate, a to zajmuje dużo czasu do opanowania.
Co więcej, jego złożoność jest nie tylko problemem dla ludzi, ale także dla IDE i kompilatorów. Zarówno Celyon, jak i Kotlin kompilują się bezpośrednio do dość czystego JavaScript. Scala może generować JavaScript za pośrednictwem GWT, chociaż dotarcie do niego jest skomplikowane, a wynik GWT nie jest czytelny ani zaprojektowany tak, aby działał dobrze z zewnętrznym JavaScript lub HTML.
Jestem zdecydowanie bardziej produktywny w Scali niż w Javie, a kod jest bardziej zwarty i czytelny (jeśli znasz trochę Scalę). Jednak jego złożoność sprawia, że waham się polecać go innym. Język o 20% złożoności, ale 80% umiejętności, byłby pożądaną alternatywą.
[Edytowane w celu usunięcia wzmianki o starszym kodzie, patrz komentarz poniżej.]
[Dodatek 2017: Scala obsługuje teraz JavaScript jako cel kompilacji, podczas gdy Kotlin nadal dodaje funkcje, które mają sens dla podobnej do Scali zamiany Java / Groovy / JavaScript. Są to teraz bardziej charakterystyczne języki niż wtedy, gdy to napisałem.]
źródło
+:
na przykład ekstraktory). Mam nadzieję, że programowanie w Scali zostanie zaktualizowane w najbliższej przyszłości. W wersji 2.11 niektóre rzeczy ulegają dalszej poprawie. Stdlib jest już wolny od deprecjacji i również trochę się zmniejszy. Być możescala.util.parsing
zostanie również przeniesiony poza stdlib. Zobaczymy ...::
,::=
lub+:=
które prepend, ale większość ludzi chce:+=
którego dołącza, ale to nie jest skuteczny na liście.JetBrains bardzo jasno określił swoje cele dla Kotlin :
źródło
Użyłem Scali przez kilka miesięcy w Eclipse z Play Framework. Lubię język, ale są też rzeczy, których nie lubię.
Dla mnie powodem przejścia z Javy na inny język jest większa produktywność.
Do tej pory nie byłem bardziej produktywny ze Scalą. Jednym z powodów jest brak dobrego wsparcia dla Scali w Eclipse, wtyczka Scala jest zła (np. Wcięcie się nie udaje) i nie ma jeszcze wielu funkcji (np. Brak „Hierarchii otwartych połączeń”). Kompilator Scala jest również powolny, nie może to stanowić problemu, ale używam Scala z Play Framework, który kompiluje kod dla każdego żądania, i tam szybkość kompilatora jest ważna.
źródło
Nie wiem o Kotlinie, ale Scala i Xtend to dwie bardzo różne bestie.
W przeciwieństwie do powszechnych powiedzeń, Scala NIE jest lepszą Javą. Scala jest językiem o wiele bardziej funkcjonalnym niż Java, z własną składnią i semantyką oraz własną biblioteką bibliotek podstawowych.
Xtend JEST lepszą Javą. Utrzymuje semantykę Java i poprawia jej składnię. Każda linia kodu Xtend może być bezpośrednio przetłumaczona na kilka linii kodu Java. Nie ma też żadnego dodatkowego środowiska uruchomieniowego.
Myślę, że oba podejścia są słuszne, choć różne. Nie lubię Scali (jako języka), ale nie lubię dodawać słoików Scali do moich projektów. Nie mogę również poprawnie używać Scali w Androidzie (powoduje to problemy z wagą i wydajnością). Xtend nie jest tak bardzo polecany, ale dla mnie jest ok (warto go używać niż język Java) i działa na każdej platformie, jak gdybym pisał bezpośrednio w Javie.
Uważam, że oba języki obejmują różne nisze i mogą ze sobą współistnieć, nie zakłócając się nawzajem. IMHO, Scala jest po prostu zbyt skomplikowana, nie dodając nic nowego. Jeśli chcesz przejść na bardziej funkcjonalny i mniej OO, wybierz jeden z wielu prostszych języków funkcjonalnych, takich jak Clojure lub JHaskell. Jeśli chcesz po prostu Java z lepszą składnią i odrobiną funkcjonalnego programowania, Fantom byłby tak świetny jak Scala (bardzo przypomina C #).
Ale uważam, że Xtend znajduje się w słodkim punkcie pomiędzy tymi wszystkimi językami. Dodaje wszystkie wzorce składniowe, które chciałem dla Javy, zachowując dobre części Javy (jej semantykę). Pomyśl o tym jako o Coffescript for Java.
Obsługa Eclipse jest znakomita ...
źródło