スレタイ以外の言語もok
前スレ
https://mevius.5ch.net/test/read.cgi/tech/1655771266/
探検
次世代言語27 TypeScript Swift Go Kotlin Rust Nim
■ このスレッドは過去ログ倉庫に格納されています
2022/08/05(金) 08:26:38.87ID:TpiqaUBm
572デフォルトの名無しさん
2022/08/17(水) 08:03:19.44ID:/AaT26gR573デフォルトの名無しさん
2022/08/17(水) 08:19:18.07ID:xIPygSHI574デフォルトの名無しさん
2022/08/17(水) 08:34:23.74ID:SLXSyyKd >>573
バカで良いけれど、そんなの気にする必要もない要件もあるって事だよ。世の中何でもRustの機能を必要としているわけじゃないさ。
Pythonだと、ジャイアントロック掛けまくってるけれど、困らない事が多いという想定でしょう。
バカで良いけれど、そんなの気にする必要もない要件もあるって事だよ。世の中何でもRustの機能を必要としているわけじゃないさ。
Pythonだと、ジャイアントロック掛けまくってるけれど、困らない事が多いという想定でしょう。
575デフォルトの名無しさん
2022/08/17(水) 08:42:33.37ID:/AaT26gR >>573
考える必要が無いからオートマなんだろ。オートマ使いはギアチェンジとかエンストとかほとんど意識しない。
問題を回避するためにコンパイラの指示に従う必要のあるRustはオートマじゃない。やっぱり教官付きマニュアル教習車だな。
考える必要が無いからオートマなんだろ。オートマ使いはギアチェンジとかエンストとかほとんど意識しない。
問題を回避するためにコンパイラの指示に従う必要のあるRustはオートマじゃない。やっぱり教官付きマニュアル教習車だな。
576デフォルトの名無しさん
2022/08/17(水) 08:45:03.08ID:u0Nnvztf577デフォルトの名無しさん
2022/08/17(水) 09:13:39.86ID:qAPgSCZ7 >>573
並列処理を始めてやっと起きるのでは?
例えばNodeだとデータ競合は発生しないよ
シングルスレッドで行単位では処理が入れ替わらずawaitって書いてあるところ(コールバック単位)でスイッチングするから
競合状態はもちろん発生する、で、競合状態に関してはRustでも防ぐことは不可能
だからNode使ってる人にとってデータ競合はそもそも発生しないからその観点でRustに魅力を感じることはないよね
並列処理を始めてやっと起きるのでは?
例えばNodeだとデータ競合は発生しないよ
シングルスレッドで行単位では処理が入れ替わらずawaitって書いてあるところ(コールバック単位)でスイッチングするから
競合状態はもちろん発生する、で、競合状態に関してはRustでも防ぐことは不可能
だからNode使ってる人にとってデータ競合はそもそも発生しないからその観点でRustに魅力を感じることはないよね
578デフォルトの名無しさん
2022/08/17(水) 09:34:31.75ID:zZknHbxd >>575
その、問題を回避するためにコンパイラの指示に従う、のが正しい解決方法で合ってる。
例えば、ぬるぽ問題回避(Null安全)は、KotlinでもSwiftでもRustと同じく別の型とする対応策。
Null安全でないコードが書かれると、コンパイラにより型不一致エラーとなり、コンパイラの指示に従いプログラマーがコードを修整して解決。
このように、ぬるぽ問題回避にしても、データ競合回避にしても、自動対応は無理なので、コンパイラが静的に検知してエラーとするのが正しい解決方法。
型システムの強化により、様々な問題に対応できるようになっていく。
その、問題を回避するためにコンパイラの指示に従う、のが正しい解決方法で合ってる。
例えば、ぬるぽ問題回避(Null安全)は、KotlinでもSwiftでもRustと同じく別の型とする対応策。
Null安全でないコードが書かれると、コンパイラにより型不一致エラーとなり、コンパイラの指示に従いプログラマーがコードを修整して解決。
このように、ぬるぽ問題回避にしても、データ競合回避にしても、自動対応は無理なので、コンパイラが静的に検知してエラーとするのが正しい解決方法。
型システムの強化により、様々な問題に対応できるようになっていく。
579デフォルトの名無しさん
2022/08/17(水) 09:51:56.11ID:TMSqJNtq >>577
サーバーサイドをやってる周りではこういう状況
Node.jsはもちろん(Workerを除き)シングルスレッドで安全にasync/await並行処理できる
それだけで十分なところもあるけど次第にCPUコア活かして並列処理も加えて高速化したいところも増加中
その時にWorkerでは使い勝手の限界があるのはご存知と思う
すると今まで同様に安全にasync/await並行処理 + 新たに並列処理を加えて高速化をできる環境を考えるとRustが筆頭候補
実際に移行したところも出てきているし少しずつサーバーサイドRust化の流れが今後主流になりそうな雰囲気
サーバーサイドをやってる周りではこういう状況
Node.jsはもちろん(Workerを除き)シングルスレッドで安全にasync/await並行処理できる
それだけで十分なところもあるけど次第にCPUコア活かして並列処理も加えて高速化したいところも増加中
その時にWorkerでは使い勝手の限界があるのはご存知と思う
すると今まで同様に安全にasync/await並行処理 + 新たに並列処理を加えて高速化をできる環境を考えるとRustが筆頭候補
実際に移行したところも出てきているし少しずつサーバーサイドRust化の流れが今後主流になりそうな雰囲気
580デフォルトの名無しさん
2022/08/17(水) 11:15:55.18ID:8HFMEcaY581デフォルトの名無しさん
2022/08/17(水) 11:47:55.34ID:cnWCAZlk Rustはサーバーサイドでもやらないとこのまま消えて無くなるから必死なんだろ
582デフォルトの名無しさん
2022/08/17(水) 12:58:48.28ID:fQshOXYb >教官付きマニュアル教習車だな。
これは言い得て妙だな
これは言い得て妙だな
583デフォルトの名無しさん
2022/08/17(水) 13:05:23.96ID:hpgzuSC5 静的型付け言語は全てそのパターンだから
実行前にコンパイラに全てを静的にチェックしてもらい指導に従うパターンがプログラミング言語の最高峰なのではないかな
実行前にコンパイラに全てを静的にチェックしてもらい指導に従うパターンがプログラミング言語の最高峰なのではないかな
584デフォルトの名無しさん
2022/08/17(水) 14:13:12.92ID:9cI+CXMq 最高峰ww
585デフォルトの名無しさん
2022/08/17(水) 14:16:02.99ID:3noakHYk ろくに準備をせずに登頂を試みると命に関わります
586デフォルトの名無しさん
2022/08/17(水) 14:27:25.73ID:8HFMEcaY めんどくささでは最高峰だよなぁw
587デフォルトの名無しさん
2022/08/17(水) 14:52:45.44ID:+DmyoQ23588デフォルトの名無しさん
2022/08/17(水) 15:02:44.38ID:nGJKKwlR かまちょ!
589デフォルトの名無しさん
2022/08/17(水) 15:14:47.69ID:8HFMEcaY590デフォルトの名無しさん
2022/08/17(水) 15:39:54.22ID:tUbX57fg その件は昔からはっきり答えが出ている
まともにプログラミングするならば静的型付けが必須
動的型付けだと実行時にムダにデバッグ時間を奪われて効率が悪い
いずれそのことを学習すると動的型付け言語から静的型付け言語へ移っていく
典型的な例がJavaScript(動的型付け)からTypeScript(静的型付け)へ
まともにプログラミングするならば静的型付けが必須
動的型付けだと実行時にムダにデバッグ時間を奪われて効率が悪い
いずれそのことを学習すると動的型付け言語から静的型付け言語へ移っていく
典型的な例がJavaScript(動的型付け)からTypeScript(静的型付け)へ
591デフォルトの名無しさん
2022/08/17(水) 16:35:25.14ID:OH5RfCzZ 俺は型が無いとコードかけないな
メソッドの名前の一部しか覚えてなくてサジェスト機能に頼りまくってるわ
メソッドの名前の一部しか覚えてなくてサジェスト機能に頼りまくってるわ
592デフォルトの名無しさん
2022/08/17(水) 17:14:40.55ID:UcZjJMoG593デフォルトの名無しさん
2022/08/17(水) 17:44:11.47ID:8HFMEcaY >>592
逆じゃね?
むしろフロントエンドに型とかいらんだろw元々javascriptなのだし
JavaとかC#とかだとjsonをデコードする為にもクラス用意したりとか逆にめんどくさく感じるわ
ほぼ一人のプロジェクトでクライアント側はUnity(C#)とかだったりするから仕方なく用意しているが
管理画面(vue等)でフロントも書いてるけどjsのままで不便だと思った事すらないし
TypeScriptなんか導入する気にもならんw
逆じゃね?
むしろフロントエンドに型とかいらんだろw元々javascriptなのだし
JavaとかC#とかだとjsonをデコードする為にもクラス用意したりとか逆にめんどくさく感じるわ
ほぼ一人のプロジェクトでクライアント側はUnity(C#)とかだったりするから仕方なく用意しているが
管理画面(vue等)でフロントも書いてるけどjsのままで不便だと思った事すらないし
TypeScriptなんか導入する気にもならんw
594デフォルトの名無しさん
2022/08/17(水) 18:03:01.95ID:nsDziyoO >>593
一人でやってるからじゃね?
一人でやってるからじゃね?
595デフォルトの名無しさん
2022/08/17(水) 18:06:52.80ID:mUpHy2T2 状況に合わせて使う道具を変える判断力すら持ち合わせてないやつは自称プログラマーでも最底辺だからな
適性はないよ
適性はないよ
596デフォルトの名無しさん
2022/08/17(水) 18:09:47.20ID:YQ8B9Inh597デフォルトの名無しさん
2022/08/17(水) 18:29:38.04ID:UFtMHmKs このスレでRustなどを叩いている>>593氏ってやっぱりレベルがかなり低い人だったんだな
598デフォルトの名無しさん
2022/08/17(水) 18:30:00.14ID:UcZjJMoG599デフォルトの名無しさん
2022/08/17(水) 18:52:35.57ID:Lz3roYDy 動的型とは端的に言えば値に型情報が付属していることであり、おそらくお前らは何か誤解している。
型を指定しないことが動的だと思っているんじゃないか?
図星じゃないか?
型を指定しないことが動的だと思っているんじゃないか?
図星じゃないか?
600デフォルトの名無しさん
2022/08/17(水) 19:16:27.92ID:/AaT26gR 実行時の値とソースコードの変数の違いは重要だけど、この違いを意識しているプログラマーは少ないよね。
601デフォルトの名無しさん
2022/08/17(水) 19:28:56.47ID:rIjBJHpR 実行前にコンパイル時点で静的に型も確定する静的型付け言語がベストだな
602デフォルトの名無しさん
2022/08/17(水) 20:10:33.59ID:QLQjt20q >>572
Nimはダメだよ
例えばref objectな変数は初期化も何もされないからヌルポ状態となり実際にSIGSEGVで落ちる
もちろんNimでもRustbニ同様のoptionb使えばヌルポb回避できるけbヌ
Nimでは前述のようにoptionを使わないコードも許されるからヌルポが起きてしまう
Nimはダメだよ
例えばref objectな変数は初期化も何もされないからヌルポ状態となり実際にSIGSEGVで落ちる
もちろんNimでもRustbニ同様のoptionb使えばヌルポb回避できるけbヌ
Nimでは前述のようにoptionを使わないコードも許されるからヌルポが起きてしまう
603デフォルトの名無しさん
2022/08/17(水) 21:22:11.22ID:cjKd/U5p Kotlin Rust Swift ← Null安全な新世代言語
Go Nim ← Null安全ではない旧世代言語
Go Nim ← Null安全ではない旧世代言語
604デフォルトの名無しさん
2022/08/17(水) 21:32:11.18ID:daPCs1sI Swiftって将来性あんのかね
アップル依存大きすぎな時点で知れてると思うんだけど
アップル依存大きすぎな時点で知れてると思うんだけど
605デフォルトの名無しさん
2022/08/17(水) 22:14:45.59ID:NE7yPquC >>559
多くのcli コマンドが go, rust で再実装されつつあるのは perl, python, ruby のようなスクリプト言語から go, rust といったちょうどよいモダンさのあるコンパイル型言語への大きな流れがある気がしている。
多くのcli コマンドが go, rust で再実装されつつあるのは perl, python, ruby のようなスクリプト言語から go, rust といったちょうどよいモダンさのあるコンパイル型言語への大きな流れがある気がしている。
606デフォルトの名無しさん
2022/08/17(水) 23:47:09.64ID:tVto1F2t >>600
値と変数じゃなくて昔はデータ構造とアルゴリズムの違いを意識していた
どのような演算を想定しているかという型情報を
被演算子の側に付属させるというアイデア自体が
演算子と被演算子を一体化させ、両者を分けて考えない原因になった
値と変数じゃなくて昔はデータ構造とアルゴリズムの違いを意識していた
どのような演算を想定しているかという型情報を
被演算子の側に付属させるというアイデア自体が
演算子と被演算子を一体化させ、両者を分けて考えない原因になった
607デフォルトの名無しさん
2022/08/18(木) 08:11:22.29ID:YglC0db6 動的型付け言語のメリットてなんだ?
(習得が容易とか書き心地とかを除いて理論的なメリット)
(習得が容易とか書き心地とかを除いて理論的なメリット)
608デフォルトの名無しさん
2022/08/18(木) 08:38:35.77ID:SRglimcB609デフォルトの名無しさん
2022/08/18(木) 08:39:41.85ID:ywzuYu7m >>607
インスタンスの型判定を実際のインスタンスで行うことができるので、コードの適用範囲が広くなる。
C++を理解しているなら、dynamic castの適用事例を考えればいい。総称型で保管して具象型で使用するようなケースが代表的。
インスタンスの型判定を実際のインスタンスで行うことができるので、コードの適用範囲が広くなる。
C++を理解しているなら、dynamic castの適用事例を考えればいい。総称型で保管して具象型で使用するようなケースが代表的。
610デフォルトの名無しさん
2022/08/18(木) 09:15:09.69ID:X/mZUHYK611デフォルトの名無しさん
2022/08/18(木) 09:44:19.64ID:zAUamPod 実行時の型検査なんて、存在しないメンバにアクセスしようとしたらエラーとかオペランドが特定のデータ型でなければエラーといったルールを、演算子やオブジェクトの実装に組み込むだけだよ
ホストとの間で実行モデルやオブジェクトモデルを共有してるから楽勝
JITの場合もオブジェクトモデルは共有するから比較的簡単
ホストとの間で実行モデルやオブジェクトモデルを共有してるから楽勝
JITの場合もオブジェクトモデルは共有するから比較的簡単
612デフォルトの名無しさん
2022/08/18(木) 09:50:57.04ID:X/mZUHYK そんな言い方するなら静的型付け言語もコンパイル時にやるだけで似たようなもんだろ
613デフォルトの名無しさん
2022/08/18(木) 09:55:55.60ID:zAUamPod 全然違うよ
ホスト言語で直接実装すりゃいいだけだからな
JITの場合も極限のパフォーマンスを求める静的型とは違ってホスト言語で書かれたランタイムの呼び出しを多用するのが普通だから、
インタプリタと大差ないし徐々にランタイムを使わないように改良していくアプローチが採れる
ホスト言語で直接実装すりゃいいだけだからな
JITの場合も極限のパフォーマンスを求める静的型とは違ってホスト言語で書かれたランタイムの呼び出しを多用するのが普通だから、
インタプリタと大差ないし徐々にランタイムを使わないように改良していくアプローチが採れる
614デフォルトの名無しさん
2022/08/18(木) 10:05:05.63ID:X/mZUHYK >>613
型チェックとどこが違うのか具体的に書いて
あとホスト言語という謎用語使うならちゃんと定義してくれ
(ホスト言語自体はDSL界隈とかで使われてるけどコンパイラとかの文脈で使ってるの見たことない)
型チェックとどこが違うのか具体的に書いて
あとホスト言語という謎用語使うならちゃんと定義してくれ
(ホスト言語自体はDSL界隈とかで使われてるけどコンパイラとかの文脈で使ってるの見たことない)
615デフォルトの名無しさん
2022/08/18(木) 10:15:42.84ID:zAUamPod 事前に型検査をやろうとすると予め静的な型のモデルを厳密に定義しなきゃいけないでしょ?
616デフォルトの名無しさん
2022/08/18(木) 10:30:27.96ID:zAUamPod 途中書き込み失礼
一方で動的型の場合、実行時のオブジェクトモデルさえ定義されていれば実行時の検査が可能であり、静的な型モデルと実行時のオブジェクトモデルの両方を厳密に定義する必要がない。
平たく言えば、実装が仕様だ、みたいな進め方をすることが難しいわけだ
更に、リフレクションが可能な処理系の場合には静的型であっても実行時に型検査を行う必要があるよね。
一方で動的型の場合、実行時のオブジェクトモデルさえ定義されていれば実行時の検査が可能であり、静的な型モデルと実行時のオブジェクトモデルの両方を厳密に定義する必要がない。
平たく言えば、実装が仕様だ、みたいな進め方をすることが難しいわけだ
更に、リフレクションが可能な処理系の場合には静的型であっても実行時に型検査を行う必要があるよね。
617616
2022/08/18(木) 10:54:49.56ID:EMP5KmCe > 平たく言えば、実装が仕様だ、みたいな進め方をすることが難しいわけだ
は静的型の場合ね。念のため。
は静的型の場合ね。念のため。
618デフォルトの名無しさん
2022/08/18(木) 11:15:33.98ID:wupTTNap >>607
インタプリタのメリットは自分自身をコンパイルするコンパイラを作らないこと
言語は二つ以上になってしまうがそれでいい
他にもGCを実装する言語がGCに依存するんじゃないかとか
型情報を定義する言語がーとかいう問題に対する煩悩が消える
インタプリタのメリットは自分自身をコンパイルするコンパイラを作らないこと
言語は二つ以上になってしまうがそれでいい
他にもGCを実装する言語がGCに依存するんじゃないかとか
型情報を定義する言語がーとかいう問題に対する煩悩が消える
619デフォルトの名無しさん
2022/08/18(木) 11:54:36.40ID:u9P7LJR3620デフォルトの名無しさん
2022/08/18(木) 11:55:56.17ID:Qribcf4L 言語を作る側のメリットしかわかんねぇの?
言語を作る側じゃなく使う側のメリットを聞いてんだろ
言語を作る側じゃなく使う側のメリットを聞いてんだろ
621デフォルトの名無しさん
2022/08/18(木) 12:42:07.20ID:mMaPRsFU >>608
ツリーウォーク型のインタプリタなら楽だろうけど、速度出すにはJITとか考えないと行けないし、コンパイラ書くのと大差ない気がする
ツリーウォーク型のインタプリタなら楽だろうけど、速度出すにはJITとか考えないと行けないし、コンパイラ書くのと大差ない気がする
622デフォルトの名無しさん
2022/08/18(木) 12:57:08.67ID:ywzuYu7m >>620
具体的な実装をギリギリまで遅らせることができる&設計が間違っていても無理やり嵌め込むことができる。
プロトタイピングとかライブラリ開発とかで楽できるし、リファクタリングで段階的に仕様を固めることができる。
最終的には静的型付けの方が堅牢になるけど、最初からミス無く設計するのは無理だから、開発初期は動的型付けの方が有利。
具体的な実装をギリギリまで遅らせることができる&設計が間違っていても無理やり嵌め込むことができる。
プロトタイピングとかライブラリ開発とかで楽できるし、リファクタリングで段階的に仕様を固めることができる。
最終的には静的型付けの方が堅牢になるけど、最初からミス無く設計するのは無理だから、開発初期は動的型付けの方が有利。
623デフォルトの名無しさん
2022/08/18(木) 13:30:03.60ID:wupTTNap >>620
言語でも仕事でも持続可能性のためには作る側が儲かるぐらいがちょうどいい
言語でも仕事でも持続可能性のためには作る側が儲かるぐらいがちょうどいい
624デフォルトの名無しさん
2022/08/18(木) 13:42:10.72ID:u9P7LJR3625デフォルトの名無しさん
2022/08/18(木) 14:00:24.69ID:gIZ4t15q Juliaはここに入らんの?
626デフォルトの名無しさん
2022/08/18(木) 14:19:26.19ID:yhLXdudb ぬるぽ
627デフォルトの名無しさん
2022/08/18(木) 14:28:23.47ID:PTM9RcdX もちろんプログラマーや生成物実行者やサービス利用者にとっては静的型付け言語の方が大きく有利
プログラミングも静的型付け言語は支援が大きく楽だし実行時デバッグも減らせる
そして実行速度も静的型付け言語の方が速くできるため実行者やサービス利用者も時間の節約や応答性の良さを得られる
プログラミングも静的型付け言語は支援が大きく楽だし実行時デバッグも減らせる
そして実行速度も静的型付け言語の方が速くできるため実行者やサービス利用者も時間の節約や応答性の良さを得られる
628デフォルトの名無しさん
2022/08/18(木) 14:31:48.41ID:NacqCDdf629デフォルトの名無しさん
2022/08/18(木) 14:33:36.79ID:iuGFLMr5 >>627
使い分けができない人の典型的な言い訳ですね
使い分けができない人の典型的な言い訳ですね
630デフォルトの名無しさん
2022/08/18(木) 14:36:30.08ID:X/mZUHYK >>628
だからダメダメって言ってるのに横からアホみたいに絡んでくるなよ
だからダメダメって言ってるのに横からアホみたいに絡んでくるなよ
631デフォルトの名無しさん
2022/08/18(木) 15:54:24.58ID:bwUj40G0632デフォルトの名無しさん
2022/08/18(木) 16:45:13.83ID:X/mZUHYK はいはいw
633デフォルトの名無しさん
2022/08/18(木) 16:58:47.72ID:EY8RcqaI 小規模なプログラムを早く作りたいというときに
動的型付け言語は向いている
動的型付け言語は向いている
634デフォルトの名無しさん
2022/08/18(木) 17:26:35.30ID:wupTTNap main関数の型がいつも同じなのはシェルが静的型付けではないからだ
設定より規約
独自のユーザー定義型を設定しなくても使える
設定より規約
独自のユーザー定義型を設定しなくても使える
635デフォルトの名無しさん
2022/08/18(木) 18:13:32.09ID:BsTRP920 >>622
あえて突っ込んでみるが
>具体的な実装をギリギリまで遅らせることができる
to_foo()できるFooableなインスタンスを受け取る前提でBarを作るみたいなのは動的型付けでも静的型付けでも同じじゃない?
>設計が間違っていても無理やり嵌め込むことができる。
これも動的型付けでも静的方付けでも同じじゃない?
渡す型が間違ってるみたいなのは設計間違いというよりコーディングミスでしょ
あえて突っ込んでみるが
>具体的な実装をギリギリまで遅らせることができる
to_foo()できるFooableなインスタンスを受け取る前提でBarを作るみたいなのは動的型付けでも静的型付けでも同じじゃない?
>設計が間違っていても無理やり嵌め込むことができる。
これも動的型付けでも静的方付けでも同じじゃない?
渡す型が間違ってるみたいなのは設計間違いというよりコーディングミスでしょ
636デフォルトの名無しさん
2022/08/18(木) 18:32:21.72ID:yLDzsouG637デフォルトの名無しさん
2022/08/18(木) 19:10:46.93ID:74ku3J2B >>635
>なインスタンスを受け取る前提
そういう前提を開発当初に決められなかったり、そもそも問題領域に対する知見が足りなくて手探りで開発を進めるたり。当然「前提」が間違っていることもある。
間違うことを前提に「とりあえず動くものを用意して情報収集しながら開発する」というプロトタイプ開発だと、静的型付けは設計が重すぎて使いづらい。そういうケースだと柔軟性の高い動的型付けの方が便利。
>なインスタンスを受け取る前提
そういう前提を開発当初に決められなかったり、そもそも問題領域に対する知見が足りなくて手探りで開発を進めるたり。当然「前提」が間違っていることもある。
間違うことを前提に「とりあえず動くものを用意して情報収集しながら開発する」というプロトタイプ開発だと、静的型付けは設計が重すぎて使いづらい。そういうケースだと柔軟性の高い動的型付けの方が便利。
638デフォルトの名無しさん
2022/08/18(木) 20:34:52.46ID:kuToBQFh テスト書かないで書き散らすなら静的型はミスが生じにくい分本来的には有利だと思うけどね
ただ、静的型ってモデルとビューモデルみたいな似た型を複数作って左から右に渡すような設計をしがちだからコード量が増えやすいんだよね
静的型でも共通の型を使い回して重複を発生させないことはできるだろうけど、動的型と違って型が目に見えてしまうもんだから、
オプショナルな属性だらけの汚い型が目についてしまって、心理的に適切に型を使い分ける設計になりがち
ただ、静的型ってモデルとビューモデルみたいな似た型を複数作って左から右に渡すような設計をしがちだからコード量が増えやすいんだよね
静的型でも共通の型を使い回して重複を発生させないことはできるだろうけど、動的型と違って型が目に見えてしまうもんだから、
オプショナルな属性だらけの汚い型が目についてしまって、心理的に適切に型を使い分ける設計になりがち
639デフォルトの名無しさん
2022/08/18(木) 20:43:30.66ID:uPozsGij そもそもメンテをするつもりもテストをするつもりもない程度の用途なら、短いコードで完結に書けることが多い動的型言語は比較的有利そうだね
まあそういうときはなんでもいいから一番慣れてる言語を使えばええやんって感じだが
まあそういうときはなんでもいいから一番慣れてる言語を使えばええやんって感じだが
640デフォルトの名無しさん
2022/08/18(木) 20:59:53.63ID:VW7TsRc4 >>637
いや、それは型推論の無かった静的型言語を使ってた時代の話だよ。
今時の言語は型推論あるからコード書く分には動的型言語と遜色ない。
いくら動的型言語が柔軟だと言ったって想定と異なる型のデータで関数なりメソッドなり呼ばれれば、その部分は動かない。下手したらデータ破壊しながら処理進めてしまいかねん。
いや、それは型推論の無かった静的型言語を使ってた時代の話だよ。
今時の言語は型推論あるからコード書く分には動的型言語と遜色ない。
いくら動的型言語が柔軟だと言ったって想定と異なる型のデータで関数なりメソッドなり呼ばれれば、その部分は動かない。下手したらデータ破壊しながら処理進めてしまいかねん。
641デフォルトの名無しさん
2022/08/18(木) 21:02:31.69ID:4Dlj1ckV >>638
そのあたりの問題は最近の静的型付け言語は既に解決済みではないかな
そういう様々な異なる型に対して、横断的な共通の扱いをしたいならば、
例えばRustでは用途ごとに3通りの対応方法を提供しているよね
(1) ボディ付きenumによる複数の異種型の横断的な収容
(2) impl Traitによる複数の異種型の横断的な共通振る舞いとその静的モノモーフィゼーション
(3) dyn Traitによる複数の異種型の横断的な共通振る舞いとその動的ディスパッチ
そのあたりの問題は最近の静的型付け言語は既に解決済みではないかな
そういう様々な異なる型に対して、横断的な共通の扱いをしたいならば、
例えばRustでは用途ごとに3通りの対応方法を提供しているよね
(1) ボディ付きenumによる複数の異種型の横断的な収容
(2) impl Traitによる複数の異種型の横断的な共通振る舞いとその静的モノモーフィゼーション
(3) dyn Traitによる複数の異種型の横断的な共通振る舞いとその動的ディスパッチ
642デフォルトの名無しさん
2022/08/18(木) 21:10:33.58ID:ame2S//5 プロトタイプには動的型って一見もっともなんだけど
じゃあいつ本番開発に移行すんの?ってのは気になるな
結局ある程度動き始めたらそのままズルズル行っちゃうのでは?
それとも「今日から静的型で書き直すので一ヶ月開発止まります」とかやるの?
じゃあいつ本番開発に移行すんの?ってのは気になるな
結局ある程度動き始めたらそのままズルズル行っちゃうのでは?
それとも「今日から静的型で書き直すので一ヶ月開発止まります」とかやるの?
643デフォルトの名無しさん
2022/08/18(木) 21:10:45.17ID:kuToBQFh >>641
そんな小難しいことを最初から真面目に考えて設計しなければならない時点で遅いんだよ
そんな小難しいことを最初から真面目に考えて設計しなければならない時点で遅いんだよ
644デフォルトの名無しさん
2022/08/18(木) 21:13:42.36ID:pjyB7/7f 動的型だと素早く開発できるという話は品質を犠牲にすれば素早く開発できるという話と同じ匂いを感じる
645デフォルトの名無しさん
2022/08/18(木) 21:17:56.92ID:4Dlj1ckV646デフォルトの名無しさん
2022/08/18(木) 21:18:41.05ID:FZFlEvPV かといってサーバーサイドに静的なJavaを導入して安全か?と言われてもなぁw
PHPだから危険なのか?という話だし
そもそも関数で引数に型の指定があるない関わらず期待した型じゃないと普通動かないし
静的だから安全というのは何か間違ってる気がするわ
PHPだから危険なのか?という話だし
そもそも関数で引数に型の指定があるない関わらず期待した型じゃないと普通動かないし
静的だから安全というのは何か間違ってる気がするわ
647デフォルトの名無しさん
2022/08/18(木) 21:24:02.04ID:zSwNEg3i >>637
前提が間違ってた場合の修正範囲に
動的型付けと静的型付けで顕著な違いが出る?
出るならそれを具体的に説明してよ
できれば簡単な擬似コードとかで
柔軟性が高いとか設計が重いとか言うだけだと説得力が乏しい
前提が間違ってた場合の修正範囲に
動的型付けと静的型付けで顕著な違いが出る?
出るならそれを具体的に説明してよ
できれば簡単な擬似コードとかで
柔軟性が高いとか設計が重いとか言うだけだと説得力が乏しい
648デフォルトの名無しさん
2022/08/18(木) 21:25:00.81ID:yMU9W3g1649デフォルトの名無しさん
2022/08/18(木) 21:25:37.80ID:kuToBQFh650デフォルトの名無しさん
2022/08/18(木) 21:26:20.58ID:4Dlj1ckV >>646
そのあたりも最近の静的型付け言語が対応しているでしょう
例えばRustならば引数に対して型指定ではなくtrait指定にできるし
その具体化解決は静的にも動的にも可能だし
もちろんいずれも安全に適用できることをRustでは保証される
そのあたりも最近の静的型付け言語が対応しているでしょう
例えばRustならば引数に対して型指定ではなくtrait指定にできるし
その具体化解決は静的にも動的にも可能だし
もちろんいずれも安全に適用できることをRustでは保証される
651デフォルトの名無しさん
2022/08/18(木) 21:43:21.22ID:mZ+fH4d1652デフォルトの名無しさん
2022/08/18(木) 21:43:46.51ID:vUREPivo653デフォルトの名無しさん
2022/08/18(木) 21:48:40.33ID:rKyKXmu0654デフォルトの名無しさん
2022/08/18(木) 21:57:29.78ID:3gZlWdNz655デフォルトの名無しさん
2022/08/18(木) 22:02:54.58ID:UNnRVh9z >>648
ぶっちゃけないな
型の想定が違ってるのにそれらしく動いて
かつテストでも発見できないバグで
かつ調査が難解となると相当にレアでしょ
それに定義してる型とあっているからと言って
ドメインエラーを常に拾えるわけじゃない
ぶっちゃけないな
型の想定が違ってるのにそれらしく動いて
かつテストでも発見できないバグで
かつ調査が難解となると相当にレアでしょ
それに定義してる型とあっているからと言って
ドメインエラーを常に拾えるわけじゃない
656デフォルトの名無しさん
2022/08/18(木) 22:08:16.63ID:sNPBcISa >>654
猫を電子レンジに入れて本番で実行するような開発者のいるプロジェクトなら
動的型付け言語に比べたら静的型付け言語のほうがリスクは低いだろうね
ただそういう開発者を排除するほうが遥かに安全性が高いと思うよ
猫を電子レンジに入れて本番で実行するような開発者のいるプロジェクトなら
動的型付け言語に比べたら静的型付け言語のほうがリスクは低いだろうね
ただそういう開発者を排除するほうが遥かに安全性が高いと思うよ
657デフォルトの名無しさん
2022/08/18(木) 22:11:31.85ID:i8FqLiOp 静的型付け不要って主張してるのはPHPおじさんしかいないようだけど
何でこのスレにいるのかわからん
何でこのスレにいるのかわからん
658デフォルトの名無しさん
2022/08/18(木) 22:13:54.84ID:FZFlEvPV659デフォルトの名無しさん
2022/08/18(木) 22:14:06.50ID:rKyKXmu0 類は友を呼ぶ
660デフォルトの名無しさん
2022/08/18(木) 22:19:32.70ID:yMU9W3g1 >>655
テストで担保というのが手間でしょ
カバーできてなくて本番のランタイムで
エラーを経験してことないのはよっぽど
丁寧に書いているか大してもの作ってないかの
どっちかだね
あと関係ないドメインエラーとか待ちだすのは
詭弁論破の練習?
テストで担保というのが手間でしょ
カバーできてなくて本番のランタイムで
エラーを経験してことないのはよっぽど
丁寧に書いているか大してもの作ってないかの
どっちかだね
あと関係ないドメインエラーとか待ちだすのは
詭弁論破の練習?
661デフォルトの名無しさん
2022/08/18(木) 22:45:49.60ID:VW7TsRc4 >>656
で、そういう人を排除できてんの?
で、そういう人を排除できてんの?
662デフォルトの名無しさん
2022/08/18(木) 22:48:29.89ID:VW7TsRc4 >>655
>それに定義してる型とあっているからと言って
>ドメインエラーを常に拾えるわけじゃない
0か100の世界線の人ですか?
エラーは早い段階でわかったほうがいいというのは世界の常識だけど、お前の世界線では違うみたいだな。
>それに定義してる型とあっているからと言って
>ドメインエラーを常に拾えるわけじゃない
0か100の世界線の人ですか?
エラーは早い段階でわかったほうがいいというのは世界の常識だけど、お前の世界線では違うみたいだな。
663デフォルトの名無しさん
2022/08/18(木) 22:56:27.19ID:4eWuEs9Z 猫とか車とか飯とか脳みそOOPかよ
お前らのしょうもない例え話は実害があるから本当迷惑なんだよ
お前らのしょうもない例え話は実害があるから本当迷惑なんだよ
664デフォルトの名無しさん
2022/08/18(木) 23:30:39.35ID:eFgxNJYT >>660
「あーそれなら確かに静的型付けにしてたら有利だね」
って言う現実的なコード例出してみてよ
ドメインエラーってのは
文字列を期待してるところに数値を渡したり
注文番号を期待してるところに配送番号を渡したり
First Nameを期待してるところにLast Nameを渡したりした状況のこと
「あーそれなら確かに静的型付けにしてたら有利だね」
って言う現実的なコード例出してみてよ
ドメインエラーってのは
文字列を期待してるところに数値を渡したり
注文番号を期待してるところに配送番号を渡したり
First Nameを期待してるところにLast Nameを渡したりした状況のこと
665デフォルトの名無しさん
2022/08/18(木) 23:36:33.83ID:RTRtwr2z666デフォルトの名無しさん
2022/08/18(木) 23:40:19.24ID:XhNJQXKP667デフォルトの名無しさん
2022/08/18(木) 23:42:51.05ID:yMU9W3g1668デフォルトの名無しさん
2022/08/18(木) 23:52:50.33ID:R+uszVYm669デフォルトの名無しさん
2022/08/19(金) 00:09:50.57ID:aSCRajpd >>666
FirstNameとLastNameを間違えるのはプログラミング言語やその型付け方法と関係ない話
そして静的型付け言語が不利になる話でもない
それにより何を主張したいのか?
もし本当に厳格に区別する必要があるならば各々を扱う専用型を設ければよい
そうせずに両方を文字列型で扱っても、変数名、フィールド/メンバー名、関数/メソッド名などの名付けを分ければ互いに入れ違いを避けられる
FirstNameとLastNameを間違えるのはプログラミング言語やその型付け方法と関係ない話
そして静的型付け言語が不利になる話でもない
それにより何を主張したいのか?
もし本当に厳格に区別する必要があるならば各々を扱う専用型を設ければよい
そうせずに両方を文字列型で扱っても、変数名、フィールド/メンバー名、関数/メソッド名などの名付けを分ければ互いに入れ違いを避けられる
670デフォルトの名無しさん
2022/08/19(金) 00:12:18.59ID:0E/6U7Rf671デフォルトの名無しさん
2022/08/19(金) 00:32:53.46ID:QXliTxmo ドメインエラーとか型付けと関係ない話持ち出してきてるのは何なん?
型が何なのかわからん奴なんだろうな。そりゃ型付きが面倒・邪魔に感じるだろうよ。
型が何なのかわからん奴なんだろうな。そりゃ型付きが面倒・邪魔に感じるだろうよ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 今年の漢字 [ぐれ★]
- 今年の漢字は「熊」に決定! 相次ぐクマ被害 去年は「金」 [冬月記者★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ★3 [冬月記者★]
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 ★4 [蚤の市★]
- あぼーん
- 【速報】衆院議員定数削減法案、自民・維新が今国会成立見送りで調整 [Hitzeschleier★]
- 【速報】今年の漢字、「熊」!wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 【毎日新聞】高市首相の「アイドル化」?若年層、同じ政策でも変化する評価 [718678614]
- 橋本環奈って格闘家タイプだよな
- 【速報】今年のゲームオブザイヤー、Clair Obscur: Expedition 33 [779938112]
- 橋本環奈って犬嫌いなん?
- お前ら俺の船に乗れ!ドン!!!!⛴🏡
