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
  • 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.
  • zeroinit: zero inline anonymous compound locals (var a: array[0..3] of Integer) - skipped today; Default(T) mangles its hidden zero-const off the type symbol, which anonymous types lack

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 requesthelp wantedExtra attention is neededquestionFurther information is requested

Fields

No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions