Skip to content

Roadmap / Features TODO #3

Description

@fibodevy

Roadmap for FPC Unleashed language features.

To discuss a specific feature, see the bottom of this issue.

Features Roadmap

  • 2026-06-11 String Interpolation - docs
  • 2026-06-16 Type() - compile-time typeof / decltype; declare a variable as the type of another - docs
  • 2026-07-01 {$embedstr <var name> <file path>} - embed a file at compile time as a String const; 1-arg {$embedstr <file path>} yields an inline String expression (foo({$embedstr <path>}))
  • 2026-07-01 {$embedbytes <var name> <file path>} - embed a file at compile time as an array[N] of byte const; 1-arg {$embedbytes <file path>} yields an inline byte-array literal
  • 2026-07-01 threadstatic - like static, but per-thread (TLS); function-local scope, persists for the thread's lifetime. forum post 1, forum post 2
  • 2026-07-01 lock, trylock - critical-section sugar; forum post, GitHub discussion
  • 2026-07-01 zeroinit modifier - zero-init var section
  • 2026-07-02 zeroinit: zero inline anonymous compound locals (var a: array[4] of Integer) - skipped today; Default(T) mangles its hidden zero-const off the type symbol, which anonymous types lack
  • alias modifier - extra Pascal-callable name(s): procedure foo; alias bar, baz;
  • parametrized macros
  • forceinline modifier
  • lightweight generics - witness-table; less code bloat; feat/lightweight-generics
  • compile-time functions - similar to the pure functions currently waiting to merge in stock FPC
  • NativeNT target - Kernel Mode (drivers) focus. The non-kernel-mode native .exe (runs very early in boot - autochk / boot-time chkdisk, AV scanners) is niche, likely skip.
  • named arguments - set argument(s) by name, including the Nth one without the preceding args. Open question: must the skipped args have declared defaults, or are they zeroed? Needs discussion.

Abandoned / Revamped

  • 2026-06-16 {$incfile <var name> <file path>} - include a file at compile time as a String; revamped into $embedstr
  • 2026-06-16 one-arg {$incfile <file path>} - inline String expression (foo({$incfile <path>})); revamped into one-arg $embedstr
  • {$incfilebytes <var name> <file path>} - include a file at compile time as a byte array; revamped into $embedbytes
  • {$alias <current routine> <alias name>} - extra Pascal-callable name (directive); revamped into the alias modifier

Long term

  • Project rename - move "FPC Unleashed" to a neutral, self-standing name.
    • The current name carries the FPC trademark, which isn't appropriate for an unofficial fork.
    • Planned once the project reaches 100 stars - no rush while it's a personal playground.
    • The new name should stand on its own identity and not imply any official FPC/Lazarus affiliation.
    • The fork stays FPC-based - only the public name changes.
    • Name suggestions welcome - drop your suggestions in the discussion; a poll will pick the winner when there's a shortlist.

Discussion about specific features

Individual features are discussed in Discussions (the Ideas / Feature Requests category), each in its own thread:

  • existing features / ideas: Feature: <name>
  • new feature requests: Feature request: <name>

If a feature doesn't have a thread yet, feel free to create one. Threaded replies, upvotes and polls fit gathering pros/cons much better than a flat issue.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions