タグ付けされた質問 「dynamic-typing」

動的型付けは、型チェックがほとんど実行時に実行されるプログラミング言語のプロパティです。

20
静的型付けはトレードオフの価値がありますか?
主にタイプセーフがないPythonでコーディングを開始し、次にC#とJavaに移行しました。Pythonでの作業が少し速くなり、頭痛が少なくなることがわかりましたが、C#およびJavaアプリの複雑度ははるかに高いため、Pythonに本当のストレステストを与えたことはありません。 JavaとC#のキャンプは、タイプセーフティが適切に設定されていないように聞こえます。ほとんどの人は、あらゆる種類の恐ろしいバグに遭遇し、その価値以上の問題を抱えています。 これは言語の比較ではないため、コンパイル済みと解釈済みなどの問題に対処しないでください。型の安全性は、開発の速度と柔軟性に打撃を与える価値がありますか?どうして? 動的型付けのほうが速いという意見の例を望んでいた人たちに: 「開発中に動的に型指定された言語を使用します。これにより、フィードバック、ターンアラウンドタイム、および開発速度が速くなります。」- http://blog.jayway.com/2010/04/14/static-typing-is-the-root-of-all-evil/

7
動的型付けではどのような機能が許可されますか?[閉まっている]
私は数日前からPythonを使用していますが、動的型付けと静的型付けの違いを理解していると思います。私が理解していないのは、どのような状況下でそれが好ましいかということです。柔軟性があり読みやすいですが、実行時のチェックが多くなり、ユニットテストが必要になります。 柔軟性や読みやすさなどの非機能的な基準とは別に、動的型付けを選択する理由は何ですか?そうでなければ不可能な動的型付けで何ができますか?動的型付けの具体的な利点を示す具体的なコード例は何ですか?

9
動的型付けの生産性向上とは何ですか?[閉まっている]
動的に型付けされた言語は、静的に型付けされた言語よりも生産性が高いという主張をよく耳にしました。この主張の理由は何ですか?構成よりも規約、関数型プログラミングの使用、高度なプログラミングモデル、一貫した抽象化の使用など、最新のコンセプトを備えたツールではありませんか?確かに(たとえばJavaの場合)冗長な型宣言が必要ないことが多いため、混乱が少なくなりますが、静的型付けのその他の利点を失うことなく、型推論を使用する静的型付け言語のほとんどの型宣言を省略することもできます。そして、これらのすべては、Scalaのような最新の静的型付け言語でも利用可能です。 それでは、動的型付けの生産性のために、型モデル自体の利点であると言えるものは何ですか? 明確化:クイックハックよりも大/中規模のプロジェクトに興味があります。:-)

5
プロジェクトの規模と言語の厳密さとの間に相関関係はありますか?
私の同僚に言語の厳密さとパラダイムの違いを説明して、私は次のように断言しました: 動的言語やインタープリター言語などのトレラント言語は、プロトタイプや小規模プロジェクト、または中規模のWebアプリケーションに最適です。Node.jsでPythonやJavaScriptなどのエレガントな動的言語を選択する場合の利点は次のとおりです。 迅速な開発、 定型コードの削減、 Javaのような「企業言語」から逃げる若くて創造的なプログラマを引き付ける能力。 静的に型指定された/コンパイルされた言語は、ビジネスに不可欠なアプリや、中規模から大規模のアプリ向けのアプリなど、より厳密なものが必要なアプリケーションに最適です。 数十年にわたって開発された有名なパラダイムとパターン、 静的チェックの容易さ、 数十年の経験を持つ多くのプロの開発者を見つける能力。 Haskell、Adaなどの厳格な言語、またはC#のコードコントラクトなどの手法は、ライフクリティカルなシステムや非常に安定していると予想されるシステムなど、柔軟性よりも安全性を重視するシステム(Has​​kellが非常に柔軟である場合でも)に適しています。利点は次のとおりです。 コンパイル時に可能な限り多くのバグをキャッチする機能、 静的チェックの容易さ、 正式な証明のしやすさ。 しかし、大企業が大規模プロジェクトに使用している言語と技術を見ると、私の主張は間違っているようです。たとえば、Pythonは、YouTubeやその他のGoogleアプリケーションなど、重要な量の厳密性を必要とする大規模システムに使用されています。 プロジェクトの規模と使用すべき言語/パラダイムの厳密さとの間にはまだ相関関係がありますか? 考慮するのを忘れた3番目の要因はありますか? 私はどこが間違っていますか?

7
動的対静的型付け言語の研究[終了]
静的に型付けされた言語と動的に型付けされた言語の有効性に関する研究はありますか? 特に: プログラマーの生産性の測定 不良率 単体テストが採用されているかどうかの影響も含まれます。 私はどちらの側の長所についても多くの議論を見てきましたが、だれかがそれについて研究したかどうか疑問に思っています。

14
動的に型付けされた言語の単一の関数から異なるデータ型を返すのは悪い考えですか?
私の第一言語は静的に型付けされています(Java)。Javaでは、すべてのメソッドから単一の型を返す必要があります。たとえば、条件付きでを返すメソッドStringや、条件付きでを返すメソッドを持つことはできませんInteger。しかし、たとえばJavaScriptでは、これは非常に可能です。 静的に型付けされた言語では、これが悪い考えである理由がわかります。すべてのメソッドが返された場合Object(すべてのクラスが継承する共通の親)、あなたとコンパイラはあなたが何を扱っているのか分かりません。実行時にすべての間違いを発見する必要があります。 しかし、動的に型付けされた言語では、コンパイラーさえ存在しない場合があります。動的に型付けされた言語では、複数の型を返す関数が悪い考えである理由は私には明らかではありません。静的言語の私のバックグラウンドにより、このような関数を書くことは避けられますが、コードを見えないようにすっきりさせることができる機能については気にされているのではないかと心配しています。 編集:私の例を削除します(より良い例を考えることができるまで)。私がやろうとしているのではない点に返信するように人々を誘導していると思います。

5
典型的な「動的言語の間違い」を回避する方法は?
私は最近、膨大なユーザーベースから利益を得たいと思ったため、JavaScriptに数時間を費やしました。そうすることで、ほとんどの人が動的言語に起因するパターンに気付きました。物事は本当に迅速に機能しますが、コードが特定のサイズに達すると、一般的にタイプ、スペル、リファクタリングのエラーで多くの時間を無駄にします。コンパイラが通常私を免れるエラー。また、別のモジュールでタイプミスをしたばかりのときに、ロジックのエラーを探す必要はありません。 JavaScriptや他の動的に型付けされた言語に続く信じられないほどのことを考えると、私のアプローチに何か問題があると信じるようになりました。または、これはあなたが支払わなければならない価格ですか? もっと簡潔に言うと: 〜2000 LOCでJavaScript(またはその他の動的言語)プロジェクトにどのようにアプローチしますか? これらの間違いを防ぐためのツールはありますか?私はFacebookとJSHintによるフローを試みましたが、これは多少役立ちますが、タイプミスはキャッチしません。

9
動的型付け言語はすべての批判に値しますか?[閉まっている]
企業でのプログラミング言語の選択に関するインターネット上の記事をいくつか読みました。最近、Ruby、Python、PHP、Erlangなど、多くの動的型付け言語が普及しています。しかし、多くの企業は、C、C ++、C#、Javaなどの静的型付き言語を引き続き使用しています。 そして、はい、静的型付き言語の利点の1つは、プログラミングエラーが実行時ではなくコンパイル時に早く検出されることです。しかし、動的型付け言語には利点もあります。(ウィキペディアの詳細) 企業がErlang、Ruby、Pythonなどの言語を使用し始めない主な理由は、それらが動的に型付けされているという事実のようです。それが、StackOverflowの人々がErlangに反対する決定をする主な理由でもあるようです。Erlangに「反対」と決めた理由をご覧ください。 しかし、企業における動的型付けに強い批判があるように思えるが、それは、なぜ私は本当にそれを取得しないことに強いです。 本当に、なぜ企業では動的型付けに対してそれほど多くの批判があるのですか?それは本当にプロジェクトのコストにそれほど影響しますか、それとも何ですか?しかし、多分私は間違っています。

9
Pythonのような動的に型付けされた言語でのみ可能なデザインパターンはありますか?
関連する質問を読みました。Pythonのような動的言語には不要なデザインパターンはありますか?Wikiquote.orgでこの引用を思い出した 動的型付けのすばらしいところは、計算可能なものをすべて表現できることです。また、型システムはそうではありません—型システムは通常決定可能であり、サブセットに制限されます。静的型システムを好む人は、「それでいい、それで十分だ。作成したいすべての興味深いプログラムが型として機能します。」しかし、それはばかげています。型システムができたら、どんな面白いプログラムがあるのか​​さえわかりません。 ---ソフトウェアエンジニアリングラジオエピソード140:Gilad BrachaによるNewspeakおよびPluggable Types 引用の定式化を使用して、「型として機能しない」有用な設計パターンまたは戦略があるのだろうか?

3
動的言語に本当の利点はありますか?[閉まっている]
まず、Javaが私がこれまでに使用した唯一の言語であると言いたいので、この主題に関する私の無知を許してください。 動的に型付けされた言語を使用すると、任意の変数に任意の値を入力できます。したがって、たとえば次の関数(psuedocode)を作成できます。 void makeItBark(dog){ dog.bark(); } そして、どんな値でも内部に渡すことができます。値にbark()メソッドがある限り、コードが実行されます。それ以外の場合は、ランタイム例外または同様の例外がスローされます。(これについて間違っている場合は修正してください)。 一見、これはあなたに柔軟性を与えます。 しかし、私は動的言語でいくつかの読書をしました。人々が言うことは、動的言語でコードを設計または記述するとき、静的に型付けされた言語と同じように、型について考えて考慮することです。 そのため、たとえばmakeItBark()関数を記述するとき、「 'えるもの」のみを受け入れるように意図しますが、これらの種類のものだけを渡すようにする必要があります。唯一の違いは、間違いを犯したときにコンパイラが通知しないことです。 確かに、このアプローチには1つの利点があります。つまり、静的言語では、「この関数はbarえるものをすべて受け入れる」ことを実現するには、明示的なBarkerインターフェイスを実装する必要があります。それでも、これは小さな利点のようです。 何か不足していますか?動的に型付けされた言語を使用することで実際に得られるものは何ですか?

2
Python(および他の動的言語)のどのセマンティック機能がその速度低下に寄与していますか?
私はPythonをよく知りません。動的言語(Python、Lua、Scheme、Perl、Rubyなど)の正確な機能が実装を強制的に遅らせていることを、より正確に理解しようとしています。 その一例として、Lua 5.3 メタテーブル機構は直感的にLuaを非常に遅くしますが、実際にはLuaは非常に高速(およびPythonよりも高速)であると噂されています。 また、私は現在のプロセッサ上のため、メモリがはるかに遅い生の計算よりであることを直感(おそらく間違ったものを)持っているラà、動的な型チェック((キャッシュミスでメモリアクセスが算術演算の何百ものと同じ時間が必要)if (value->type != INTEGER_TAG) return;でCの用語)は非常に高速に実行できます。 もちろん、プログラム全体の分析(スターリンスキームの実装のように)は、翻訳者が高速で実行されるため、動的言語の実装を行うことができますが、最初はプログラムアナライザー全体を設計する時間がないふりをしましょう。 (私はMELTモニターで動的言語を設計するようなもので、その一部はCに翻訳されます)

4
動的言語と静的言語のアーキテクチャの違い
静的言語(C#やJavaなど)と動的言語(RubyやPythonなど)で構築されるアプリケーションを設計するときに、アーキテクチャ上の大きな違いはありますか? 一方のタイプに適した設計で、もう一方のタイプに悪い設計の可能性はどれですか?一方のタイプでは実現できない便利な機能がありますが、他のタイプでは実現できません(もちろん、設計とアーキテクチャにおいて)。 また、ダイナミック固有のデザインパターンはありますか?

6
段階的な入力:「静的型システムを持つほとんどすべての言語には動的型システムもあります」
Aleks Bromfieldによるこの主張は次のように述べています。 静的型システムを持つほとんどすべての言語には、動的型システムもあります。C以外に、私は例外を考えることはできません これは有効な主張ですか?実行時のReflectionクラスまたはLoadingクラスを使用すると、Javaがこのようになりますが、この「漸進型付け」の考え方を多数の言語に拡張できますか?

2
実行時に取得される型からクラスを動的に生成する
C#(または他の言語)で次のことを行うことは可能ですか? データベースからデータを取得しています。実行時に、列の数とフェッチされた列のデータ型を計算できます。 次に、これらのデータ型をフィールドとしてクラスを「生成」します。また、コレクションにフェッチしたすべてのレコードを保存します。 問題は、実行時にステップ1と2の両方を実行することです。 これは可能ですか?現在C#を使用していますが、必要に応じて他の何かに移行できます。

3
ソフトウェアの品質に対する異なる言語の影響に関する経験的な研究はありますか?
関数型プログラミング言語の支持者は、関数型プログラミングによってコードについて推論するのが容易になると断言しています。静的に型付けされた言語を好む人は、コンパイラが型システムの複雑さを補うのに十分なエラーをキャッチすると言います。しかし、これらのトピックで読んだものはすべて、経験的データではなく、合理的な議論に基づいています。 プログラミング言語のさまざまなカテゴリが欠陥率またはその他の品質指標にどのような影響を与えるかについて、実証的な研究はありますか? (この質問に対する答えは、少なくとも動的と静的の議論については、そのような研究はないことを示しているようです)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.