XtendとKotlinを使用してこれらのScalaを削減しようとするのはなぜですか?[閉まっている]


26

そのため、EclipseはXtendを提供し、JetBrainsはKotlinを提供しています-どちらもScalaのバージョンを骨抜きにしたようです。私の質問はなぜですか?私はスカラ座で少しプレイしたし、そうではありませんことを困難。これは、命令的なものから機能的なものへの飛躍の固有の難しさに対する単なる反応なのでしょうか、それとも他に何か機能しているのでしょうか?


編集:謝罪。最初に投稿したときに質問を読み直すと、トローリングのように聞こえるかもしれません。私が質問を表現した方法は、質問をするための最良の方法であるように見えました。「Scalaは難しすぎる/ Scalaは複雑すぎる」という効果と、「KotlinはScalaを実行しようとする試みですが、よりシンプル」というブログ投稿を見てきました。元々の言い回しはそのままにしておきますが、正直にトロールしようとしませんでした。


20
私は、Scalaにある程度類似した新しい言語は、Scalaが難しすぎる人々によって書かれた「Scalaのウォータダウンバージョン」でなければならないと単純に仮定することにはかなり偏見を抱いているようです。そのような質問を投げかけることで、よく考えられた答えを得る可能性は低くなります。
マイケルボルグワード

8
アセンブリは、マシンコードの単純化されたバージョンです。
ベンブロッカ

6
@BenBrocka:いいえ、マシンコードと同型です;)

4
Scalaは素晴らしいです。私に関しては、人々はJavaのネクロマンシーと自転車の再発明(言及されたものとそうでないものすべて)をあきらめ、Scalaを使用し改善するだけだと思います。私見では。
イヴァン

2
@MichaelBogwardt公平なポイント。ブロゴスフィアで見たものに基づいて主張しています。「スカラが硬すぎる」と「スカラが複雑すぎる」は、比較的よくある不満のようです。
オノリオカテナッチ

回答:


39

過去7年間Javaでプログラミングをしていて、私の最強の言語である私見は、Scalaはまったく異質であり、それに慣れるのに苦労しています。

Xtend Javaのように感じられ、それを使って簡単なアプリケーションをより速く書くことができました。確かに、私はScalaで十分な時間を与えなかったのですが、なぜ一部のScalaがオフになっているのかは確かに理解しています。

そう言われていると、人々はなじみのない天国よりもなじみ深い地獄を選ぶでしょう。


19
+1:「人々はなじみのない天国よりもなじみ深い地獄を選ぶ」。
ジョルジオ

18

JetBrainsには、ScalaとKotlinを比較するWikiページがありますが、KotlinにはあるがScalaにはないことがいくつかあります。

  • ゼロオーバーヘッドのヌル安全。ScalaにはOptionがあり、これは構文上および実行時のラッパーです。
  • スマートキャスト
  • 静的拡張機能。実行時にラップする代わりに
  • Kotlinのインライン関数は非ローカルジャンプを容易にします
  • 文字列テンプレート。同様の機能を持つscala用のサードパーティコンパイラプラグインがあります:ScalaEnhancedStrings
  • 一流の委任。また、サードパーティのプラグインを介して実装:Autoproxyモジュール

したがって、KotlinをScalaのウォーターコールと呼ぶことは、おそらく過度に単純化されているでしょう。Xtendに関しては、より多くの読者ではなく、主にXtextユーザーをターゲットにしていると思います。Scalaとの大きな違いは、XtendがバイトコードではなくJavaにコンパイルされることです。

リストに追加すべきもう1つの「Javaキラー」言語はRed HatのCeylonです。ただし、Scalaと比較するかどうか、また比較する方法はわかりません。


13
自動キャストは怖いですね。
ジョナス

14
業界にはこれらの循環的な革命があり、開発者は極端な状態から何度も何度も戻ります。機能豊富なパワーコーダー言語は良かったので、バカが悪いコードを書いたので、人々がJavaの認識された安全性に群がる危険性を発見し、今度はパワーコーダーに戻った。Javascriptとブラウザベースの良さ、アプレットの登場、ブラウザプラグイン付きのRIAの良さ、Javascriptの悪さ、そして最新のAJAXフレームワークの登場とプラグインの安全性と悪さ、そしてSilverlightの登場と人々はAJAXは死んだ、HTML5流行とプラグインが再び悪いです!:)
maple_shaft

3
@Jonas私はそれ同意するかどうかさえ知りませんが、それは私が気づいた現象です。確かに各革命にはより洗練されたソリューションが伴いますが、各ソリューションには常にアキレス腱があります。かかとの問題を解決すると、一部の人は以前のアイデアの解決策を振り返りますが、時間の経過とともに、古いソリューションが元々放棄された理由を忘れてしまいます。しかし、時間の経過とともに、回転ごとにヒールが小さくなり続けます。Java + XTendは確かにScalaほど洗練されていないかもしれませんが、問題は完全に新しい言語に切り替えるための投資よりも小さいです。
maple_shaft

2
@Jonasまあ、技術進化の極端に高いレベルの単純化だけがコメントに収まるでしょう。maple_shaftには同意しますが、技術の進化には反復的な感覚があります。
ヤンニス

3
@Jonasこれらのキャストは自動ではありませんが、スマートキャストです。見れば、同じではないことがわかります。kotlinlang.org
reference

11

私は昨年、Scalaをプライマリ言語として使用しました(Javaを大規模なレガシーJavaコードベース内で2番目に近いものとして使用します)。まだ使用していない場合は、かなり基本的な機能を調べる必要がありますながら。もちろん、Scalaをすばやく書くこともできます、非常に機能が豊富な言語であり、習得するには時間がかかります。

さらに、その複雑さは人間にとってだけでなく、IDEやコンパイラにとっても問題です。CelyonとKotlinはどちらも、かなりきれいなJavaScriptに直接コンパイルします。ScalaはGWTを介してJavaScriptを生成できますが、そこに到達するのは複雑であり、GWT出力は判読できず、外部のJavaScriptやHTMLでうまく動作するように設計されていません。

私は間違いなくJavaよりもScalaの方が生産性が高く、コードはよりコンパクトで読みやすいです(少しScalaを知っていれば)。複雑さの20%で機能の80%の言語は、歓迎すべき代替手段です。

[レガシーコードの言及を削除するために編集されました。以下のコメントを参照してください。]

[2017補遺:ScalaはJavaScriptをビルドターゲットとしてサポートするようになりましたが、KotlinはScalaに似たJava / Groovy / JavaScriptの置換に意味のある機能を追加し続けています。これらは、私がこれを最初に書いたときよりも独特の言語になりました。]


「遅延部分」についてもう少し詳しく説明してください。たとえば、SeqではなくListを使用する方法は何ですか?
キリツク

私はそれを編集します。なぜなら、標準のScalaライブラリは実際にはめったにそれをしないからです。JSONArrayはListを受け取りますが、ほとんどのコンストラクターは受け取りません。とにかく、特にScalaのプログラミング、第2版では、ベクターより前のScala 2.8のみを扱っているため、リストに関するドキュメントにはまだバイアスがあります。また、そのコード例には、Seqの方が適しているListをとるコンストラクタが含まれる傾向があります。
デビッドレピク

ええ、2.10の方が優れています(+:たとえば、抽出プログラム)。Scalaのプログラミングが近い将来に更新されることを願っています。2.11では、いくつかの点がさらに改善されています。stdlibは既に廃止予定から解放されており、少し縮小されます。たぶんscala.util.parsing、stdlibの外にも移動されるでしょう。私たちは
...-切rit

1
リストとベクターの私の実際の問題は、リストへのアイテムの追加(つまり、ScalaのSeq)は非常に基本的な操作であり、それを行うための同等の方法が多すぎることです。覚えて。正規の方法は::::=または+:=どちら:+=を付加するかですが、ほとんどの人はどちらを付加するかを望んでいますが、それはリストにとって効率的ではありません。
デビッドレピク

10

JetBrainsは、Kotlinの目的を非常に明確に述べています。

より表現力のある言語に切り替えることで、生産性を高めたいと考えています。同時に、Javaの相互運用性(新しい言語は徐々に導入され、既存のコードベースとスムーズに相互運用する必要があります)またはコンパイル速度(私たちのコードベースは、 javac、それを遅くする余裕はありません)。次のこともかなり簡単です。KotlinがIntelliJ IDEAの販売を促進すると期待しています。


8

EclipseでPlay Frameworkを使用してScalaを数か月使用しました。私はこの言語が好きですが、嫌いなこともあります。

私にとって、Javaから別の言語に切り替える理由は、生産性を高めるためです。

これまでのところ、Scalaの生産性はそれほど高くありません。理由の1つは、EclipseでScalaを適切にサポートしていないことです。Scalaプラグインは不良で(インデントが失敗するなど)、まだ多くの機能がありません(「Open Call Hierarchy」がないなど)。Scalaコンパイラーも遅く、これは問題ではないかもしれませんが、私はScalaをPlay Frameworkで使用します。これは、すべてのリクエストに対してコードをコンパイルするため、コンパイラーの速度が重要です。


2
たぶん、あなたは十分なScalaイディオムを学んでいません。私はScalaを小さなプロジェクト(ツール)に使用しましたが、Scala(<2年)よりもJava(> 10年)の方がはるかに多くの経験がありますが、ScalaではJavaよりもはるかに生産的です。
ジョルジオ

4

Kotlinについては知りませんが、ScalaとXtendは非常に異なる獣です。

一般的なことわざに反して、Scalaは優れたJavaではありません。ScalaはJavaよりもはるかに優れた言語であり、独自の構文とセマンティクス、および独自のベースライブラリパックを備えています。

Xtendは優れたJavaです。Javaセマンティクスを保持し、構文を強化します。Xtendコードのすべての行は、Javaのコード行に直接変換できます。追加のランタイムもありません。

私は、どちらのアプローチも異なるとはいえ、正しいと思います。私はScalaを(言語として)嫌いではありませんが、Scala jarをプロジェクトに追加するのは好きではありません。AndroidでScalaを適切に使用することもできません(重量とパフォーマンスの問題が追加されます)。Xtendの機能はそれほど多くありませんが、私にとっては問題なく(Java言語よりも使用する価値があります)、すべてのプラットフォームで、Javaで直接記述しているように動作します。

両方の言語が異なるニッチをカバーし、互いに干渉することなく共存できると信じています。私見、Scalaはあまりにも複雑で、新しいものは何も追加していません。より機能的でオブジェクト指向を減らしたい場合は、ClojureやJHaskellなど、より単純な機能言語の1つを選択してください。より優れた構文と少しの関数型プログラミングを備えたJavaが必要な場合、FantomはScalaと同じくらい素晴らしいでしょう(C#によく似ています)。

しかし、私はXtendがこれらすべての言語の間の良い点にあると思います。Javaに必要な構文パターンをすべて追加し、Javaの優れた部分(セマンティクス)を保持します。JavaのCoffescriptと考えてください。

そして、Eclipseサポートは素晴らしい...


…そして、Eclipseでのみサポートされています。右?そして、Eclipseは地獄です…
セージボルシュ14

Xtendには追加のランタイムがあります。最後に約3MBをチェックしました。
mm2001

@ mm2001はい、依存関係があります:私の小さなテストプロジェクトのxtendには約300 Ko、グアバには2 Moがあります(github.com/pdemanget/examples/tree/master/xtend/message-send) InputOutput、追加注釈などの追加クラス。この答えで述べたように、ScalaとXtendは2つの非常に異なる言語であるという主なポイントを削除しません。
-pdem
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.