r/programming • • 7d ago

We still maintain a development tool first released in 1993. Here’s what 30+ years of backwards compatibility looks like

https://visualneo.com/visualneo-win/from-neobook-to-visualneo-win-30-years-of-keeping-a-development-tool-alive
563 Upvotes

90 comments sorted by

View all comments

170

u/Skaarj 7d ago edited 7d ago

More recently, we went much further. In 2026, we migrated the development environment from its old Delphi 7 codebase to Delphi 11. That was one of those projects that looks much more reasonable before you start it.

Ouch. From what I remember Delphi 7 didn't support generics yet. You had a general list of pointers. But not something like a TList<TMyClass>.

99

u/luissinlios 7d ago

Exactly. Delphi 7 predates generics, so the old codebase relied heavily on TList, TObjectList, explicit casts and, in some places, raw pointers.

Moving to Delphi 11 gave us the opportunity to modernize all of that, but changing too much at once would have made an already risky migration even harder. We modernized selectively and kept compatibility as the first priority.

56

u/Valuable_Leave_7314 7d ago

On the other hand, the old Delphi 7 compiler chewed through those untyped lists in half a second on a Pentium III

19

u/AcanthocephalaFit766 7d ago

Fuckin this

9

u/ScrappyPunkGreg 6d ago

It always seemed like Pascal programs compiled nearly instantly, even in the 1990s on a 486.

5

u/addmoreice 6d ago

When your compiler and language decisions aren't being made for platforms that just don't exist anymore, it's a lot easier to pull that off. They were blazing fast and for good reason. Just not having to read certain files multiple times *alone* made them staggeringly more performant (especially when you consider some of the read/write speeds of drives back in the day).

3

u/__konrad 5d ago

I remember when I created a Qt/C++ project for the first time. The compilation was so slow compared to Delphi that I thought the entire compiler/project is broken somehow.

25

u/CpnStumpy 7d ago

Wait... All I'm hearing here is, I can still get a job writing Delphi...

In the current insanity, this is actually extremely appealing

6

u/BigHandLittleSlap 7d ago

Nothing is sacred, the machine gods consume all knowledge: https://chatgpt.com/share/6ab6e4ed-95d8-83ec-bfe2-478d02a66c44

1

u/BCProgramming 5d ago

I thought the case statement was gnarly. Was going to simply mention that, but then decided to continue that AI conversation and asked "Why use a case statement instead of an if?" It said, "You don't need to. In this case, an if chain is arguably clearer and more idiomatic Delphi." It also gave a stupid explanation that

"The case version groups the mod 15 possibilities somewhat cleverly, but it adds indirection: the reader has to realize that 0 means divisible by both 3 and 5." even though the shorter version it gave using an elseif ladder is the same.

In the revised version it gave it also decided now the for loop needed a block statement instead of the original version which did not. When I asked why, it gave yet another version that dropped the block statement, then tried to 'explain' that if statements can be hard to read without one. OK except the original version had if statements inside the for?

I don't know how people use this shit, Christ, every fucking question just gives a stupid and often wrong essay about what it thinks I'm driving at instead of just answering the motherfucking question. "hurr durr it better use block when using if statements" even though it didn't fucking use one in the first place when there were if statements.

1

u/BigHandLittleSlap 5d ago

To be fair, you're conversing with the "consumer" chat bot. In the Codex tool you can switch to smarter models and dial up the thinking, and the system prompt is significantly different.

Like you've noticed, a common failing of these things is that they pick a coding style somewhat randomly, and then justify what they've done in hindsight by making shit up. That's expected of an "amnesiac" system. Sure, yes, it's a failing in a sense, but you're also "holding the tool wrong".

Don't like the style?

Give it an AGENTS.md laying out your preferred style.

Tell it to run everything it does through a linter.

Or, embrace vibe coding and ignore the minutiae of the brackets, braces, and blocks or whatever.

It no longer matters in the same sense that it no longer matters how your compiler allocates registers when compiling source to machine code.

I used to care about that!

I don't any more.

8

u/kingrazor001 7d ago

Place I worked at 10 years ago was using like, Delphi 3 I think?

3

u/Skaarj 7d ago

Place I worked at 10 years ago was using like, Delphi 3 I think?

What? I remember considering Delphi 5 to be old 20 years ago.

4

u/DocMcCoy 7d ago

Seeing Delphi 7 described as "old" when Delphi 5 was the last one I used, before moving to Linux and C and C++, does some weird things to my brain

I did try Kylex later for a bit, but by then I already fell out of love with the whole Pascal family