Rendered at 12:47:01 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
archonis 52 minutes ago [-]
Fruity Loops is written in Delphi. There was a period in time where because of this, the company said there would never be a Mac version, but eventually one happened with the help of ObjectPascal.
Inityx 17 minutes ago [-]
Not to be That Guy, but it's been over 20 years since FL Studio was called Fruity Loops
tombert 11 hours ago [-]
When I was first learning to program, I started using the free Borland Turbo C++ compiler [1]. I had managed to get subscribed to their newsletter that seemed very insistent that Delphi was going to be the future for desktop software. Awhile later, I found out that "Spybot – Search & Destroy" was written in Delphi, so I figured it might be fun to play with.
So play with it I did. I hadn't used Visual Basic at the time, so the entire idea of "drag and drop" GUIs was kind of amazing, and I even kind of ended up liking the language.
I wasn't able to get any kind of OpenGL stuff working with it, so I ended up going back to C and I really haven't touched the language since, but I kind of feel like I should at some point just to finish off that loose thread in my education.
[1] I actually don't remember if that was proper freeware or if I had gotten it cough unofficially free...
alwillis 15 hours ago [-]
Photoshop 1.0 was written mostly in Object Pascal with some 68000 assembly language; source code is available:
One of the greatest features of FreePascal is that strings are managed. You never allocate or deallocate them, you just declare the variable, and it manages them. They're counted, reference counted, copy on write, and can hold gigabytes.
According to google:
When you assign one dynamic string to another, Free Pascal does not duplicate the actual characters in memory. Instead, both variables point to the same character buffer in the heap, and the runtime increments an internal reference counter. A physical memory copy is only triggered when one of the string instances is modified (written to)
Free Pascal strings are as close as you get to magic, compared to C/C++.
Panzerschrek 7 hours ago [-]
COW-strings aren't free. In a multithreaded environment they require atomic operations for use counter, which isn't cheap.
Some time ago some implementations of C++ did use COW-strings too, but this approach was rejected due to such performance concerns.
exceptione 2 hours ago [-]
Many languages provide 2 primitives as we generally want 2 different concepts:
If someone has an example graphical project which compiles to an HTML page w/ JavaScript using the above, I'd love to see it and a detailed set of build instructions and notes on installing the needed toolchain and deployment. (as a note, I'm currently working in flet.dev using Python which allowed me to get a small prototype up-and-running, but I'm still looking into self-hosting and doing something more complex)
armcat 19 hours ago [-]
This takes me back, my first adventure in programming was as a 12 year old creating a Pong clone using Turbo Pascal on DOS. It came in handy later as a 20 year old when I was doing freelance as a Delphi dev. Amazing to see Pascal on HN.
jasonwatkinspdx 17 hours ago [-]
At around the same age I learned a version/imitation of Object Pascal for scripting the PIRCH IRC client on windows 95. It was neet when a friends dad who was a professional programmer showed me the latest version of Delphi, which he was pretty excited about, and I could actually understand most of what he was showing me.
WillAdams 41 minutes ago [-]
The really interesting thing to me is when Modula 2/3 and Oberon come up --- I'd _really_ love to see a bare-metal implementation of Oberon for the Raspberry Pi which was:
- had a web browser which could handle the basics of the modern web
I mean, the documentation is sixteen pages --- seems like a perfect fit --- still waiting on a tablet shell for an rPi 5 (and still need to get an rPi 5 Compute Module for it), so will be looking into it then....
jll29 15 hours ago [-]
I loved writing Pascal and Modula-2 at the time, and using both for a while sure made me a better programmer. Pascal was an excellent educational tool, but for a decade had enormous business impact, too.
Its slight verbosity - somewhere between C and COBOL - arguably was a pro rather than a con.
Today, Ada and Julia seem to be the langages alive that resemble Pascal the most.
kjs3 12 hours ago [-]
Ada is still a thing (just not on HN). If this is your thing, check out Modula-3 for a serious 'what might have been' fix.
pjmlp 5 hours ago [-]
The critics were always disingenuous , ignoring that Modula-2 came out already in 1978, designed for systems programming and fixing Pascal initial flaws.
Also most of those extensions ended up in ISO Extended Pascal revision, also usually ignored in such criticism.
Lerc 14 hours ago [-]
I used to have object pascal as my main language, and it has a lot in its favour. But when I go back to it I find two things drag it down.
Pre definition of variables. I would like to be able to define variables on first assignment and scoped to the begin/end in which that happens, I don't think there is a good remaining argument to keep them above the statements.
The namespace is cluttered with legacy usage, making the many years of advancement require odd. Combinations of prefixes.
I still think there is a scope for a light fork that changes the name to distinguish it and starts the RTL afresh using the decades of hindsight and improvements.
cisc 14 hours ago [-]
> I would like to be able to define variables on first assignment and scoped to the begin/end in which that happens
Good news! Object Pascal has inline variable declaration with type inference:
Oh excellent, last time I saw it proposed there were, well, ructions.
Type inference is my preference but I thought that would have been a step too far for some.
djriley 9 hours ago [-]
It's in Delphi, Free Pascal devs are still pretty resistant to the idea and it likely won't be coming to fpc any time soon.
fatty_patty89 22 hours ago [-]
There's also a new book called Free Pascal From Square One released in 2025 that teaches programming and pascal
zorobo 15 hours ago [-]
I was introduced to ucsd pascal on apple 2 but switched to Ada by the time turbo pascal came out.
This intro is nice but I feel Ada is the way to go if one is into wirthian languages.
pjmlp 5 hours ago [-]
Agreed, given it being an international standard.
However even Ada Core's IDE is a bit of lackluster when comparing with 1990's Delphi, let alone today.
baranul 23 hours ago [-]
It's amazing how underestimated the Object Pascal language is. Certain people or rivals want to write it off or declare it's "dead", yet the language (including various dialects) are still going strong.
pjmlp 23 hours ago [-]
Yeah, it was pity that Borland lost its way, and Apple decided to refocus from Object Pascal into C++.
Otherwise it would still be a big contender.
Everything that Zig offers over C as selling point was already there in Object Pascal.
sehugg 21 hours ago [-]
I recall the turning point was when id used the Watcom compiler for DOOM. Watcom had the 32-bit flat model DOS extender and were starting to add the difficult optimizations. Turbo/Borland Pascal was built for compile and link speed, not even getting a real -O option until Delphi (except for turning off range and stack checking)
pjmlp 21 hours ago [-]
Turbo Pascal 7 had them as well.
ape4 22 hours ago [-]
If I remember right, it was memory safe - something C/C++ has yet to achieve.
pjmlp 21 hours ago [-]
Even PL/I, JOVIAL, and NEWP on the decade predating C had it.
cyberax 16 hours ago [-]
It was not. It just made any dynamic structures so painful that few programmers used them.
But it _did_ have range checks for array access.
cisc 16 hours ago [-]
> It just made any dynamic structures so painful that few programmers used them
What's an example of the pain?
cyberax 15 hours ago [-]
Awkward syntax for pointer access, for one thing.
cisc 15 hours ago [-]
What's awkward about the syntax? It's straightforward:
You need to dereference pointer to access the structure fields, for example.
cisc 14 hours ago [-]
Nope, you don't need to. For example, all class references are pointers and they don't need to be dereferenced manually.
Object Pascal's pointer syntax is detailed in the links I gave you.
13 hours ago [-]
applfanboysbgon 23 hours ago [-]
Comptime? Vastly superior toolchain? Trivial C interop? Sub-second incremental compilation in large projects? I'm not familiar with Object Pascal at all, so do correct me if I'm wrong, but I'd really be surprised if it has much of Zig's standout features.
mickeyp 20 hours ago [-]
Delphi would compile & link 2 MLOC of code on a crappy work laptop in 30 seconds to a minute. Incremental compiles were instant. So fast most developers never bothered learning the "go to next error" hotkey and just spammed F9 (compile & run) whenever they fixed a syntax error. It was that fast.
Trivial C interop - yes. Both pascal and cdecl style calling conventions.
Toolchain? Back then - yes. Today? Probably not; depends what you mean by it. It had perfect COM interop which mattered back then, and you could trivially link stuff if you wanted to. And people did.
pjmlp 5 hours ago [-]
COM interop matters even more today, as COM (and WinRT as its evolution) has become the main mechanism to deliver new APIs since Windows Vista.
Ironically it is still easier in Delphi than the frameworks Microsoft keeps pouring out for .NET and C++.
I keep joking they should afford some Embarcadero licenses to learn how to actually do it.
mldbk 17 hours ago [-]
Oh my gosh! Core memories unlocked:
> most developers never bothered learning the "go to next error" hotkey and just spammed F9 (compile & run) whenever they fixed a syntax error
We didn't know we were privileged. I thought it was normal thing to have.
tliltocatl 18 hours ago [-]
Comptime here means not "compilation time", but rather ability to run some your code during compilation (i. e. compile-time metaprogramming). Pascal didn't had this.
applfanboysbgon 18 hours ago [-]
They probably know that. I specifically mentioned actual compilation time as another one of the things that's great about Zig, so it is relevant to mention. Certainly the language sounds nice from what I'm hearing. These days most languages are deeply neglecting compilation time as a feature (interpreted languages aside), so Zig is a breath of fresh air for me in that regard.
klipt 16 hours ago [-]
Golang is also designed to compile very fast.
applfanboysbgon 15 hours ago [-]
Yes, I do appreciate Go's existence as well.
jan_m_savage 7 hours ago [-]
Go directly is inspired by Modula-3 and Oberon-2, both are descendants from Pascal family. One of the Go's fathers was Wirth's students IIRC.
pjmlp 5 hours ago [-]
Oberon-2 surely, there are zero Modula-3 influences in Go.
Also Wirth had nothing to do with Modula-3, that was all DEC / Olivetti SRC work, done by ex-Xerox people with experience on Cedar and Modula-2+.
jan_m_savage 4 hours ago [-]
"Go is mostly in the C family (basic syntax), with significant input from the Pascal/Modula/Oberon family"
> Comptime? Vastly superior toolchain? Trivial C interop? Sub-second incremental compilation in large projects?
No comptime, but everything else, sure, Turbo Pascal (and then Delphi) had.
Maybe it'll blow your mind (not sure if you find this impressive or not), but Turbo Pascal had sub-second compilation per module on large modules back on my 486 with 4MB of RAM.
Sure, Zig has more features than Pascal, but not the ones you listed (except, of course, for comptime).
If you're not in the mood to rent your compiler, you can also try Lazarus.
andsoitis 20 hours ago [-]
Sure. The rent does give you polish, however.
Also, for non-commercial use, Delphi is free.
sakesun 14 hours ago [-]
Object Pascal has more runtime reflection features which were added to facilitate visual programming paradigm. Do you know what can be faster than sub-second incremental compilation ? Run-time/Design-time manipulation !
pjmlp 22 hours ago [-]
Comptime is the only thing going for it.
Object Pascal compilers were already super fast in MS-DOS hardware!
LoganDark 20 hours ago [-]
> Apple decided to refocus from Object Pascal into C++
IIRC Apple went and made Objective-C(/C++) and then eventually Swift. Not sure if they actually embraced C++ all that much - did they really?
pjmlp 20 hours ago [-]
Completely off the charts.
I am talking about Apple after Jobs was kicked out.
You missed the part where NeXT licensed Objective-C from Stepstone, Apple bought NeXT as last survival action before bankruptcy, and OS X sprung out of NeXTSTEP.
LoganDark 20 hours ago [-]
Thanks!
maomao5 20 hours ago [-]
People hate the verbose syntax. It doesn't bother me, but I've been surprised how common that is described amongst people that don't care for Pascal.
Personally, in that family of languages I prefer Ada, but I gave up with programming and programming languages.
kjs3 12 hours ago [-]
People hate the verbose syntax
People hate verbose syntax until it's about a language they like. Then suddenly "the IDE takes care of that so I don't care" or some such. With Ada in particular, if you gave up safer programming for 40 years because "ew nasty I have to type begin...end..." then I don't want to hear about your pet safe language.
pjmlp 5 hours ago [-]
The same people that now program in English, writing Markdown file after Markdown file?
Narishma 20 hours ago [-]
For me it's less the verbose syntax but more the weirdness and inconsistency of it. Like making a distinction between a procedure and a function, or returning data from a function by assigning it to a magical variable. It feels like a cobbled-together language rather than a properly designed one.
MaxBarraclough 16 hours ago [-]
I wasn't able to find a definitive account of why they're separated in Ada, but I believe the idea is this: functions are for where code behaves in a roughly functionally pure way and yields a value that should not be discarded by the caller, whereas procs are for functionality with 'deep' side-effects.
The SPARK subset of Ada comes pretty close to enforcing purity of Ada functions, although it still permits them to read globals. [0]
It's not just an oversight. The core of the Ada language was designed deliberately. [1]
IMO it is not entirely dead, but not really "alive" either. TIOBE even has Object Pascal mentioned right now in TOP 20. Now, TIOBE has tons of issues, but it also means that there exists some tangible interest.
Still, I don't feel many people want to use Object Pascal these days. If you have the choice between Python and Object Pascal, most people will undoubtedly use Python. It's just how it is right now, and I also don't see how that can change in favour of Object Pascal. Programming languages nowadays have so much more competition, and people are less tolerant of flaws. Strangely enough, people barely seem to work on these flaws; this is one of my pet peeve with ruby, the documentation should be much better but it is not. I no longer find that acceptable in 2026, with AI spam slop lowering the quality and google search being terrible and almost totally useless nowadays. You'd assume that a counter-move to this slop-degradation would be to massively improve documentation, but you still find core projects in ruby or at the least important add-ons, to have low-quality documentation. And barely anybody wants to improve on that either.
pjmlp 5 hours ago [-]
Indeed the "why bother with performance when others write code in C for us" mindset.
jqpabc123 3 days ago [-]
I was introduced a very long time ago --- aka Delphi 2. I really like the language but there are mainly 2 problems that stand in the way of using it.
1) The code isn't as "optimized" as it could be.
2) The talent pool is limited --- chicken or egg issue.
It has been this way for a very long time so I don't see it changing.
smartmic 22 hours ago [-]
What do you mean by “not optimized enough“?
Binaries created with Free Pascal Compiler are very small, compilation time is super fast and runtime performance was never an issue for the typical system/userland programs. I think in many ways on par or ahead of other mainstream system programming languages.
pjmlp 22 hours ago [-]
Additionally, it eventually shared the same backend with Borland C++, and nowadays C++ Builder.
Also Embarcadero has also adopted LLVM, while still having fast build times.
jqpabc123 15 hours ago [-]
I think in many ways on par or ahead of other mainstream system programming languages.
As a different datapoint Pascal is still taught here in Romania in secondary school just as it was the case 20 years ago.
Bigger problem is that they teach the fundamentals with the abandonware that is turbo pascal instead of using something like the modern Free Pascal Compiler. Which means knowledge of what is possible outside curricula is limited.
Last year I almost was tasked with porting some Pascal codebase to a modern language. Problem was the project had a bus factor of 1, legacy overengineered and would only compile on windows with some proprietary compiler.
Maybe that company would use Claude/Codex or something like that, today, to port the project.
AlexeyBrin 15 hours ago [-]
> Bigger problem is that they teach the fundamentals with the abandonware that is turbo pascal instead of using something like the modern Free Pascal Compiler. Which means knowledge of what is possible outside curricula is limited.
FreePascal can compile TP programs with no changes except for the MS-DOS graphics. A student can swap FP for TP and the code will keep running. But yes, I would switch to FP from the start if I were in charge.
ferrule 9 hours ago [-]
Ah, Object Pascal! Delphi was my first real IDE, felt so productive back then. Good to see it getting aern modern look for new devs.
the_wolo 9 hours ago [-]
To learn more about vending machines, also refer to the anime "Reborn as a Vending Machine, I Now Wander the Dungeon"
agumonkey 16 hours ago [-]
Perfect to implement your own haskell I guess :p
ei8ths 21 hours ago [-]
this is really neat to see and that it has support for any modern system. I don't know pascal and could be a fun way to learn it.
burner420042 17 hours ago [-]
Huwstube and Bg-Lazarus-en-CreatingaWeb-s8e are great youtube channels.
shevy-java 22 hours ago [-]
I think I last used Pascal, TurboPascal if I remember correctly,
in school - perhaps at age 17 or something like that. I recall
that we used to define some things from geometry, e. g. a triangle,
calculating sides, angles, surface area and so forth, and then
of some more objects from geometry.
I have not used Pascal since then but it was not the most terrible
programming language of all times either. These days I would not
know why I'd want to use it, compared to IMO better languages. Nonetheless
I found it ok for teaching in school back then.
desireco42 17 hours ago [-]
AI will do all our work now, but man at least I lived and wrote Pascal growing up.
theamk 21 hours ago [-]
> 5.1. Remember to free the class instances
> The class instances have to be manually freed, otherwise you get memory leaks.
manual memory management in 2026?
andsoitis 21 hours ago [-]
> > 5.1. Remember to free the class instances
> > The class instances have to be manually freed, otherwise you get memory leaks.
> manual memory management in 2026?
Whilw there is a certain hype, Rust has affine types to prevent use after free, based on Cyclone type system, which AT&T was researching as C replacement, contrary to the list above.
So play with it I did. I hadn't used Visual Basic at the time, so the entire idea of "drag and drop" GUIs was kind of amazing, and I even kind of ended up liking the language.
I wasn't able to get any kind of OpenGL stuff working with it, so I ended up going back to C and I really haven't touched the language since, but I kind of feel like I should at some point just to finish off that loose thread in my education.
[1] I actually don't remember if that was proper freeware or if I had gotten it cough unofficially free...
https://computerhistory.org/blog/adobe-photoshop-source-code...
According to google:
When you assign one dynamic string to another, Free Pascal does not duplicate the actual characters in memory. Instead, both variables point to the same character buffer in the heap, and the runtime increments an internal reference counter. A physical memory copy is only triggered when one of the string instances is modified (written to)
Free Pascal strings are as close as you get to magic, compared to C/C++.
I'd love to be able to take it up again, and this document looks very promising for that, esp. paired with:
https://wiki.freepascal.org/pas2js
which I now see is supported in Lazarus.
If someone has an example graphical project which compiles to an HTML page w/ JavaScript using the above, I'd love to see it and a detailed set of build instructions and notes on installing the needed toolchain and deployment. (as a note, I'm currently working in flet.dev using Python which allowed me to get a small prototype up-and-running, but I'm still looking into self-hosting and doing something more complex)
- actually ported (_not_ emulated) w/ native drivers
- easy to install
- performant
- had an attractive GUI
- had a web browser which could handle the basics of the modern web
I mean, the documentation is sixteen pages --- seems like a perfect fit --- still waiting on a tablet shell for an rPi 5 (and still need to get an rPi 5 Compute Module for it), so will be looking into it then....
Most criticized things regarding Pascal e.g. https://www.cs.virginia.edu/~evans/cs655/readings/bwk-on-pas... were already fixed by extension or coukd be fixed easily.
Its slight verbosity - somewhere between C and COBOL - arguably was a pro rather than a con.
Today, Ada and Julia seem to be the langages alive that resemble Pascal the most.
Also most of those extensions ended up in ISO Extended Pascal revision, also usually ignored in such criticism.
Pre definition of variables. I would like to be able to define variables on first assignment and scoped to the begin/end in which that happens, I don't think there is a good remaining argument to keep them above the statements.
The namespace is cluttered with legacy usage, making the many years of advancement require odd. Combinations of prefixes.
I still think there is a scope for a light fork that changes the name to distinguish it and starts the RTL afresh using the decades of hindsight and improvements.
Good news! Object Pascal has inline variable declaration with type inference:
https://docwiki.embarcadero.com/RADStudio/Florence/en/Delphi...
https://blogs.embarcadero.com/introducing-inline-variables-i...
Type inference is my preference but I thought that would have been a step too far for some.
However even Ada Core's IDE is a bit of lackluster when comparing with 1990's Delphi, let alone today.
Otherwise it would still be a big contender.
Everything that Zig offers over C as selling point was already there in Object Pascal.
But it _did_ have range checks for array access.
What's an example of the pain?
https://docwiki.embarcadero.com/RADStudio/Florence/en/Pointe...
https://castle-engine.io/modern_pascal#_pointers
Object Pascal's pointer syntax is detailed in the links I gave you.
Trivial C interop - yes. Both pascal and cdecl style calling conventions.
Toolchain? Back then - yes. Today? Probably not; depends what you mean by it. It had perfect COM interop which mattered back then, and you could trivially link stuff if you wanted to. And people did.
Ironically it is still easier in Delphi than the frameworks Microsoft keeps pouring out for .NET and C++.
I keep joking they should afford some Embarcadero licenses to learn how to actually do it.
> most developers never bothered learning the "go to next error" hotkey and just spammed F9 (compile & run) whenever they fixed a syntax error
We didn't know we were privileged. I thought it was normal thing to have.
Also Wirth had nothing to do with Modula-3, that was all DEC / Olivetti SRC work, done by ex-Xerox people with experience on Cedar and Modula-2+.
source: https://go.dev/doc/faq
Without Pascal there would be no Modula.
No comptime, but everything else, sure, Turbo Pascal (and then Delphi) had.
Maybe it'll blow your mind (not sure if you find this impressive or not), but Turbo Pascal had sub-second compilation per module on large modules back on my 486 with 4MB of RAM.
Sure, Zig has more features than Pascal, but not the ones you listed (except, of course, for comptime).
And still does. You can get the latest version of Delphi (including a free version for non-commercial use) here: https://www.embarcadero.com/products/delphi
It rocks.
You're also not limited to Delphi. You can use Oxygene https://www.remobjects.com/elements/oxygene/language
If you're not in the mood to rent your compiler, you can also try Lazarus.
Also, for non-commercial use, Delphi is free.
Object Pascal compilers were already super fast in MS-DOS hardware!
IIRC Apple went and made Objective-C(/C++) and then eventually Swift. Not sure if they actually embraced C++ all that much - did they really?
I am talking about Apple after Jobs was kicked out.
You missed the part where NeXT licensed Objective-C from Stepstone, Apple bought NeXT as last survival action before bankruptcy, and OS X sprung out of NeXTSTEP.
Personally, in that family of languages I prefer Ada, but I gave up with programming and programming languages.
People hate verbose syntax until it's about a language they like. Then suddenly "the IDE takes care of that so I don't care" or some such. With Ada in particular, if you gave up safer programming for 40 years because "ew nasty I have to type begin...end..." then I don't want to hear about your pet safe language.
The SPARK subset of Ada comes pretty close to enforcing purity of Ada functions, although it still permits them to read globals. [0]
It's not just an oversight. The core of the Ada language was designed deliberately. [1]
[0] https://learn.adacore.com/courses/intro-to-spark/chapters/01...
[1] https://en.wikipedia.org/wiki/Ada_(programming_language)#His...
Still, I don't feel many people want to use Object Pascal these days. If you have the choice between Python and Object Pascal, most people will undoubtedly use Python. It's just how it is right now, and I also don't see how that can change in favour of Object Pascal. Programming languages nowadays have so much more competition, and people are less tolerant of flaws. Strangely enough, people barely seem to work on these flaws; this is one of my pet peeve with ruby, the documentation should be much better but it is not. I no longer find that acceptable in 2026, with AI spam slop lowering the quality and google search being terrible and almost totally useless nowadays. You'd assume that a counter-move to this slop-degradation would be to massively improve documentation, but you still find core projects in ruby or at the least important add-ons, to have low-quality documentation. And barely anybody wants to improve on that either.
1) The code isn't as "optimized" as it could be.
2) The talent pool is limited --- chicken or egg issue.
It has been this way for a very long time so I don't see it changing.
Also Embarcadero has also adopted LLVM, while still having fast build times.
https://github.com/rochus-keller/Are-we-fast-yet/blob/main/F...
Bigger problem is that they teach the fundamentals with the abandonware that is turbo pascal instead of using something like the modern Free Pascal Compiler. Which means knowledge of what is possible outside curricula is limited.
Last year I almost was tasked with porting some Pascal codebase to a modern language. Problem was the project had a bus factor of 1, legacy overengineered and would only compile on windows with some proprietary compiler.
Maybe that company would use Claude/Codex or something like that, today, to port the project.
FreePascal can compile TP programs with no changes except for the MS-DOS graphics. A student can swap FP for TP and the code will keep running. But yes, I would switch to FP from the start if I were in charge.
I have not used Pascal since then but it was not the most terrible programming language of all times either. These days I would not know why I'd want to use it, compared to IMO better languages. Nonetheless I found it ok for teaching in school back then.
> The class instances have to be manually freed, otherwise you get memory leaks.
manual memory management in 2026?
Depends on compiler & runtime. If you pick Oxygene, for example, you get GC etc. https://www.remobjects.com/elements/oxygene/language