このステートメントは、静的に型付けされた言語がWebサイトには理想的でないことを示唆しています。
それをウェブサイトの構築と対比します。 Webページをレンダリングする場合、多くの場合、Webページ上で相互作用する非常に多くのコンポーネントがあります。ここにはボタンがあり、そこには小さなウィジェットがあり、Webページにはそれらが数十個あり、Webサイトにはすべて動的な数十または数百のWebページがある可能性があります。そのような非常に大きな表面積を持つシステムでは、静的に型付けされた言語を使用することは実際には非常に柔軟性がありません。 Scalaでプログラミングし、それを使ってWebページをレンダリングする場合、ボタンをインタラクティブにプッシュしたい場合などに苦労するでしょう。システム全体が一貫している必要がある場合、ボタン全体を移動できるようにするためだけに、システム全体でタイプチェックを行う必要があります。
出典: http://www.infoq.com/interviews/kallen-scala-Twitter
これは正しいです?なぜですか、なぜそうではありませんか?
まったくそう思わない。システムが大きくなるにつれて、静的に型付けされた言語はコンポーネントレベルでの堅牢性を保証し、システムレベルでの柔軟性を保証します。
また、作成者が示した例は、実際には意味がありません。むしろ、この男は、アヒルのタイピング以外の方法でポリモーフィズムを実現できることを知らないようです。
動的言語が優れていると主張する人はたくさんいますが、それは通常、たとえば構造サブタイプ、代数的データ型、および1次関数をサポートする表現型システムの経験の欠如に基づいています。
まず第一に、上記の声明の著者はウェブサイトの開発について話していることを覚えておいてください。したがって、彼はプレゼンテーションの開発について心配しており、Scalaは適切な選択ではないだろうと考えているところです...
そうは言っても、私はWeb開発の経験が豊富です。私はそれと専ら少なくとも8年間、デジタルエージェンシーで5年間働いてきました。
そして、はい、私の経験では、静的に型付けされたコンパイルされた言語でプレゼンテーションレイヤーは大きな障害になる可能性があります。コンテンツは、ビジネス要件よりも頻繁に、絶えず変更する必要があります。そして通常、これは別個のチーム(「フロントエンド」開発者)が行う必要があります。彼らは通常、HTML、JavaScript、Web標準、CSSについてはよく知っていますが、JavaやC#などのサーバー側の言語についてはあまり詳しくありません。また、テンプレートのあらゆる種類の変更がimmediatelyavailable;それらはコンパイルとタイプエラーには使用されません。そしてそれらは正しいです:静的に型付けされた言語は、データアクセスやビジネスルールなどの難しい複雑な要件に非常に適していますが、インターフェース開発に適しています。
これは、実際には Velocity のような特殊化され解釈されたテンプレート言語を使用する主な利点の1つです。その使いやすさ、パワー、柔軟性は、プレゼンテーション層の開発者に適しています。そして、サーバーサイドの人たちは、他のあらゆる場所で真剣に静的に型付けされた言語を自由に使用できます...
ただし、Scalaは多少異なることにも同意します。同時に、Javaよりもはるかに冗長でなく表現力が高いため、できたはずですプレゼンテーションの開発に使用します-テンプレート言語としてうまく使用できるかもしれません。そして、 Play (変更のたびにWebサイトを自動的にコンパイルする)のようなフレームワークに組み合わせることができる場合は、それでも勝者のIMHOかもしれませんが、それでもPlayでもGroovyに似た(動的)テンプレート言語を選択していますが、これは良い兆候ではありません。
要約すると、Scalaの問題は、コンパイルされているという事実とより関連しています。実際、その型推論メカニズムにより、がほとんどになります。静的に型付けされていることも忘れてください。
(そして、私の英語については申し訳ありません。何かが明確でない場合は、私に教えてください、それを修正しようとします。)
テキスト(およびほとんどの回答)は静的に型付けされた言語と過度に冗長言語が混在していると思います。もちろん、共通部分は非常に大きいです(特に、最も主流の言語のみを検討する場合)。しかし、非冗長で静的に型付けされた言語のいくつかの興味深い例があります:Go、Haskell、Scala、Rust…
Bruce Eckelの 強力なタイピングと強力なテスト を読むことをお勧めします。主な議論は、ソフトウェアの品質はすべてテストに帰着するということです。さまざまな方法でテストできます。コンパイラーはコンパイル時にいくつかのことをテストします。文字列をint変数に格納しようとすると、おそらくあなたに吠えます。動的言語では、多くのテストが実行時に行われます。最終的には、テストがいつ発生するかは問題ではありません。それはただ起こらなければならない。動的言語でコンパイルしないと、実行時にテストが失われます。すべてをしっかりとテストしますよね?
それを踏まえると、動的な言語に対する固定型システムを使用するコンパイル済み言語の優先順位は、まさにそれです-優先順位。一種のボクサー対ブリーフまたは皮ひも対フランスのニッカー。正解も不正解もありません。正しい姿勢でそれらを着用してください。
ほとんどの場合、私はそれに同意します。それに直面することができるので、Webプラットフォームでクライアントを扱う場合、柔軟性は必須です。
静的に型付けされた言語は、動的に型付けされた言語よりも堅牢で安全です。
したがって、テクノロジーをマージする変更がある場合は、静的に型付けされた言語でコアを作成し(コアはあまり変更されない)、ユーザー操作に動的に使用することをお勧めします。
私はこの投稿の著者がScala自身を調べたことはないと思います。JavaとC#には制限があり、Web開発には柔軟性がありません。 Scalaは静的に型付けされた言語であり、これを聞いたときの通常の考えとはかなり異なります。Scalaは、アヒルのタイピングとタイプセーフバージョンを可能にしますモンキーパッチ(暗黙的な変換による)です。型について考える必要があるため、プログラミングライブラリは少し複雑になりますが、Liftのようなライブラリを使用するだけであれば、コンパイラが通知することを除いて、動的言語に非常によく似ています。あなたがそれを正しく使用しない明らかなバグについて私は個人的に、リフトWebフレームワークがRuby on Railsまたは同様のもの)から非表示にする必要がないと思います。コード例 here または here で、自分で決定します。私はかなりの間リフトで開発を行っており、タイプエラーが発生することはなく、 "Ah男ならこれは動的でした。」...動的だった場合、ランタイム中にクラッシュするまでバグがあることを知らされなかっただけです。
個人的には、彼らが言うことは、ウェブサイトだけでなく、どのシステムにも当てはまると思います。ハードウェアと対話するときは静的型付けが必要になります。それ以外のすべての動的型付けには、実際に何をしても同じ欠点と利点があります。最適な方法は、プロジェクトごとの好みと特定の問題によって異なります。
実用的な回答:ウェブのサイズと複雑さによって異なります。小さなウェブサイト、動的プログラム。言語、複雑な大規模Webサイト、静的プログラムlang。
退屈な答えの拡張:多くの開発者は、Webサイトは動的プログラムで実行する必要があると主張しています。 langr。しかし、真実は、結局のところ、Web開発ツールは静的型付き言語を使用またはエミュレートする傾向があるということです。
私はPHP=で数回作業しましたが、遅かれ早かれ、静的型付きプログラム言語で暗黙的に与えられたデータの型を検証する多くのコードを追加する必要がありました。
型付きラグ。 I.D.E.の使用にも役立ちます。 (s)、それは多くの型検証を必要とします。
(あなたの隣人のプログラムとコンパイラのデザイナーが持ってきました;-))
同意しますほとんどのWebフロントエンドC#コードを見ると、文字列からのキャストやデータの文字列へのシリアル化がたくさんあります。基本的に、プロトコルとしてのHTTPは動的言語に適しています。