18

私は Smalltalk を始めてから 10 年以上 Java プログラマーをしています。次の大きな言語は、ユビキタスな Java 仮想マシン上で動作する言語になる可能性が高いというのが私の意見です。Scala が (他の言語の中でも) 持っている機能のいくつかを利用したいと思います -caseクラス階層、クロージャ、型推論のステートメント。Smalltalkに少し近づいた!

Java の第二​​の性質であるすべてのもの:

  • で構築ant
  • アプリケーション/ライブラリを論理jarsにデプロイする
  • 優れた IDE ツールのサポート
  • GUI を書く (または、ある種のリモーティングを介して Swing GUI に話しかけさせる?)
  • サードパーティのライブラリ/フレームワーク
  • 構成 (プロパティXMLなどSpring)
  • DBドライバーなど

お気に入りのプロジェクトで遊んでいることと、実際にそれを職場で怒らせて使用することの違いが少し大きすぎるのではないかと心配しています.

  1. この飛躍を遂げた人はいますか?
  2. それは価値がありました?
  3. どのような教訓を学びましたか。

(明らかに、人々はScalaを使用しています。しかし、より適切な言葉が必要な場合、エンタープライズアプリケーションを実際に構築している人はいますか?)

4

8 に答える 8

6

ジョナス・ボネール: http://jonasboner.com/2009/01/30/slides-pragmatic-real-world-scala.html

于 2009-02-17T02:02:13.080 に答える
6

Hibernate + JBoss の理解不足が原因で発生した同じ問題をデバッグするのにうんざりしていたので、前回のプロジェクトでは基本的に Scala コードで全員を頭から殴りました。(本当にすごいです。元のシステムを書いた開発者はまだそこにいて、Hibernate の詳細に夢中になっています。)

私たちが持っていたもの -> いくつかのSQLと一緒に投げられたいくつかの休止状態コードと一緒に配線された一連のステートレスEJB Beanで主に構築された風変わりなシステム。(私たちは基本的に ASP です。実稼働クラスターはかなり小さく、約 100 台のマシンしかありません。)

私がしたこと -> さまざまな REST ベースのサービスをまとめ、いくつかのサーバー間の RPC を再定義しました。これにより、すべてのコーディングが非常に簡単になり、さらに、依存関係に注意が払われていないシステムにパブリック API を実装できます。

これまでのところ、実際の問題なく JBoss インスタンスの内外にコードをデプロイし始めました。Java で初めて Scala を使おうとすると、objectおそらく鼻にしわが寄るでしょう。しかし、そうでなければ、誰も本当に気づきませんでした。

現在、本格的に活動を始めて約5ヶ月。私たちはいくつかの主要な改訂を行い、その後遅れをとっていますが、システムは以前よりもはるかによくテストされています. そのため、実際にシステムを学習しているときにいくつかの悪いアイデアが入り込んできましたが、今ではそれらをすべて削除して、本番環境への展開に非常に近づくことができました。全体として、Java プログラマーのようにコーディングをやめて、ほとんどの標準ライブラリーに「慣れる」には、一般的な人が 2 ~ 3 か月かかると思います。

ORM システムの代わりに JDBC コードを書くことで、基本的に、パフォーマンスの問題のほとんどすべてが解消されました。速度は実際には大幅に向上しましたが、それは主に、より少ない実際のアプリケーション コードでやりたいことをすべて実行できたためです。

私が使用しているツール:

  1. Restlet : このフレームワークにとても満足しています。私たちの restlet 層はとてつもなく些細なコードです。
  2. JDBC -> 注: 基本的に wiki にあったものを微調整しました
  3. XML (そして間もなく JSON)
  4. buildr、変換したくないいくつかのプロジェクト(およびNexusとHudson)のmaven。私は sbt を試していますが、これはすでにscala プロジェクトにとって非常に優れています。

古い Java ライブラリを再利用することに関してまったく問題はありませんでしたが、スケーラ化されたレイヤでそれらをラップする傾向があります。ほとんどの場合、コードの記述を減らすためです。

そして、pimp my libraryパターンは、慣れ親しむべき最も重要なものです。「ケーキ」パターンは素晴らしいですが、インスタンス化を制御する必要があり、あまり役に立ちません。また、混合環境で Guice を使用したこともありますが、それほど難しくはありません。しかし、コードを混在させることは、最初に考えていたよりもはるかに役に立たないことがわかりました。

私の編集環境は主に OS X 上の TextMate ですが、Linux サーバーにデプロイしています。

PSはい、これが約4か月前のものであることは知っていますが、何でも構いません。これは、特に経験を積んだ今では重要です。

于 2009-06-05T21:03:45.693 に答える
2

参照:Scalaアプリケーションの実際の例?

于 2009-02-17T11:17:29.297 に答える
2

私は関連リンクでこれを見て、私がチャイムを鳴らそうと考えました.今、私たちは数年先にいます.

IDE のサポートは大幅に改善されました。IntelliJ 11 は現時点でかなり優れた Scala をサポートしています。構文の強調表示はうまく機能しますが、デバッグはまだ少し面倒です。

SBT は急速に maven や ant/ivy に取って代わりつつあるように見えます。ありがたいことに、SBT は Maven よりもはるかに扱いやすく、Scala にはるかに適しています。IntelliJ for one には SBT コンソールもあり、インタラクティブなデバッグと組み合わせることで、Scala でのデバッグを非常に迅速に行うことができます。Scala は Java よりもはるかにフローが良く、エラーが発生しにくいコードにつながるようです。

データベースとのやり取りはまだ未解決のようですが、データベースを何らかの方法ですばやく操作できる、それほど悪くないフレームワークがいくつかあります。

現時点では、サードパーティのライブラリとフレームワークが豊富にあり、もちろん、従来のプレーンな Java サードパーティ ライブラリを引き続き使用できます。

この時点で、疑問が残ります。プロジェクトに Scala や別の次世代 JVM 言語を使用しないのはなぜですか? 簡単な答えは、多くの開発者が今日 Scala を扱う準備ができていないということですが、正直なところ、彼らは集合的なロバを理解してゲームに参加する必要があり、その使用を義務付ける会社は長く続くでしょう。それを実現する方法 (私たち全員が、ゲームに戻るために時々プッシュする必要があります)。さらに、何らかの「エンタープライズ」または大規模な開発を行っていて、関数型プログラミングを理解していない、または理解できない場合は、私たち全員にお願いし、IDE を降ろしてください。 vimを禁止するか、スクリプトに固執するか、新しいキャリアパスを見つけてください。

現在、Scala を活用している著名な企業は数多くありますが、その中で最も知名度が高いのはおそらく Twitter でしょう。また、フレームワークの一部をオープンソースの世界にも提供しています。

于 2011-12-31T15:01:28.353 に答える
2

ケプラーミッションの科学オペレーション センターで使用されるソフトウェア インフラストラクチャに clojure を追加しました。現在、インタラクティブなデバッグを行うためにあります。REPL を実行し、いくつかのクラスをロードし、アドホックな方法でメソッドを実行します。

編集:OK、「いくつかのクラスをロードしてメソッドを実行する」はあいまいです。たとえば、crud クラスをロードし、メソッドを実行して、ある種類の宇宙船の時間を別の時間に変換できます。

user=> (import '(gov.nasa.kepler.hibernate.dr LogCrud))
user=> (def crud (新しい LogCrud))
#'ユーザー/クルード
user=> (def shortCadences (.longCadenceToShortCadence crud 0 2500))
user=> (prn shortCadences)
#>

この時間をデバッグに役立つ他の種類の時間形式に変換するために呼び出すことができる他のメソッドがあります。このすべての機能をカプセル化するコマンド ライン ツールを作成することもできますが、すべてが clojure から利用できるため、その必要はありません。

于 2009-02-16T23:44:08.853 に答える
1

はい、人々は実際の「エンタープライズ」アプリケーションを Scala (および Clojure) で構築しています。早くやれよ。

もちろんSmalltalkも使っているので、Smalltalkが好きな人は使ってみませんか?

于 2009-02-16T23:18:17.403 に答える
0

数ギガバイトのデータをロードするために、「試行錯誤」で一度使用しました(私たちが行っていることに対してはかなり軽いワークロードです)。PyPy よりもパフォーマンスが高く、メモリ オーバーヘッドが少ないことを期待していました。メモリ使用量に関して、ひどく失敗しました。私はひどくぞっとし、それについて話したことを恥ずかしく思い、二度とそれを見ませんでした.

于 2013-05-20T19:33:05.263 に答える