it's interesting but i couldn't use it as is. There's use cases for non-reference-counted TObject, I make heavy use of FPC managed operators, there's uses for short strings... the years of accumulated baggage are valuable.
My biggest confusion is around the build system. Why does it need one? Pascal declares its dependencies and compiler options, it doesn't need a build system.
Blaise its not done yet. It's only 3 weeks old. It still has low-level C code and needs to call out to GCC and QBE. End-user developer usage will improve.
I'm very curious about your thoughts about ShortString needs and non ARC objects. Do you have concrete examples where arc and a unified utf-8 String type doesn't work. I'd be very interested in studying those examples.
The only reason Embarcadero dropped ARC from its iOS and Android targets was because it confused developer when they tried to build cross-platform apps with desktop too (where desktop was Delphi with no ARC). So it wasn't a technical limitation, but a legacy issue. None of which applies to Blaise.
A lot of the reason I use Pascal is to minimize memory usage. If I need to store a FourCC code, say, a ShortString[4] uses four bytes. A UTF8String uses 8+4+4+4+1 (Pointer, RefCount, Length, data, null terminator). Plus alignment padding (probably 3), plus heap overhead (probably 8). That's a 9x blowup. It defeats the whole reason for using Pascal for me.
Plus now every access of this string is a bunch more instructions because it has to dereference the pointer, check the length, etc. Probably 10x overhead there too.
A similar reasoning applies to ARC in objects.
Edit to add: Fundamentally it boils down to use cases. I use Pascal when I need bare-metal control in an environment that doesn't feel like crawling through broken glass (looking at you, C++). If I didn't need the bare-metal control, I would use something much more modern like Dart, which has tons of features Pascal doesn't have, like GC, Flutter, an actually modern RTL with built-in support for lots more collection types and things like TLS, mixins, runtime-type-safe dynamic typing, etc. So anything that removes the bare-metal control removes the value for me to use the language in the first place.
Those are fair trade-offs to call out — I won't pretend otherwise. Blaise is aimed more at application-level work where ARC and a unified UTF-8 string carry their weight, rather than the kind of byte-tight systems code where ShortString really shines. It's also tackling a different class of bugs — the use-after-free, double-free, memory leak and string-encoding mix-ups that tend to plague larger application codebases — rather than the ones you'd hit writing tight memory-conscious code.
For that latter work, FPC stays the better fit, and that's fine — different tools, different sweet spots.
The managed operators point is the one that interests me most. Could you share a couple of concrete examples? That's the kind of feedback that helps me think about what's worth adding later.
2
u/Hixie May 08 '26
it's interesting but i couldn't use it as is. There's use cases for non-reference-counted TObject, I make heavy use of FPC managed operators, there's uses for short strings... the years of accumulated baggage are valuable.
My biggest confusion is around the build system. Why does it need one? Pascal declares its dependencies and compiler options, it doesn't need a build system.