新しいものを表示
orange さんがブースト

たとえば C++ のクロージャは型名を指定できないので、 auto で雑に受けるか std::function で受けるわけですが、前者では関数であると縛りをつけられないし、後者だと実行時オーバーヘッドがあります。
Rust で同じことをすると let による型指定なしの束縛と Box<dyn Fn()> などが相当するわけですが、これ以外にも impl Fn() という指定もできます。
たとえばクロージャを返す
fn f() -> impl Fn() {
|| println!("hello")
}
は、「何度でも呼べる関数として振る舞う何かを返す」ということは述べるけど、 std::function のようなオーバーヘッドはない (わざと付けることもできるけど)

スレッドを表示
orange さんがブースト

引数の位置での存在型は、 Interface や基底クラスと関数テーブルのようなものとかなり近く見えますね。
対して戻り値の位置では、 interface そのものを返すことはできない(と思う)し、基底クラスのポインタを返すにせよ「基底クラスのポインタである」という具体的な内部実装は漏れるわけです。
加えて、こういった実行時の多相だとオーバーヘッドが出てしまうけど、存在型ならユーザが名前を示せないだけでコンパイラは具体的な型を知っているので、実行時オーバーヘッドがない

orange さんがブースト

典型的には「この関数は i64 のイテレータであるような何らかの型を返すことは保証するけど、それが具体的にどのような型であるかは教えたくないよ (i64 のイテレータであること以外の一切の保証を与えたくないよ)」というケースなどで有用。ある種のカプセル化、内部表現の隠蔽ですね

スレッドを表示

これ読みながら思ったのは、C# Delphi(?)/Java(?)で言う所のInterface・・・?><(ぜんぜん違う?><;)

型システムの理論からみるSwiftの存在型(Existential Type) - Qiita qiita.com/ukitaka/items/a993b5

orange さんがブースト

「具体的に何であるかはユーザに教えたくないが、とにかく何らかの特徴を持つ何らかの型」という型指定を可能にするのが existential type (存在型) で、これは通常の generics における「どのような型についても○○」という全称型と対照的なものとされている

existential type、ぐぐったけどさっぱりわからんになった・・・><

そういえば最近気づいたけど、これDelphiっぽさ><
WebRequest.Create Method (System.Net) | Microsoft Docs docs.microsoft.com/en-us/dotne

単語の短縮形、リーダブルコードとかではどの程度なら許容されてるのか謎><
(例えばさっき話題になったRustのfnも、Pascal脳なので「functionって書けばいいじゃん!?><」って思う><(Pascal一族も短縮形使う部分それなりにあるけど><;))

長すぎる名前のクラス、長すぎる名前のジェネリクスなクラスとの組み合わせになるとさらにとんでもない事になる><;(なってる><;)

最近、型安全に頼って安全にしようとして、名前だけでもミスに気づけるようにしようとした結果、ハンガリアン記法っぽい&Objective-Cみたいなすごく長い名前になっちゃっててどうしようになっちゃってる><

orange さんがブースト

型が複雑になってきて手書きするのが面倒ってのもあることを思うと、そっちをなんとかするのがいいのかもな

エラーに気づけるのはなるべく早いほうがいいし、実行時までわからないよりはコンパイルするときにわかる方がいいし、出来ることなら書いてる途中で既にわかる方がいい><

orange さんがブースト

最近の風潮><
var hoge = 1.0;
オレンジ><
double hoge = 1.0d;
(省略可能なのにヒューマンエラー検出用につけてるサフィックスはdoubleとfloatの時だけ><)

狭いスコープの範囲(?)、C# では(極限られた部分で><;)varって書いて、 IDE0008 で明示的な型に一括置換させるようになったから、オレンジのコードからvarが消えた><

orange さんがブースト

外部に公開される部分は型を明示して、狭いスコープでは推論させるみたいなの、最近ぼちぼち見かける

結局実際にコードに型が書いてなかったら人間から見たら同じじゃんってなる><
(人間が型を推論しなきゃいけない状況が発生するのがすごくむかつく><)

△型推論が多用されてると
○動的型つけじゃない事を売り文句にしてるのに型推論が多用されてると

スレッドを表示
古いものを表示
:realtek:

思考の /dev/null