Scalaが他の言語よりもスケーラブルなのはなぜですか?


12

Scalaは、その名前に含まれている機能であるスケーラブルな言語として請求されます

Scalaという名前は「スケーラブル」と「言語」のポートマントーであり、ユーザーの要求に応じて成長するように設計されていることを意味します。

Scalaのコンテキストで「スケーラブル」とはどういう意味ですか?何がScalaをJavaよりもスケーラブルにするのですか?


5
Scalaはあなたが考える方法ではスケーラブルではありません:あなたは本当にScala / Javaに関するTwitter開発者のインタビューを読むべきです... Javaコード(ここで指摘したように、JavaコードはScalaよりもはるかに簡単です)。Scalaは、プロトタイピングと単体テストの作成、および「Real World」[TM]量のデータを含まないあらゆるものに適しています。
トリスタンセント

5
ScalaよりもJavaでマルチスレッドコードを正しく記述する方が簡単ですか?どうして?
アーロンノヴストラップ

@Webinatorインタビューへのリンクはありますか?
アーロンノヴストラップ

スケーラビリティについてTristan Stに同意します。Erlangは、最短時間でプロセスを作成できるため、同時プログラミングの場合のパックのリーダーです。10000以上のスレッドを作成して、SCALAで相互にやり取りすることはできません。
-Ubermensch

3
ちょこ FUDの素晴らしい広がり、それは私がそのインタビューから得た基本的なテイクアウェイではありません。-「しかし、他の部分については、従来のJavaスレッドモデルに戻ったところです。それに取り組んでいるエンジニアのJohn Kaluckiは、テストが少し簡単で、予測しやすいことがわかりました。アクターベースのコードをスレッドベースのコードに切り替えるのに数分かかりました。これは、検索と置換のカップルでした。それで、アクターが何らかの理由で失敗したとしても悪くありません。」素晴らしいコンセプト-俳優モデルに適したものとそうでないものがあります!
デレク・リッツ

回答:


14

Martin Oderskyがスケーラをスケーラブルな言語の選択肢として語るとき彼が意味するのは、言語自体が以下に適しているということです。

  • スクリプト作成
  • アプリケーションを書く
  • モンスター「エンタープライズ」(より良い言葉を求めて)アプリケーションを書く

彼は確かにパフォーマンスの観点からスケーラビリティについて言及していません!

scalaが大規模なエンタープライズ展開の場合と同様にquick'n'dirtyスクリプトに適していると主張できるという事実は、おおよそ次のとおりです。

スクリプティング

Scalaは、型推論と機能的なスタイルにより、コレクションのスライスやダイシングなどに適した簡潔なスクリプトを作成するのに最適です。

用途

Scalaは関数型スタイルと命令型スタイルの両方で機能する優れた機能を備えた静的型チェック言語であるため、アプリケーションの作成に最適です。ScalaはJavaと互換性があるため、ライブラリの膨大なエコシステムを活用できます。

エンタープライズ展開

Scalaは、バイトコードにコンパイルされ、(いわゆる)動的に型付けされた(つまり型付けされていない)言語と比較すると、優れたパフォーマンスを備えた安定したシステムであるJava仮想マシン上で実行されます。繰り返しますが、静的に型付けされているという事実は、大規模なコードベースでリファクタリングがはるかに簡単になることを意味します。


「静的に型指定されているということは、大規模なコードベースでリファクタリングがはるかに容易になることを意味しますか?」「依存する」状況、そして事実のように聞こえます。型付き言語が明確に提供するのを見た唯一のことは、コンパイラの作成者が対処しやすいことです。
デレクリッツ

21

Oderskyは次のように述べています(スライド11、http//www.slideshare.net/rawwell/scalaliftoff2009pdf):

「他の言語が広いところでは、Scalaは深い。」

つまり、スケーラブルとは、柔軟性と表現力の点で意味します。独自の制御構造を作成できます。たとえば、アクターフレームワークはライブラリですが、言語機能を使用しているようです。

これは、Scalaが必要な抽象化に従ってスケールすることを意味し、必ずしも「1秒で1.000.000リクエストに応答する」という点ではありません(ただし、Scalaも強力です)。


1
+1これは本当に「SCAlable LAnguage」に適合します。開発者のニーズに合わせて成長するように設計された言語です。
ベンジェームス

11

実際にJavaのスケーラビリティを制限するのはJVMではなく、正しい並行コードを書くのが難しいことです。Scalaは、関数型プログラミングとアクターモデルのサポートを通じてこれを簡単にします。

Javaは、Webサーバーなど、同時実行が簡単な場合に非常にスケーラブルです(各要求はほぼ完全に独立しています)。しかし、単一の長時間実行タスクを並列化することになると、それを正しく実行するのは非常に困難です。


Javaは関数型プログラミングをサポートしていませんが、Javaで使用できないという意味ではありません。これにより、より多くの労力を費やすことはできますが、ほぼ同じスケーラビリティが得られます。code.google.com/p/lambdaj
Peter Lawrey

2
Scalaがその名前を所有しているスケーラビリティは、プログラムではなく言語のものです。
ダニエルC.ソブラル


6

どちらの言語も同じバイトコードを生成できると言うので、Javaよりも拡張性の高い言語自体は必要ありません。

しかし、アクターモデルと関数型プログラミングスタイルは、スケーラビリティを向上させることができます(簡単に言えば、正しい同時実行プログラミングを簡素化し、同期の必要性を減らすことにより)。

より良い洞察を得るには、アクターモデルを見て、従来のマルチスレッドJavaアプリケーションと比較してください。

Akkaフレームワークを使用して、Scalaでコーディングせずに拡張性の高いJavaアプリケーションを作成することもできます。


アクターライブラリはScalaのスケーラブルな方法の良い例ですが、この例は同時性とは関係ありません:アクターAPI 特別な演算子(!メッセージ送信など)を備えたネイティブ機能のように見えます、実際はそれだけです通常のメソッド呼び出し。
ベンジェームス

アクターモデルを使用すると、痛みや並行性の頭痛があまりなく、スケーラブルなソフトウェアを作成できますよね?そのため、アクターを使用しているときに表示されない場合でも、アクターモデルに関連する並行性があります。アクターモデルは同時計算を簡素化することを目的としているので、なぜこの例が同時実行性とは関係ないのか...ここであなたの主張が得られませんか?
アロイスコチャード

私のコメントは見事に表現されていなかった、ごめんなさい。llemiengまたはmichael.kebeの回答はそれをよりよく説明しています。
ベンジェームス

問題ない !私は今あなたの主張を理解しています。私はScalaライブラリのスケーラビリティについてのみ話し、言語のスケーラビリティ/同時実行機能自体については話していませんでした。ありがとう
アロイスコチャード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.