質問

見本規約bandied周囲にプログラミングしているという曖昧な概念が盛うことができる。検索を示しているというお問い合わせをいただいておえスタックオーバーフローが加わることになった。どう意識の静的/動的コマンドプロンプトに言語が微妙に異なる強/弱いタイピングがその違いはeludesました。異なった源泉の見用の異なる意味にも使用条件にも相互.かかる協議についても、実際に聞には差額をいただきます。何ができるのであれば誰かがいこのスペルを明確にこだったと言えるでしょう世界が見えてきます。

役に立ちましたか?

解決

  • 静的/動的タイピング は約 タイプ情報を取得し(コンパイル時や実行時)

  • 強/弱いタイピング は約 どのよう厳重に 種別(例:るかどうかの言語そうとする暗黙的に変換したい文字列を数)

を参照 wikiページ より詳細な情報です。

他のヒント

また柔らかいスポットの用語とアマチュア用語プログラミング言語までな条件に"強い"、"弱い"タイピング, めにやって普遍的に合意した技術的意味があります。逆に、 静的タイピング このプログラム 確認前に実行される, では、プログラムが不許可になったとが始まります。 動的なタイピング この種類 価値観 確認 執行, と、低入力動作の原因にプログラムの停止又はその他 信号エラーは、実行時.原因の静的な文字を打つことは、プログラムがこのような"というダイナミック型の誤り".

強力タイピング 一般的に、ということになります。 な抜け穴 タイプシステムに対し 弱いタイピング 意味するタイプシステムsubverted(無効に保証).の条件が正しく意味する静的-動的文字を入力すの違いに考えてみてくださいC:の言語の型チェックがコンパイル時に静的タイピング)川岸の遊歩道沿いにあるネ;おでんキャストの値の任意の型別のタイプと同じサイズ---特に、キャストポインタの種類を自由自在です。パスカルでした言語とすると、強く型付けされたも有名なた不測の抜け穴:異形記録のないタグにします。

実装強く型付けされた言語が得の抜け穴の時間を通常ように、実行時システムで実現できるものを高いレベルの言語です。例えば、Objective Caml機能という Obj.magic の実行時の効果に戻るだけという、その引数がコンパイル時間に変換型のその他のタイプです。私の好きな例は、Modula-3、デザイナーというそのタイプの鋳造の構築 LOOPHOLE.

とはいえ、できないカウントを他の二人の言葉で"強い"、"弱い"と正確に同じものとして扱われます。◆ないようにしてください。

簡単に言うとこのようになっております:a 静的型付き言語 のタイプ 静的, う一度設定した変数、型、変更はできません。でタイピングは関連する変数ではなく、価値"のことです。

例えば、Java:

String str = "Hello";  //statically typed as string
str = 5;               //would throw an error since java is statically typed

動的型付き言語 のタイプ 動的, ときの変数のタイプを変更することができます。でタイピングに関連付けられた値ではなく変数です。

例えば、Python:

str = "Hello" # it is a string
str = 5       # now it is an integer; perfectly OK

一方で、 強/弱いタイピング 言語は黙示的に型変換の一部から@-ダリオ-マの解答):

例えば、Python:

str = 5 + "hello" 
# would throw an error since it does not want to cast one type to the other implicitly. 

はPHP:

$str = 5 + "hello"; // equals 5 because "hello" is implicitly casted to 0 
// PHP is weakly typed, thus is a very forgiving language.

静的タイピングでチェック型を正確にコンパイルす。静的型付き言語は普通作成し、動的に入力言語の解釈。そのため、dynamicly型言語でチェックできるタイピングます。

オブジェクトの種類は、文脈に応じて変更することができる弱いタイピング手段。あなたはそれに別の番号を追加した場合、弱く型付けされた言語の文字列「123」で例えば数123として処理することができます。弱い型付けを持つ言語の例としては、bashの、AWKとPHPです。

弱く型付けされた言語の別の種類は、メモリ・アドレスのデータを鋳造することにより、異なるタイプとして扱うことができるC、である。

、強く型付けされた言語でオブジェクトの種類は変更されません - intは常にint型とエラーになり、それを文字列として使用しようとしています。 JavaとPythonの両方が強く型付けされます。

タイプルールが適用されたときに、

は、動的および静的型付けとの差です。静的型付け言語では、すべての変数とパラメータの種類は、ソース内で宣言する必要があり、コンパイル時に適用されます。それらが実行時に使用された場合、動的型付け言語では種類がのみチェックされます。 Javaは静的に型付けされ、Pythonが動的型付けされてます。

ただし境界は時には少しぼやけることができます。 Javaは静的に型付けされたものの例えば、毎回あなたが反射や、彼らはあなたが実行時に型チェックを延期している(例えば、オブジェクトのコンテナを使用して)キャストを使用します。

同様に最も強く型付けされた言語はまだ自動的に整数と浮動小数点数(およびいくつかの言語でabitrary精密BigInts)との間で変換します。

現在の研究に関してで出会ったこの記事 http://blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html エンジンオイルクーラーまで多くのものかと思ったので追加-一部の回答です。

強弱入力:

というタイプシステムの分類は"強い" または"弱い" これは不幸なことから、この言葉はほとんど 意味です。での範囲が小範囲に止まる比較することができるように二つの 言語の類型システム、および指定について有 の強化の二つのシステム。その言葉ん ます。

静的及び動的な種類

これは非常にほぼ共通の区分タイプシステム があって意味があります。実は、意義が 多額[...]動的-静的タイプシステム 全く違うものは、その目標が一部 オーバーラップできます。

静的タイプシステムは機構によるコンパイラの検討 ソースコードを割り付けがラベルと呼ばれる"種"とは 構文を利用して推定について何かのプログラム ます。ダイナミック型システムは機構によるコンパイラ 生成コードのようなデータ(その素晴らしさを最初に紹介も そして"タイプ")を使用してメッシュ作成を開始します。の使用に同じ単語 "アカウントでログインをそれぞれの二つのシステムはもちろん、本当に完全に 偶然;ながとして論じられるようになった、というのに弱い 歴史的意義を持つものである。大きな混乱の結果から現している既存のものを探し出し 世界を見る"の"りつつあることを実感している同様のことも システム。ださい。

明示的な/暗黙の種類:

これらの条件を用いる参照をどの程度 コンパイルすが、静種類の部品のプログラム。すべての プログラミング言語おいて何らかの推論に関す。一部の しています。MLウ暗黙の種類な (数に応じて言語や拡張機能を使用タイプ 宣言が必要です。Java、Adaは非常に明示的なタイプ、 ひとつは、常に宣言するのにはなりえない。上記のい (比較的、CやC++など)に強い静的タイプ システム。

スコットののプログラミング言語語用論の第3版ページ291は、我々が持っている

から

  

型チェックは、プログラムが従うことを保証するプロセスであります   言語の型互換性規則。ルールの違反が知られています   タイプの衝突など。それならば、言語は、を強く型付けされたのと言われています   言語の実装は、強制できるような方法で、禁止しています   に意図されていない任意のオブジェクトへの操作の応用   その操作をサポートしています。言語があれば、静的に型付けされたののと言われています   それは強く型付けされ、型チェックは、コンパイル時に行うことができます   時間。用語の厳密な意味では、いくつかの言語は静的です   入力されました。実際には、termisは、多くの場合、言語に適用されるもので   ほとんどの型チェックは、コンパイル時に行われ、残りの缶することができます   実行時に実行されます。

     

いくつかの例:エイダが強く型付けされており、ほとんどの部分について   静的に型付け(特定のタイプの制約は、実行時にチェックする必要があります   時間)。パスカルの実装はまた、型チェックのほとんどを行うことができます   コンパイル時に、言語は非常に強く型付けされていないが。   (7.3.4項で説明する)タグなしバリアントレコードがあり、その   唯一の抜け穴。 C89はかなりよりも強く型付けされたその   前身の方言が、それでも大幅に少ない強く型付けされたよりも、   パスカル。その抜け穴は労働組合、subroutineswith変数番号を含めます   パラメータ、およびポインタと配列の相互運用性(なければ   )7.7.1項で述べました。 Cの実装はめったにチェックしません   実行時に何ています。

     

動的(実行時)型チェックは、遅延バインディングの形態であり、そして傾向   実行時まで他の問題を遅らせるの言語で発見されます   うまく。 LispとSmalltalkのは(ただし強く)動的型付けです。最も   スクリプト言語も動的型付けされています。いくつかの(例えば、Pythonと   Rubyは)強く型付けされています。動的スコープを持つ言語は、一般的に   動的型付け(またはすべてで入力されていない):コンパイラができない場合   名前が参照するオブジェクトを識別し、それは通常決定することができません   いずれかのオブジェクトの種類ます。

静的型付け、および動的言語のための実行時のコンパイル時間を:だから、簡単な言葉で、静的/動的な型付けは型チェックが発生した時間を指します。同様に、強い/弱い型付け言語は、その型システムを施行しているどのように積極的に言及します。

私は以下の投稿した素敵な図、にスコットの説明を翻訳しようとしました。

と思い、他の同僚た良い仕事があります。の違いを説明すると静的-動的文字を入力すしたことが強く、弱いタイピングに関すが存在すると言われてい 異なる理解に/す。

この二つの例:

  • このウは強く型付けされたのでとはできませんへ 他の 型換。

  • その他(例:-ダリオ)という言語のできる"暗黙的に変換から文字列を数字を目的としたものはweakly型のものその他の電話だけで鴨文字を入力す

両方の諸表ハイライトとなり、逆極型のシステムが全く異なる側面がある。いんさんラムゼイのビューを使用しない条件を"強い"、"弱い"と区別するタイプシステム。

静v/s動的型付き言語

  • 静的型付き言語であるタイプのチェックは行われコンパイル時にこもることにより、静的に入力言語の各変数には、型および変更等はできませんのでのコースです。 現在、対照的に、 動的型付き言語である型チェックを行いランタイム時において、ある型チェックをコンパイル時に、このものというのはいかかでしょうかを動的に入力言語がなくてもかまいません型に関連する変数, した場合にはタイプに関連してできる汎用タイプのような"var"をJSる良いとされており、名前も一字ずつの文字列ることができます。
    • "実装の動的な型チェック言語が一般的准各実行時のオブジェクト型タグ(すなわち、参照型)を含んでいる型情報です。この実行時の型情報(RTTI)を実装するために使用することも動を派遣し、結合、鋳造、反射、同様の特徴です。"
  • 場合でも言語の静的入力がになりますので注意してください一部を動的に入力特徴的な何らかの型チェックを実行します。この鋳物の種類です。
    • "数多くの便利な、共通のプログラミング言語の特徴をチェックできないので静などを下ります。このように、多くの言語の両方の静的-動的タイプチェック;の静的な型チェッカーの検証に何ができるのはダイナミックチェックの検証についてご覧いただけます。"
  • "言語によるコンピュータのないタイプ安全です。例えば、C、プログラマーで自由にキャストの間の値(上下限値をあらゆる二種類のサイズです。"
  • の"静"入力言語る
    • ほかの型のチェックは行われコンパイル時にも通訳者または実行時の走行可能でフルスピードを気にせず、です。
    • それに少数の実行時の例外やエラー関連のタイプ、その型のチェックは行われコンパイルす。
  • 活用"を動的に"入力言語る
    • 彼らが極めて高速試作、開発を必要としないを理解するタイプシステム機器では緩やかに作変数とで、これは非常に速いプロトタイピング
  • リストの静的、動的型付き言語:
    • 静的:
      • Java
      • Cは静的型付き言語が少ない"強く"を入力と比較してJavaできるようにするために、より暗黙変換)
      • C++
      • C#
    • 動的に:
      • PERL
      • PHP
      • Python
      • JavaScript
      • Ruby
  • タイプチェックが重要なセキュリティ特徴です。 仮に、あな型チェック方法を受け入れ型のオブジェクト"BankAccountる"という手法として"creditAccount(BankAccountDetails)"現在実行時の場合はタイプチェックしいパスオブジェクトのクラスは同じ方法"creditAccount(BankAccountDetails)"となりますの実行を考慮し、さまざまなオブジェクト指向言語でOOPに対応しておらず、メニューの多型"は、こうした議論のなかで、"型".なので、基本的にオブジェクト指向言語的なも対応しておらず、メニューの多型")がない強力な型チェックでセキュリティの問題に取り組む。

強v/s弱型言語

  • 強く型付けされた言語"については暗黙的に変換できない損失の精度。たとえば、Java、キャストの"int長"がありませんの精度の損失とはできません"暗黙のうちに"キャストの"長さをintであばらくお待ちいただきますよう精度。これに対し、弱を入力言語を暗黙的に変換を許可がある場合にも損失を精度。
  • と思いを動的に入力言語のもの、強く型付けされた言語の場合は"実行時に"することがない暗黙変換が失ます。

良さらに読み

静的には、言語は、一般的に、その後のエラーを減らすために、コンパイル時にチェックされている変数の型を宣言する必要が入力しました。 「静的に型付けされた」の語「静的」は、それを実行する前にコードを検査するプロセスである「静的コード分析」を指します。それは表現や実際のパラメータの右側から変数の型を推論するために静的型付け言語のために可能ですが、実際にはほとんどの静的型付け言語は、明示的に宣言するために、変数の型を必要とします。

動的には、言語は、一般的なタイプを持っている変数の宣言を必要としないタイプされた、と彼らは、関数呼び出しにすべての代入文や実際のパラメータの右側を評価した結果として計算タイプに基づいて、変数の型を推論します。変数はその寿命にわたって複数の割り当てを与えることができますので、その種類は、時間の経過とともに変化することができ、それが「動的型付け」と呼ばれている理由です。また、ランタイム環境は、型が値ではなく、変数の宣言でバインドされているので、各変数の現在のタイプを追跡する必要があります。これは、実行時型情報(RTTI)システムとみなすことができる。

静的および動的型付け言語の要素を組み合わせることができます。たとえば、C#は、一般的にダウンキャストサポート型の階層を静的および動的型付け変数、およびオブジェクト指向言語の両方をサポートしています。静的に型付けされた言語は通常、鋳造、反射及び動的呼び出しを使用して、例えば、バイパス型チェックする様々な方法を、提供する。

強い対弱い型付け言語は、それが実際には別のタイプであるとき、それは一つのタイプであるかのように起因する変数を使用してバグを防ぐためにしようとどのくらいの連続を指します。 CとJavaの両方が静的型付け言語されているたとえば、しかしJavaはCで次のCコードをコンパイルして実行して幸せで、最も可能性の高いAを引き起こし、実行時に変数bにランダムな値を置くよりもはるかに強力な型チェックを使用していますバグます:

char *a = "123";
int b = (int)a;

同等のJavaコードは、一般的に好ましいコンパイルエラーを生成します

String a = "123"
int b = (int)a;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top