Skip to content

proposal: Local functions - #490

Draft
Allianaab2m wants to merge 2 commits into
mainfrom
proposal/local-fn
Draft

Allianaab2m wants to merge 2 commits into
mainfrom
proposal/local-fn

Conversation

@Allianaab2m

Copy link
Copy Markdown
Member

ブロックの中に名前付きの関数(局所関数)を fn name(x: T) -> U { ... } で書けるようにする Proposal.

  • 宣言より後ろと自分の本体の中で名前が見える.巻き上げないので相互再帰はできない
  • 外側の変数を捕まえる.一般化しないが,外側の fn の型パラメータは書ける
  • 自分自身への末尾呼び出しはスタックを使わない([fn.loop] を広げる)
  • use X の解決,capability の捕捉はラムダと同じ規則
  • 名前で呼べば名前付き引数が使える.テストからは呼べない

動機は core / std にある「pub fn + 一度しか呼ばれない再帰の助け関数」の組(range / range_onto,zip / zip_onto,Bytes の compare_from など 16 組,本文の表).

関連: closure-syntax(ラムダを |x| e にし,自分を参照できないままにする).まだ proposals/ に無いので related には入れず,本文で触れている.

詰めること(Open questions):

  • 局所関数を後の束縛で隠せるか,トップレベルの fn を隠したら警告するか
  • ## を付けられるか,LSP の hover で見せるか
  • 再帰しない局所関数とラムダの束縛が重なる件
  • ブロックの最後の文が局所関数のとき
  • 新しい構文エラーのコード

@Allianaab2m Allianaab2m added the proposal A proposal to change the specification (proposals/) label Nov 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

proposal A proposal to change the specification (proposals/)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant