rust-lang / rust-lang/rfcs

Improve the `fn` pointer types

Open
#1,037 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

T-lang
Dominant language
Markdown
Stars
6.6k
Forks
1.7k
Avg merge
16h 14m
Merged PRs (30d)
1

Description

The current function pointer types have some downsides:

  1. They assume that all functions are static code that lives forever. This isn't true for JITs or DLLs.
  2. They are always non-nullable, safe pointers. This may not be what you want -- particularly the nullable aspect. This is connected to the previous point, because it implies that there is no place to attach a lifetime in the current syntax.

This is a "postponement issue". There have been various RFCs aiming to improve this:

  • #252 -- a fairly straight-forward scheme to add lifetimes to fn types.
  • #883 -- a simple scheme to change the syntax of fn to &'static fn for forwards compatibility.
  • #996 -- a more involved scheme which introduced a kind of unsized type.

It should be possible to adapt these schemes backwards compatibly.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

No source files, tests, or entry points are named. Start by reading RFCs #252, #883, and #996, then compare their lifetime, nullability, and syntax proposals to determine whether one can be adapted backwards compatibly; done requires a concrete, agreed direction rather than just postponement.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
compilers
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.