32

私は平均的な Python スキルを持つ経験豊富な C++ プログラマーです。そもそも私が Python を勉強した理由は次のとおりです。

  • プログラミングについて異なる視点を得る (静的 vs 動的、解釈済み vs コンパイル済みなど)
  • 取り組むことができるプロジェクトの幅を広げるため (Python を使用すると、Web 開発を行ったり、Symbian 電話用に開発したり、システム管理スクリプトを簡単に作成したりできます)
  • 私の C++ スキルを補完するために。

Python は素晴らしいと思います。私は上記の目標を達成したと信じています。小規模なプロジェクト、スクリプト、および Web 開発に引き続き使用します。

ただし、中規模から大規模のプロジェクトに使用できるとは思えません。動的型付けは便利ですが、特定の種類のバグが発生する可能性があります。単体テストと lint はこの問題を軽減できますが、静的型付けを使用すると完全に解消されます。

いくつかのプログラミング言語を見た後、私は Scala が良い候補のように見えると思います: 私は型推論が好きで、それは JVM で実行されるので、JVM が利用可能な場所ならどこでも利用できるはずです。また、関数型プログラミングを使用すると、関数型プログラミングについてさらに学ぶことができます。

しかし...私もいくつか疑問を持っています.これは、スタックオーバーフローコミュニティが助けてくれることを願っています:

  • 移植性: 少なくとも Linux と Windows は期待しています。携帯電話についてはどうですか。そこで実行することは可能ですか?
  • C++ の互換性: C++ コードと Scala を混在させることはできますか? (JNI?)
  • プログラミングのパラダイム: 現時点では、関数型プログラミング (FP) に切り替えることに不安を感じています。オブジェクト指向と手続き型を最初にいくつかの FP で使用し、学習するにつれて比率を変更することはできますか?
  • ツール チェーンの成熟度: IDE とデバッガーの経験は? 現在Eclipseを使用していますが、問題ないようです。
  • 学習速度: 私の経験を考慮して、Scala で実行可能なレベルに到達できる速さはどれくらいだと思いますか?
  • 配備: Scala プログラムを正確にどのように配備しますか? それはjarですか、それは実行可能ファイルですか?

最後に、Scala の短所は何だと思いますか?

4

8 に答える 8

29
  • 移植性: 少なくとも Linux と Windows は期待しています。携帯電話についてはどうですか?そこで実行することに成功した人はいますか?

はい。Android の Scala についてはかなりの動きがあります。J2ME に関しては、その点で何かが見えましたが、それほど多くはありませんでした。ソース コード リポジトリには、J2ME に関連するコードがいくつかあります。それがどれほど実行可能かはわかりませんが、それに対する需要はあまりないように見えます。

また、必要なターゲット プラットフォームについて Scala-Lang にプールがある/あったことにも言及します。J2ME はその 1 つであり、トーテム ポールの非常に低いものでした。

  • C++ の互換性: C++ コードと Scala を混在させることはできますか? (JNI?)

また、C++ と Java を混在させることもできます。そのような経験がない場合は、Java リソースを読むだけでかまいません。Java リソースに含まれるものは、何も変更せずに Scala に適用できるからです (Scala 構文は別として)。

  • プログラミング パラダイム: 現時点で FP に切り替えることに不安を感じています。最初にオブジェクト指向とプロシージャルをいくつかの FP で使用し、学習に応じてプロポーションを変更できますか?

絶対そうです。Scala は、関数型のスタイルでプログラミングする必要がないことを確認するために最善を尽くしています。実際のところ、これは関数型の人々からの Scala に対する主な批判です。プログラマーに関数型スタイルで書くことを強制しない限り、言語を関数型と見なさない人もいます。

とにかく、自分の思い通りに物事を進めることができます。ただし、機能的であることに気付かずに、機能的な習慣を習得することは間違いありません。

おそらく、Matrix クラスの作成に関する私自身のブログのMatricesシリーズを参照してください。標準的な OO コードのように見えますが、実際には非常に機能的です。

  • ツール チェーンの成熟度: IDE とデバッガーの経験は? 現在Eclipseを使用していますが、問題ないようです。

IDEA (IntelliJ)、NetBeans、および Eclipse はすべて、Scala を適切にサポートしています。IDEA が最良のようであり、NetBeans/Eclipse はお互いに蛙跳びを続けていますが、NetBeans は最近の Eclipse よりも確実に安定しています。一方、Eclipse でのサポートは、今後 6 か月ほどで結果が得られる非常に有望なルートをたどっています。:-)

これらの環境向けの Scala ツールのいくつかの興味深い兆候は、開発中の Eclipse プラグインが AOP を使用して IDE 全体とよりシームレスにマージされていること、NetBeans プラグインが Scala で完全に書き直されていること、IDEA に Scala Power Pack があることです。とりわけ、Java コードから Scala コードへの変換をサポートします。

EMACS 関係者は Scala 用の広範なツールも持っており、多くの小さなエディターもそれをサポートしています。たとえば、小さなプログラムやスクリプトに対する jEdit のサポートには非常に満足しています。

また、優れた Maven サポートもあります。実際、Liftをインストールする標準的な方法は、maven をインストールしてから Lift アーキタイプを構築することです。これにより、適切な Scala バージョンが取り込まれます。scala:ccトリガーされた再コンパイルも行うターゲットがあります。

再コンパイルといえば、Maven も、特に Ant も、再コンパイルが必要なものを特定するのに適していません。その問題から、Scala で書かれたSBT (Simple Build Tool) が生まれました。これは、Scala コンパイラ プラグインを使用してその問題を解決します。SBT は Maven と同じプロジェクト レイアウトと Maven/Ivy リポジトリを使用しますが、プロジェクトの構成は XML ではなく Scala コードで行われ、Maven/Ivy 構成ファイルもサポートされます。

  • 学習速度: 私の経験を考慮して、Scala で実行可能なレベルに到達できる速さはどれくらいだと思いますか?

とても早い。純粋な OO 言語として、Scala はすでにいくつかの優れた機能を導入しています。これは、C++ には存在するが Java には存在しない機能に匹敵しますが、動作は異なります。その点で、そのような機能が何のためにあるのかを理解し、それらを C++ のものに関連付けると、Java プログラマーよりもはるかに先を行くことになります。

  • 配備: Scala プログラムを正確にどのように配備しますか? それはjarですか、それは実行可能ファイルですか?

ジャバと同じこと。scala コンパイラーがクラス・ファイルを生成するため、JAR、WAR、またはその他の Java ターゲットをデプロイできます。実際、Java の jar を使用してクラス ファイルから Scala の JAR ファイルを生成し、Lift の Maven ターゲットは WAR ファイルの構築をサポートします。

ただし、スクリプト ファイルには別の方法があります。「scala」を呼び出して、シェル スクリプトの Perl と同様に、Scala ソース コードを直接実行できます。Windowsでも実行できます。ただし、実行を高速化するためにコンパイルデーモンを使用しても、起動時間は十分に遅いため、負荷の高いスクリプト環境で Scala を効果的に使用するには、Nailgunのようなものが必要です。

Scala の欠点については、このスタック オーバーフローの質問にある私の回答 (およびその他の回答) をご覧ください。

于 2009-07-10T14:49:45.527 に答える
16

Scala は、特に Java の世界から来ている場合は、投資する価値のある発展中の言語です。Scala はArtimaで広くカバーされています。Bill Venners のこの記事を参照し、 Twitter とScal a についてもお読みください。

ご質問について:

  • Java は、JVM があればどこでも実行できます。ただし、携帯電話ではうまくいきません。そこで利用可能なサブセットではなく、完全な JRE が必要です。
  • これは JNI で可能です。Javaでできることは、Scalaでもできる。Scala は Java クラスを呼び出すことができます。
  • 関数型プログラミングは Scala の強みです。それを学ぶ必要があります。ただし、それを最大限に活用せずに使い始めて、自分のやり方で作業することもできます.
  • Eclipseのプラグインがあります。それは最善ではありませんが、それは仕事をします。詳細はこちら
  • あなたが経験者なら、私は本当に速く言うでしょう。手始めに本を探すことをお勧めします。
  • 展開については、この FAQ エントリを参照してください
于 2009-07-10T10:43:00.907 に答える
6

プログラミングパラダイム:現時点では、FPへの切り替えに不安を感じています。最初にいくつかのFPでOOと手続き型を使用してから、学習しながら比率を変更できますか?

Scalaは命令型プログラミングを完全にサポートしており、FP要素を含まないプログラムを作成するのは簡単です(ただし、FPは便利で、とにかく学ぶ価値があります)。

学習速度:私の経験を考えると、Scalaで実行可能なレベルに到達できる速度はどれくらいだと思いますか?

素早く。Scalaには、たとえばタイピングシステムの機能の一部のように、C ++、Java環境から来た人々にはなじみのない興味深い機能がいくつかあります。すべてを知る前にScalaで学ぶことがたくさんあるという事実は、言語の問題であると主張する人もいます。同意しません。これらの機能の存在は、この言語の利点です。より多くの機能がより楽しいです。結局のところ、店で販売されているものをすべて購入する必要がないのと同じように、一度にすべてを使用する必要はありません。

于 2009-07-10T13:43:23.250 に答える
5

学習速度: 私の経験を考慮して、Scala で実行可能なレベルに到達できる速さはどれくらいだと思いますか?

私も C++ のバックグラウンドを持っていますが、C++ と比較して同等の作業を行う場合、書くコードがはるかに少ないため、同じ期間でより多くのことをこなせるため、学習が促進されることに気付きました。これは私が Ruby で経験したのと同じ現象でした。

于 2009-07-10T20:19:22.817 に答える
3

Scala の作成者自身がこのコースに登録する必要があります。

https://www.coursera.org/course/progfun

于 2012-09-10T16:06:58.597 に答える
3

実際、もし私があなたなら、言語ではなくプログラミング パラダイムを勉強します。もちろん、パラダイムを研究するには、サンプル言語を研究する必要があります。さまざまなパラダイムの欠点と利点を知ることで、問題を別の側面から見ることができ、より優れたプログラマーになることができます (既に知っている言語であっても)。

すでに知られているパラダイムの言語を選択することは、必要に応じて比較的簡単な作業です。Scala は FP であり (少なくともあなたが言及しました)、C++/Python は OOP であるため、あなたにとっては良い言語だと思います。

于 2009-07-10T10:46:41.913 に答える
2

James Strachan (生産的な Java オープンソース開発者、詳しくない人向け) はここで Scala について興味深い議論をしています。

Scala は多くの注目を集めているようです。私はそれが一過性のものだとは思わず、現在、学ぶべき言語のリストに載っています (一部は機能的な側面のためです)。

于 2009-07-10T20:21:51.360 に答える
0

Scala の学習可能性に関する事例証拠を次に示します。

私たちの会社では、U.Waterlooから何人かのインターンを受け入れました。彼らは Scala で書くように言われました。今まで見たことがない。

彼らは Scala と Lift を驚くほど早く手に入れました。現在、彼らは Scala コードを作成しています。完璧ではないかもしれませんが、誰も完璧ではありません。

したがって、管理者が Scala を知らないという事実は、採用を決定する際の最良の議論ではないかもしれません。

于 2011-11-06T22:56:15.617 に答える