「型なし」とは、学術的なCSの世界で「動的に型付けされる」という意味ですか?


166

「JavaScriptは型付けされていません」と書かれたスライドを読んでいます。これは私が本当だと思っていたものと矛盾していたので、私はより多くを試し、学ぶために掘り始めました。

すべての答えであるJavaScriptの型なし言語?JavaScriptは型付けされておらず、静的、動的、強い、弱い型付けのさまざまな形式の例を提供しており、私が慣れ親しんでいると満足しています。したがって、それは適切な方法ではありませんでした。

そこで私はJavaScriptの作成者であるBrendan Eichに尋ねたところ、

学術タイプは、「静的タイプがない」ことを意味するために「型なし」を使用します。それらは値が型を持っていることを確認するのに十分賢いです(そうです!)。コンテキストが重要です。

学問に焦点を当てたコンピューターサイエンスの人々は、「動的型付け」の同義語として「型なし」を使用しますか(これは有効ですか?)、またはこれよりも深いものはありますか?私は、コンテキストが重要であるというブレンダンに同意しますが、私の現在の「行きたい」本はこのトピックについてボールを演じていないので、説明の引用は素晴らしいでしょう。

私は私の理解を深めることができるように、そしてウィキペディアでさえこの代替の使用法を参照していないので(これはとにかく見つけることができます)、これを釘付けにしたいと思います。私が間違っている場合、将来この用語を使用したり、その用語の使用を疑ったりしたくありません:-)

(私はまた、Smalltalkが「型付けされていない」と言っているトップSmalltalkerを見たことがあるので、このクエストで私を始めたのは1回限りではありません!:-))


5
他の人の命名法の誤用は、あなたの習慣を形作る必要はありません-(もっと)正しいフレーズを使うだけです。明らかに、あなたは読書の問題を認識している必要があります。
Raphael

2
私はいつもそれを理解しました。変数は型なしであり、どの変数もあらゆるタイプのデータを保持できるからです。変数の内容のタイプは動的に変更できます
イズカタ


1
また(コンピュータ言語よりも自然言語についてもっと言っています) "untyped" = "single-typed"(すべての値に対して1つの型)。
philipxy 2016年

回答:


148

はい、これは学術文献における標準的な実践です。それを理解するには、「タイプ」の概念が1930年代にラムダ計算のコンテキストで(実際には、さらに以前は集合論のコンテキストで)発明されたことを知るのに役立ちます。それ以来、「型理論」として知られる計算論理の全分野が出現しました。プログラミング言語理論はこれらの基礎に基づいています。そして、これらすべての数学的文脈において、「タイプ」には特定の確立された意味があります。

「動的型付け」という用語はかなり後に発明されたものであり、「型」という単語の一般的な数学的な使用に直面すると、これは矛盾です。

たとえば、ベンジャミンピアスが彼の標準的な教科書「タイプとプログラミング言語」で使用する「タイプシステム」の定義は次のとおりです。

型システムは、計算する値の種類に従って語句を分類することにより、特定のプログラム動作がないことを証明する扱いやすい構文的方法です。

彼はまた次のように述べています:

ここで検討しているコンパイル時の分析の種類を、次のような言語で見られる動的または潜在的な型付けと区別するために、「静的」という言葉が明示的に追加されることがあります。スキーム(Sussman and Steele、1975; Kelsey、Clinger、and Rees、1998; Dybvig、1996)。ランタイムタイプのタグは、ヒープ内のさまざまな種類の構造を区別するために使用されます。「動的型付け」などの用語は間違いなく誤称であり、おそらく「動的チェック」に置き換える必要がありますが、使用法は標準です。

現場で働くほとんどの人々はこの見方を共有しているようです。

これは、「型なし」と「動的型付き」が同義語であることを意味しないことに注意してください。むしろ、後者は前者の特定のケースの(技術的に誤解を招く)名前です。

PS:そしてFWIW、私はたまたま型システムの学術研究者であり、JavaScriptの非学術実装者でもあるので、私は分裂主義と一緒に暮らさなければなりません。:)


5
それ非常に役に立ち、履歴を提供するという点で私のお気に入りの答えになるかもしれません。
Peter Cooper、

2
@PeterCooperところで、形式的なセマンティクスの1つの主要な分岐が型付きラムダ計算に基づいている(しゃれがある)ことを知っておくとよいでしょう。例:モンタギューセマンティクス。しかし、宣言的で非生成的なシステムとして、私は常に個人的に、モンタギューセマンティクスのようなシステムでのタイピングを、プログラミング言語でのタイピングから区分けしてきました。
知識理論

+1。"[dynamically typed] is a (technically misleading) name for a particular case of [untyped]"
スティーブ

1
これは「タイプ」の歴史については完全に正しくありません。それらはラムダ計算に関する教会の研究よりもさらに古い。ラッセルは集合論の構築においてパラドックスを回避するために型を使用しました。
Sam Tobin-Hochstadt 2013

1
@ SamTobin-Hochstadt、はい、そうです。私は、PLの基礎に直接関係する歴史の一部についてのみ話しました。明確にします。
Andreas Rossberg 2013

68

私はプログラミング言語を専門とするアカデミックコンピュータサイエンティストであり、そうです。「型なし」という言葉は、このように頻繁に(誤)使用されています。Forthやアセンブリコードなど、動的な型タグを持たない言語で使用するために単語を予約しておくとよいでしょうが、これらの言語はほとんど使用されず、さらに研究されることも少なく、「型なし」と言う方がはるかに簡単です。 「動的型付け」より。

Bob Harperは、SchemeやJavascriptなどの言語は、type:値が1つだけの型付き言語と見なす必要があると言っています。私はこのビューに頼っています。1つのタイプの形式だけを使用して、一貫した世界観を構築できるからです。

PS純粋なラムダ計算では、「値」は正規形の項のみであり、正規形の閉じた項は関数のみです。しかし、ラムダ計算を使用するほとんどの科学者は基本型と定数を追加し、ラムダの静的型システムを含めるか、動的型タグに戻ります。

PPS元のポスターへ:プログラミング言語、特に型システムに関して言えば、ウィキペディアの情報は質が悪いです。信用しないでください。


12
CS(学界を含む)には、厳密な定義なしに名前が使用されるというより広い問題があると思います。これは数学や(ほとんど?)科学とは全く対照的です。膨大な数の紛争(たとえばOOPに関する)は、この適切な定義の欠如に起因するようです。とてもうるさい。
Konrad Rudolph、

2
@KonradRudolph:適切な定義の欠如から生じる紛争ではなく、適切な定義の欠如が紛争から部分的に生じるのではないかと思います。一部の用語は感情的価値を獲得し(肯定的であれ否定的であれ)、特定の言語のサポーターは、それらの言語を含むまたは除外する(そしてお気に入りの「敵」言語を除外または含む)方法でそれらの用語を定義します。数学の例として、公理的集合論よりもナイーブ集合論を支持する人がまだいる場合、彼らは自分の見解を「公理的集合論」と呼び、「ナイーブ
ruakh

4
@ノーマン、私があなたがそれを誤用と呼んでいることに驚いています-ご存知のように、タイプの概念は数十年までにいわゆる動的型付け言語と呼ばれ、後者が「タイプ」と呼ぶものは前者とほとんど関係がありません。ですから、誤用はその逆であると言っても差し支えないと思います。
Andreas Rossberg

5
@ノーマン:プログラミング言語、特に型システムに関して言えば、ウィキペディアの情報の質が悪いと感じた場合は、それをそのままにして改善しないでください。(トローリングのみ)
Gyom

3
@Gyom私は、ウィキペディアンのプロセスは専門知識ではなく変化に報いることに気付いた日にウィキペディアの改善をあきらめました。私の時間はSOの改善に費やされます:-)
ノーマンラムジー

43

調べたところ、あなたの質問に対する答えは単純で驚くべきことに「はい」であることがわかりました。学術的なCSタイプ、または少なくともそれらの一部では、「動的に型付け」を意味する「型なし」を使用しています。たとえば、プログラミング言語:原則と実践、第3版(Kenneth C. LoudenおよびKenneth A. Lambert著、2012年発行)は次のように述べています。

静的型システムのない言語は、通常、型なし言語(または動的型付き言語)と呼ばれます。そのような言語には、SchemeやLisp、Smalltalkの他の方言、およびPerl、Python、Rubyなどのほとんどのスクリプト言語が含まれます。ただし、型なしの言語では、プログラムがデータを破壊することは必ずしも許可されないことに注意してください。これは、すべての安全性チェックが実行時に実行されることを意味します。[…]

[ リンク ](注:オリジナルでは太字)そして、このように「型なし」を使用し続けます。

私はこれは驚くべきことだと思います(afrischkeとAdam Mihalcinが与えるのと同じ理由で)、あなたはそうです。:-)


追加用に編集:"untyped languages" Googleブック検索にプラグインすると、さらに例を見つけることができます。例えば:

[…]これは主要な情報隠蔽メカニズムであり、多くの型なし言語です。たとえば、PLTスキーム[4]は生成structsを使用します[…]

— Jacob Matthews and Amal Ahmed、2008 [ リンク ]

[…]、型付けされていない関数型言語のバインディング時分析を提示します[…]。[…]これは実装され、Schemeの副作用のない方言の部分的なエバリュエーターで使用されます。ただし、分析は十分に一般的であり、Haskellなどの非厳密な型付き関数型言語に有効です。[…]

— Charles Consel、1990年[ リンク ]

ちなみに、これらの検索結果を調べた後の私の印象は、研究者が「型なし」関数型言語を記述した場合、型なしラムダと同じ意味で「型なし」であると考える可能性が非常に高いということですアダム・ミハルシンが言及している微積分。少なくとも、数人の研究者は、Schemeとラムダ計算を同じように述べています。

もちろん、検索言っていないのは、この識別を拒否し、これらの言語が「型なし」であると見なさない研究者がいるかどうかです。まあ、私はこれを見つけました:

その後、動的に型付けされた言語は型なし言語ではないため、循環が実際にはないことに気づきました。通常、プログラムのテキストから型がすぐに明らかにならないだけです。

—誰か(誰だかわかりません)、1998 [ リンク ]

しかし、明らかに、この身分証明書を拒否するほとんどの人は、明示的にそう言う必要性を感じません。


2
ワオ。ショッキング。情報をありがとう。
afrischke

私が探していたまさにそのような引用、ありがとう!この本はアマゾンで平均2つ星であることが怖いのですが、これ以上の引用は歓迎されていますが、これは素晴らしいスタートです。
Peter Cooper、

@PeterCooper:引用を追加するために回答を編集しました。彼らは、出版された論文から来ることによって、アマゾン格付けの問題を回避します:私が知っているすべてのために、それらはまだゴミであるかもしれませんが、少なくともアマゾンがそう言っていることを心配する必要はありません。:-P
ruakh

「型なし」と「動的型付き」を混同することは不合理です。開発者は非論理的であってはなりません。
rotman

10

型なしと動的型付きは、同義語ではありません。最もよく「型なし」と呼ばれる言語は、実際には単一化された言語であるラムダ計算です-すべてが関数であるため、すべての型が関数であることを静的に証明できます。動的に型付けされた言語には複数の型がありますが、コンパイラーがそれらを静的にチェックする方法を追加しないため、コンパイラーは変数型にランタイム・チェックを挿入する必要があります。

次に、JavaScriptは動的に型付けされる言語です。JavaScriptでプログラムを記述して、一部の変数をx数値、関数、文字列、またはその他のものにすることができます(そして、停止問題の解決に必要なものを決定します)難しい数学の問題)、x引数に適用でき、ブラウザは実行時にx関数であることを確認する必要があります。


AFAIK同じ問題がラムダ式にも当てはまります。「現在の位置」の関数を「ターゲットからの距離」を計算する関数に渡すことができる場合もありますが、「現在の位置」の同じ関数を「パフとビックの方が優れている」を計算する関数に渡すこともできます。あなたの鼻のために」。あなたができるからといって、それが有効であるとは限りません-どの動的システムの場合でもそうです。
スティーブ

5
@Steve Garbage in garbage outはどのプログラミング言語にも当てはまりますが、型の概念とは無関係です。OCamlやSMLのような強く型付けされた言語であっても、「目標からの距離」を計算する関数に北極を渡すことができます(現在の位置は北極ではありません)。
アダムミハルシン

アカデミア以外の人々のために追加したいだけです:アセンブリのようなものも型なしとして数えられます。
CoffeeTableEspresso

6

値と変数のどちらについて話しているかに応じて、どちらのステートメントも正しいです。JavaScript変数は型指定されておらず、JavaScript値には型があり、変数は実行時に任意の値型(つまり「動的」)に及ぶ可能性があります。

JavaScriptや他の多くの言語では、変数ではなく値が型を保持します。すべての変数はすべてのタイプの値に及ぶ可能性があり、「動的に型付け」または「型なし」と見なすことができます-型を確認できないという観点からは、型を認識できない/認識できない型と任意の型をとることができる変数は論理的かつ実際的に同等です。型理論家が言語と型について話すとき、彼らは通常、これについて話します-型を運ぶ変数-メモリ内で実行中のプログラムではなくプログラムテキスト(つまり、変数)で動作する型チェッカーやコンパイラなどを書くことに興味があるからです(つまり、値)。

対照的に、Cなどの他の言語では、変数は型を持ちますが、値は持ちません。Javaのような言語では、変数と値の両方に型があります。C ++では、一部の値(仮想関数を持つもの)は型を持ち、他の値は持ちません。一部の言語では、値が型を変更することさえ可能ですが、これは通常、悪い設計と見なされています。


5
主な違いは、値と変数ではなく、値と式の間だと思います。静的型付き言語では、式には型がありますが、動的型付き言語では、値だけがします。(もちろん、変数名は1種類の表現です。)
ruakh

4

この質問はすべてセマンティクスについてです

このデータを提供すると、12タイプは何ですか?確実に知る方法はありません。整数かもしれません-浮動小数点かもしれません-文字列かもしれません その意味で、それは非常に「型なし」データです。

このデータとその他の任意のデータに対して「追加」、「減算」、「連結」などの演算子を使用できる架空の言語を指定した場合、「タイプ」は(私の架空の言語とは)多少無関係です(例:おそらく、add(12, a)利回り109である12プラスのASCII値a)。

Cについて少し話しましょう。Cを使用すると、任意のデータを使って、好きなことを何でもできます。2つuintのs を取る関数を使用している場合-キャストして必要なものを渡すことができます-値は単にuints として解釈されます。その意味で、Cは「型なし」です(そのように扱う場合)。

ただし、-そしてブレンダンの要点に-「私の年齢は12」と言った場合12、型があります-少なくとも、それが数値であることはわかっています。コンテキストでは、言語に関係なく、すべてにタイプがあります。

これが私が最初に言った理由です-あなたの質問は意味論の一つです。「型なし」の意味は何ですか?ブレンダンが「静的型なし」と言ったとき、頭に釘を打ったと思います。人間は自然に物事をタイプに分類します。私たちは、車とサルの間には根本的に異なる何かがあることを直感的に知っています-それらを区別するように教えられることはありません。

最初に私の例に戻ると、「型を気にしない」(それ自体)言語では、構文エラーを生成せずに「年齢」と「名前」を「追加」できるかもしれません...論理的に健全な操作であるという意味ではありません。

JavaScriptを使用すると、「エラー」を考慮せずにあらゆる種類のクレイジーなことを実行できます。それはあなたがしていることが論理的に健全であるという意味ではありません。それは開発者がうまくいくためのものです。

コンパイル/ビルド/解釈時に型の安全性を強制しないシステム/言語は、「型なし」または「動的に型付き」ですか?

セマンティクス。

編集

「ええ、Javascriptにはいくつかの「タイプ」がある」という人がいるので、ここに何かを追加したかったのです。

他の誰かの答えに関する私のコメントで私は言った:

JavaScriptでは、「猿」になるように作成したオブジェクトと「人間」になるように作成したオブジェクトを使用でき、一部の機能は「人間」だけで動作するように設計でき、その他の機能は「猿」だけで動作するように設計できます。さらに、「武器のあるもの」のみに関するものもあります。言語がこれまでに言われたことがあるかどうかにかかわらず、「武器を持つもの」などのオブジェクトのカテゴリは、Javascript(「動的」)と同様にアセンブリ(「型なし」)とは無関係です。それはすべて論理的な整合性の問題です-唯一のエラーは、その方法に対応していないものを使用することです。

したがって、Javascriptが内部的に「型の概念」を持っていると見なし、したがって「動的型」を持っていると考え、これが「型のないシステムとは明らかに異なる」と考える場合、上記の例から、内部にある型」は本当に無関係です。

たとえば、C#で同じ操作を実行するには、呼び出されるインターフェイスICreatureWithArmsまたは類似のインターフェイスが必要です。JavaScriptではそうではない-CやASMではそうではない。

明らかに、JavaScriptが「タイプ」をまったく理解しているかどうかは関係ありません。


4
-1。質問は、特定の単語が特定のサークルで、特定の意味で使用されているかどうかを尋ねます。あなたの応答は、単語がその意味を持つかどうかの質問であると説明することです。本当に、あなたはOPがすでに知っているように見えるすべてを説明する立派な仕事をしたと思います。。。
ruakh

おそらく、定義を構築するために必要ないくつかの質問があるようです?タイプの強制(静的または動的)および定義されたタイプの存在。JavaScriptには型がありますが、操作を実行する前に型の有効性をチェックできないため、「型なし」と見なすことができますか?
Peter Cooper、

@ruakh-私はあなたの視点を理解できます。しかしながら、OPは尋ねました:is there something deeper to this that I am missingそして、私は、それが意味論的な問題であることを理解できないことはより深いことだと思うので、私はできる限りのチップにチップを入れるために最善を尽くしました。
スティーブ

@PeterCooper-私の編集を見て、それがあなたに何か追加になるかどうかを教えてください(JavaScript has types返信で言ったので)。
スティーブ

2
「明らかに、JavaScriptが「タイプ」をまったく理解しているかどうかは関係ありません。」違います。私が答えでほのめかしたように、どんな文脈であっても、12を関数として扱うことはできません。JavaScriptには関数タイプ(または、見方によっては複数の関数タイプ)があるため、これは重要な違いです。
アダムミハルシン

4

型について書いているほとんどのCS研究者は、本質的に、構文的に派生可能な型を持つ言語のみを型付き言語と見なしますが、動的/潜在型の言語を使用して、その使用法に憤慨している人はたくさんいます。

私は3種類の言語[SIC]があると考えています。

型なし-演算子のみが値の解釈を決定します-そして、それは一般的に何でも機能します。例:アセンブラー、BCPL

静的型付け-式/変数には型が関連付けられており、その型により、コンパイル時の演算子の解釈/有効性が決まります。例:C、Java、C ++、ML、Haskell

動的に型付け-値には型が関連付けられており、その型により、実行時の演算子の解釈/有効性が決まります。例:LISP、Scheme、Smalltalk、Ruby、Python、Javascript

私の知る限り、動的に型付けされる言語はすべてタイプセーフです。つまり、有効な演算子だけが値を操作できます。しかし、静的に型付けされた言語には同じことが当てはまりません。使用する型システムの能力に応じて、一部のオペレーターは実行時にのみチェックされるか、まったくチェックされない場合があります。たとえば、ほとんどの静的型付け言語は整数オーバーフローを適切に処理せず(2つの正の整数を追加すると負の整数が生成される可能性があります)、範囲外の配列参照はまったくチェックされない(C、C ++)か、またはランタイム。さらに、一部の型システムは非常に弱いため、有用なプログラミングでは、コンパイル時の式の型を変更するためにエスケープハッチ(Cおよびファミリでのキャスト)が必要です。

これはすべて、C ++が(静的に型付けされている)ためPythonよりも安全であるという不条理な主張につながりますが、真実は、PythonはC ++で足を撃つことができる間、本質的に安全であるということです。


賛成。「動的に型付けされた言語はすべてタイプセーフ」であることを知ってうれしい。「しかし、同じことは静的型付け言語には当てはまりません」とは、静的型付け言語のすべてまたはほとんどが型安全でないことを意味しますか?
Tim

賛成。(1)「すべての動的型付け言語はタイプセーフである」ことを知ってうれしいですが、Javascriptは動的型付けと弱い型付けです。stackoverflow.com/ questions / 964910 /…を参照してください。(2)「しかし、静的型付けされた言語には同じことが当てはまりません」、静的型付けされた言語のすべてまたはほとんどが型安全ではないということですか?
Tim

キャストの失敗、範囲外の添え字の例外、またはnullポインターの例外の可能性をタイプとして含める場合、ほとんどの言語は静的にタイプセーフです(そして、ほとんどの人はタイプエラーとして少なくともキャストの失敗を含めます)。たとえば、Rustは、nullポインタを持つことができないため、Javaよりも静的に型保証されています。Javaは、不正な操作の例外を受け取り、すべてが指定されている(ネイティブメソッドを除く)点で、動的に型保証されています。同様にRust(指定された「安全でない」コードを除く)。
Dave Mason

しかし、C ++、Cでも動的にタイプセーフにされていませんが、言語の「未指定」の部分があり、そしてあなたが「未指定」のいずれかの操作を行うと、文字通りので、何も関係のない変数の値はできる(言語からの法的な応答であります変更すると、ウイルスがプログラムに感染し、プログラムがディスク全体に書き込み、その後クラッシュし、プログラムが予想どおりの動作を実行する可能性もあります:-)。
Dave Mason

@DaveMason:未定義。Cの「未指定」と「未定義」の間には大きな違いがあります。未定義の動作は、基本的に、あなたが説明したことを実行できる違法なものです---未指定は、本質的に「実装が定義する必要のない実装定義」を意味します"(ここには微妙なニュアンスがあるため、これ単純化です)。したがって、不特定の動作を呼び出すことは完全に合法です(実際、関数呼び出しなどを書くときはいつでもそうします)。
TimČasJun

2

私はコンピュータサイエンティストではありませんが、CSコミュニティ(少なくとも科学出版物)で「型なし」が「動的型付け」の同義語として実際に使用されている場合、これら2つの用語が異なる概念を説明するので、かなり驚きます。動的に型付けされた言語には型の概念があり、実行時に型の制約を適用します(たとえば、エラーを発生させることなくLispで整数を文字列で除算することはできません)。型なしの言語には型の概念がありません。すべて(アセンブラなど)。プログラミング言語に関するWikipediaの記事(http://en.m.wikipedia.org/wiki/Programming_language#Typed_versus_untyped_languages)でさえ、この違いがあります。

更新:多分混乱は、いくつかのテキストがJavascriptで「変数が型付けされていない」という程度のことを言っているという事実に由来します(これは真実です)。しかし、それは言語が型付けされていないことを自動的に意味するわけではありません(これはfalseです)。


1
アセンブラには、型の非常に弱い概念があります。少なくともx86では、すべてが整数ですが、一部の整数は他の整数とサイズが異なります。これは、MMX、x87、および元のx86仕様に対するその他の拡張機能に入る前でもあります。
アダムミハルシン

私は同意しなければなりません。JavaScriptでは、「猿」になるように作成したオブジェクトと「人間」になるように作成したオブジェクトを使用できます。一部の機能は、「人間」だけで動作するように設計することも、「猿」だけで動作するように設計することもできます。さらに、「武器のあるもの」のみに関するものもあります。言語がこれまでに言われたことがあるかどうかにかかわらず、「武器を持つもの」などのオブジェクトのカテゴリは、Javascript(「動的」)と同様にアセンブリ(「型なし」)とは無関係です。それはすべて論理的な整合性の問題です。唯一のエラーは、その方法に対応していないものを使用することです。
スティーブ

@アダムミハルシン真。[マクロ]アセンブリ言語には、当然、さまざまな程度の型の概念もあります。(たとえば、「型付きアセンブリ言語」をチェックしてください。)私の考えはまだ保持されていると思います。
afrischke

3
@スティーブ私があなたをフォローできるかどうかわかりません。OPは、CSサークルで「動的に型付けされた」と「型付けされていない」を区別しないかどうか尋ねました。これは、Javascriptとアセンブリのメモリ内のビットの扱い方に実質的な違いがないと信じるかどうかとは関係ありません。私が読んだ内容(および私はJavaScriptプログラマではないため、これを具体的に調べる必要がありました)によると:ECMAScript / Javascript標準は、6つのデータ型(ブール、文字列、未定義、数値、Null、およびオブジェクト)を任意の時点で定義します
やがて

1
...現在、これは(ほとんどの)アセンブリ言語にはない概念(すべてビットとバイトがあります)なので、これはJavaScriptとアセンブリの明確な違いを示しています。
afrischke

1

ブレンダンに同意する-コンテキストがすべてです。

私の見解:

Rubyが型付けされていないのか、動的に型付けされているのかについての議論があったため、2004年頃に混乱したことを覚えています。古い学校のC / C ++の人々(そのうちの1人)はコンパイラについて考えていて、Rubyは型付けされていないと言っていました。

Cでは、実行時の型はなく、アドレスだけがあり、実行中のコードがそのアドレスにあるものを、それ以外のものとして扱うことを決定した場合、エラーが発生します。これは間違いなく型付けされておらず、動的型付けとは大きく異なります。

その世界では、「タイピング」はすべてコンパイラーに関するものです。コンパイラーのチェックがより厳格だったため、C ++には「強い型付け」がありました。JavaとCはより「型付けが緩やか」でした(Javaが型付けされているのか、それとも弱いのかについても議論がありました)。動的言語は、コンパイラーの型チェックがないため、その連続体では「型なし」でした。

今日、プログラマーを実践するために、動的言語に慣れているため、型なしとはコンパイラやインタプリタの型チェックを意味せず、デバッグが非常に難しいことは明らかです。しかし、それが明白ではなかった時期があり、CSのより理論的な世界では意味がないかもしれません。

意味のあるアルゴリズムを作成するには、値を操作することに何らかの意図がなければならないため、ある意味では、型付けを解除することはできません(とにかくほとんど何も)。これは理論的なCSの世界であり、コンパイラーまたはインタープリターが特定の言語に実装される方法の詳細を扱っていません。したがって、「型なし」は(おそらく、私にはわかりません)そのコンテキストではまったく意味がありません。

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