Skip to content

言語: ジェネリクス / 型パラメータ #105

Description

@ryuichi1208

目的

ユーザ定義関数・型に型パラメータを取れるようにする。list[T] (#7) / dict[K,V] (#8) / Option[T] (#15) / Future[T] は既に組み込みでジェネリック相当だが、ユーザがそれを書く手段が無い。

想定構文

def map[T, U](xs: List[T], f: fn(T) -> U) -> List[U]:
    out: List[U] = list_new()
    for x in xs:
        list_push(out, f(x))
    return out

または C++/Rust 寄りに <T, U> を使う案もある(Python 構文との親和性は [T] が高い)。

検討事項

  • 単純化 (monomorphization) するか辞書渡し (dictionary passing) にするか
  • 制約構文: T: Hashable / where T: Eq の必要性 (→ trait/protocol #TBD と連動)
  • 型推論 (言語: 型推論 (let/var 風の型省略) #12) との相互作用: 呼び出し側で map(xs, f) だけで T, U を推論できるか
  • LLVM IR 上の表現: monomorphize なら ir 関数を型ごとに複製

受け入れ条件

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:lang言語仕様・構文・型システムenhancementNew feature or requestpriority:medium実用化のために重要

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions