Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

「型とはなにか」の説明ページを作成しませんか? #807

Open
yo-goto opened this issue Dec 22, 2023 · 6 comments
Open

「型とはなにか」の説明ページを作成しませんか? #807

yo-goto opened this issue Dec 22, 2023 · 6 comments
Labels
stage2:着手可 着手できるフェーズのissueです。プルリクエストを作成できます。

Comments

@yo-goto
Copy link
Contributor

yo-goto commented Dec 22, 2023

何をどうしたいか?

型の意味論や役割などを含めて「型とはなにか」を改めてわかりやすく説明するようなページがあるといいと思います。

そうしたい理由は何か?(誤植の修正など理由が自明な場合は不要)

現状、そもそも「型とはなにか」を説明する欄がないので、静的型付け言語に詳しくない人にとっては型のイメージがしづらいという問題があるかと思います。

着手可能になったら自分でプルリクエストを作成したいか?

OK

※ 着手可になってから、1ヶ月以上経過している場合は他の人が着手する可能性があります。

参考文献

以下の文献などを参考

@suin suin added the stage2:着手可 着手できるフェーズのissueです。プルリクエストを作成できます。 label Dec 22, 2023
@yo-goto
Copy link
Contributor Author

yo-goto commented Mar 22, 2024

型の解釈方法をいくつかまとめてみました。

  • Type as Classification (値の分類としての型) : これが一番一般的で扱いやすい
  • Type as Data size (データサイズとしての型) : int/float/doubleなどのデータサイズ的な観点(C言語などが分かりやすい)
  • Type as Bits (ビット表現としての型) : ビット列に対して文字列なのか数値なのかを決めるための追加の情報レイヤー
  • Type as Documentation (ドキュメントとしての型) : 軽量な仕様やドキュメントとして機能するコミュニケーション情報
  • Type as Sets (集合としての型) : 値の集合として解釈できる数学的な対象
  • Type as Proposition (命題としての型) : プログラムを証明に対応させるときの命題

命題までは流石にやりすぎかもしれないですが、型とは何かを考える上で、上記のような複数の見方をうまく組み合わせると柔軟に扱えると思います。

@suin
Copy link
Contributor

suin commented Mar 22, 2024

いろんな面から見れると理解が深まりそうでいいですね!

@suin
Copy link
Contributor

suin commented Mar 22, 2024

総じて「信頼性の高いプログラムにする」というのが型の役割ですかね〜。Rustにはlifetime(データの有効期限をコンパイラに伝える仕組み)という型レベルの情報があって、メモリ安全性をコンパイル時に保証してくれるものなのですが、型にはこういうのもあったりするのでそう思いました。(ちなみに、lifetimeが長い変数をlifetimeが短い変数に代入しようとすると、コンパイル時にエラーになります)

いちアイディアにすぎませんが、つかみとして「もしも型がこの世になかったら」のような空想から入るのはどうでしょう?
読み始めってあんまり集中していないのでライトなトピックから入ると乗ってきやすいのと、上記の「静的型付け言語に詳しくない人」が「動的型付け言語には詳しい人」とするなら、動的型付け言語経験者は共感を呼ぶ内容になるかもと思ったからです。採用するかはおまかせします!

ちなみにChatGPTに発散してもらったアイディアが下記です:

型がないプログラミング言語の世界は、いくつかの点で現在とは異なるかもしれません。型システムはプログラミング言語の重要な部分であり、変数や関数の値が持つことができるデータの種類(例:整数、文字列、オブジェクトなど)を指定する役割を果たしています。型システムが存在しない場合、開発者は以下のような影響を受ける可能性があります。

  1. エラーの増加: 型システムは開発者が型の不一致によるエラーを事前に検出できるようにするので、その欠如はランタイムエラーの増加につながるかもしれません。開発者は関数や変数が期待するデータ型について推測する必要があり、これが誤りの原因となる可能性があります。

  2. デバッグの難易度増加: 型関連のエラーがコンパイル時ではなく、プログラムの実行時にのみ発見されることが多くなるため、デバッグがより複雑で時間を要するプロセスになります。

  3. 自動化ツールの有効性低下: 型情報はコード補完やリファクタリングなどの自動化ツールにとって重要な情報源です。型がなければ、これらのツールはより信頼性が低いか、または使用不可能になるかもしれません。

  4. プログラムの安全性と保守性の低下: 型システムはプログラムの安全性を高め、バグの可能性を減らすのに役立ちます。型がないことで、開発者はコードが期待する契約を理解し、維持する責任が増します。

  5. 動的型付け言語の増加: 実際に、完全に型がないわけではなく、動的型付け言語(例:Python、Ruby)がその役割を果たすことになるかもしれません。これらの言語では、型はプログラムの実行時に評価されますが、開発者は変数の型を明示的に宣言する必要はありません。

  6. 柔軟性と速度のトレードオフ: 型がないことで、開発の初期段階での柔軟性が増す一方で、大規模なプロジェクトや安全性が重要なアプリケーションの開発では、コードの信頼性や保守性の問題が顕著になる可能性があります。

総合的に、型なしのプログラミング言語の世界では、開発の初期段階ではスピードと柔軟性が得られるかもしれませんが、プロジェクトが成長するにつれて、エラーの発見、デバッグの難易度、保守性の問題が大きな挑戦となるでしょう。現実の世界では、型の概念はこれらの問題を緩和し、より信頼性の高いソフトウェア開発を可能にしています。

@yo-goto
Copy link
Contributor Author

yo-goto commented Mar 22, 2024

なるほど、確かに静的型付けに詳しくない人に伝えるには型の役割やメリット的な観点から説明を始めた方が良さそうです。
ただ自分で提案しておいてなんですが、このあたりの話はかなり書くのが難しそうですw
結構研究が必要ですね。

@suin
Copy link
Contributor

suin commented Mar 22, 2024

急がず温めてもいいかもですね〜☺️

@yo-goto
Copy link
Contributor Author

yo-goto commented Mar 22, 2024

JavaScriptでわざと失敗するプログラムを書いて段階的に型を付与していくみたいな進め方でもいいかもしれません。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
stage2:着手可 着手できるフェーズのissueです。プルリクエストを作成できます。
Projects
None yet
Development

No branches or pull requests

2 participants