Things That Turbo Pascal Is Smaller Than (2011)

(prog21.dadgum.com)

131 points | by ksec 6 hours ago ago

60 comments

  • hawkice 5 hours ago ago

    Given development speed is way up, I'd be interested to see what a from-basic-principles simple and efficient OS and programming system might look like. Or people trying radically different versions of efficiency and simplicity, like an OS that uses an existing battle-tested sandboxed execution environment like v8 for userspace safety/isolation.

    Fundamentally, many inefficiencies were justified for developer productivity, and I'm not sure that makes sense anymore, and the cost of larger projects with clear abstraction boundaries has plummetted.

    • Isamu 4 hours ago ago

      >Fundamentally, many inefficiencies were justified for developer productivity, and I'm not sure that makes sense anymore

      Having lived through this period, I would disagree, quite the opposite we tended to develop in C and assembly specifically for runtime efficiency because we had to.

      For developer productivity you could opt for Lisp or SmallTalk or some such, which ran much slower until high quality compilers for these became available, and even then your target machine might only have a C compiler.

      • SoftTalker 3 hours ago ago

        I read GP's comment differently, that we ended up where we are today (bloated languages, IDEs and runtimes) due to chasing developer productivity at all costs.

        Now, developer productivity is becoming less important as developers are factored out entirely.

        • hawkice 2 hours ago ago

          This was my intended meaning -- the clearest advocacy of this was from DHH about Ruby on Rails, although he's changed his mind about big questions lately and suspect he no longer endorses that set of trade-offs (I don't either, _sort of_ -- I think developer productivity means having simple ways to enable large-scale testing and oversight while minimizing context switching costs, although I think we are all figuring out what that means in practice).

      • za_creature 4 hours ago ago

        Specifically, turbo pascal was entirely written in assembly according to wikipedia (I recalled only 50% but maybe that was some other pascal dialect)

    • pocketarc 4 hours ago ago

      This is the thing - when the cost of iterating and grinding compiler warnings drops to virtually 0, what new paradigms might we invent to exploit that? Rust gives us an inkling of an idea of what might be possible, but that still predates LLMs and thus still makes concession for human ergonomics. What are structures, guardrails, and patterns, that our OSs, frameworks, and toolchains can put in place, which would result in whole classes of problems going away completely, at the expense of massively increased (but mechanical, and easily automatable with a prompt) developer effort?

      The next few years are going to be fun.

      • tomaskafka 2 hours ago ago

        This would be fine grained type systems where invalid states are inexpressible.

        • StilesCrisis an hour ago ago

          Both humans and LLMs struggle with slow iteration times.

    • hedgehog an hour ago ago

      v8 is pretty complicated, and anything that depends on LLVM is going to be huge, so I think I would start smaller. You could try building around something like NuttX or an L4 + tcc or cproc and see what it takes to get to self-hosting as well as ability to do some job you care about. To me the bigger question is that last bit, you can shrink the platform code quite a lot relative to a typical Linux but what's the situation where that's a good trade vs say cross-compiling from a full C++ or Rust toolchain?

    • za_creature 4 hours ago ago

      I think you have that backwards.

      It's the lack of clear abstraction boundaries that causes decreased developer productivity.

      A code generator will not save you from Conway's law.

  • jbellis 4 hours ago ago

    Anders Heljsberg GOAT. Turbo Pascal, Delphi, C#, TypeScript, just a phenomenal career marked with better taste than any other language designer I can think of, certainly any designer whose work is so mainstream.

  • jll29 2 hours ago ago

    While some comparisons may look silly, the fact that the touch command's binary should exceed Turbo Pascal is insane: the command basically creates an empty file or updates the file change date if the file already exists, not more.

    There's no reason (other than laziness) why that should take more than 2k.

    On the other hand, a lot of boilerplace code is repeated in each and every command. When I first learned as a kid about UNIX commands being ordinary programs, I was intrigued (there is nothing "special" about them, you can also write your own!) but also shocked about the overhead compared to an architecture in which e.g. the shell contained all (at least core) commands compiled into a single binary, which could share all the error handing, startup code, command line parsing code and so on.

    • zahlman 2 hours ago ago

      > the command basically creates an empty file or updates the file change date if the file already exists, not more.

      GNU coreutils touch does a lot more than that. My local copy is about 95k; it allows for choosing from multiple different timestamps to update; suppressing the (default) creation of an empty file if it doesn't already exist; operating on symlinks directly rather than following them (if the system supports it); specifying a custom timestamp rather than "now" (including by parsing a date string), and of course outputting a help message and a version.

      • regularfry an hour ago ago

        I was going to suggest that even that logic wouldn't account for a binary size three times the RAM of my first machine, but from the man page:

        > DATE STRING

        > The --date=STRING is a mostly free format human readable date string such as "Sun, 29 Feb 2004 16:21:42 -0800" or "2004-02-29 16:21:42" or even "next Thursday". A date string may contain items indicating calendar date, time of day, time zone, day of week, relative time, relative date, and numbers. An empty string indicates the beginning of the day. The date string format is more complex than is easily documented here but is fully described in the info documentation.

        There it is.

    • teiferer 2 hours ago ago

      Agree with everything you wrote, but if you go look for bloat on your storage device, the last thing that will be of any significance is that overhead.

  • sroerick 3 hours ago ago

    Why did Pascal basically die completely? It seems like a hugely influential language and was very loved, but there are plenty of other languages which still seem to have a lot of legacy code. Where is Pascal?

    • regularfry an hour ago ago

      In a way it didn't, the Lazarus project is the current most well-known incarnation. But that itself tells a story: it's for desktop applications, mainly. It never really had a "here's how you do a web app" story around it. There was a period 1998-2002 when Delphi was hot (and it genuinely was very good) but all the cool kids saw PHP3 and Flash and hopped aboard, and at that point, in retrospect, you can see the start of the decline of desktop applications. By the time Rails landed in (I think?) 2008 "do everything on the web" was what a lot of people were already talking about, even if the truth of that didn't really land until much later.

      Really it could have been go-lang before go-lang and I'm not sure why it wasn't other than that it wouldn't have been controllable by the folks at Google.

    • pjmlp an hour ago ago

      It didn't, despite all its management failures, several companies are still buying into Delphi (Object Pascal evolved from Turbo Pascal/Apple's Object Pascal), and there is at least an yearly conference in Germany.

      https://entwickler-konferenz.de/en

      Then there is still FreePascal, Mikroe Pascal and RemObjects Pascal to chose from.

      • Rochus 26 minutes ago ago

        > Then there is still FreePascal, Mikroe Pascal and RemObjects Pascal to chose from.

        And now also Micron, which re-added Pascal features to Oberon (https://github.com/rochus-keller/micron/).

        • pjmlp 23 minutes ago ago

          Ah, yeah, have to play with it sometime. TODO list is rather long. :)

          • Rochus 20 minutes ago ago

            A project like this never gets finished.

            • pjmlp 10 minutes ago ago

              Sorry for the misunderstanding, I meant my own TODO list of stuff to check out.

              The project is rather cool.

    • SoftTalker 3 hours ago ago

      Lua, Go, and Nim have some Pascal roots, according to https://en.wikipedia.org/wiki/Generational_list_of_programmi...

      Though Borland had some commercial success, I remember Pascal mainly as a teaching language.

      • SoftTalker 32 minutes ago ago

        Can't believe I forgot PL/SQL, as I used that heavily for years.

        Ada also was widely used in aerospace/military applications, though not sure it's still used for anything new today.

      • jll29 2 hours ago ago

        Julia is also heavily influenced by Pascal syntax.

      • cwnyth 3 hours ago ago

        Odin borrows from Pascal as well.

    • amelius 2 hours ago ago

      Because it didn't have nul-terminated strings.

    • coliveira 3 hours ago ago

      The main problem with Pascal was not having a standard at a time when having a standard was important for adoption. There were several successful implementations like Borland's, and the version used in the Macintosh, but being closed products they never talked to each other. It's similar to the situation of Basic: lots of code was created in Basic but none was compatible with a standard and was essentially lost.

      • pjmlp an hour ago ago

        It certainly had a standard, two actually, however no one cared because Turbo Pascal was more relevant, and Modula-2 was designed to fix Pascal's shortcomings, which also has a ISO standard.

        So it wasn't for lack of standard per se.

      • twoodfin 2 hours ago ago

        Not just having a standard but being able to collectively evolve a standard.

        In the absence of that, Pascal’s creators and commercializers invented follow-on languages, including the most successful thread via Hejlsberg as we’re discussing here: Object Pascal -> Delphi -> C#/.NET—with a brief detour to J++, which I don’t know enough about to understand if it belongs in this sequence.

        • pjmlp an hour ago ago

          Outside Borland and Apple, people tend to forget that already in 1976, Niklaus Wirth came up with Modula-2, exactly to fix all the shortcomings from a language originally designed for teaching, with one properly designed for systems programing from the start.

          As for your sequence, from someone that was around back then, .NET and C# only exist as you know it thanks to Sun's lawsuit regarding Java language and runtime extensions introduced in J++.

          Then an internal research language originally named Cool, became C#, the language extensions in J++ were made into C# features (events, J/Direct, COM interop), Windows Foundation Classes became Windows Forms, and J# was released in .NET 1.0 as transiton technology.

          Had it not been for the lawsuit, Ext-VOS (.NET codename) would have been released with J++ instead.

          https://web.archive.org/web/20190111203733/https://blogs.msd...

          Follow the linked paper for Ext-VOS, aka COM+ Runtime, aka .NET.

          Microsoft would revisit this COM+ Runtime a decade later with WinRT,

          https://arstechnica.com/features/2012/10/windows-8-and-winrt...

      • sehugg 3 hours ago ago

        Carmack developing DOOM on a NeXT and porting it to PC was a very good advertisement for C.

        • pjmlp an hour ago ago

          The tooling was done in Objective-C.

    • anthk 3 hours ago ago

      Free Pascal/Lazarus it's rocking nice tools such as Peazip and other stuff like Carte Du Ciel and some RAD tools in the enterprise. On the niche geeky world, there's T3X at https://t3x.org which is semi-Pascal like.

    • MichaelRo an hour ago ago

      Went the way of the dinosaurs. I learned about pointers and memory on Hi-Soft Pascal on a ZX Spectrum from this book: https://www.okazii.ro/limbajul-pascal-corina-corici-dorin-ma...

      Here's a page from the book I was reading in 1993: https://imgur.com/a/7UWdGgS

      For reference, ZX-Spectrum has 48Kb of RAM out of which 8Kb is video memory, so unusable.

      Then you have to load the Pascal compiler into the remaining 40k of RAM. Allocate some RAM for stack and environment variables for the editor where you write your program, plus space for the actual program. Then compile your program into the same 40k of space. And run it, using heap and stack memory from which memory space? You guessed right, same 40k.

      To recap, on 40k of RAM you had back then:

      - The Pascal compiler

      - The Pascal source code in text form

      - The Pascal executable form in machine code

      - The Pascal data/memory. Of which, recently in a "tech demo" of automated tests, one colleague said "unfortunately we only have a very limited amount of RAM to be able to do basically anything [that's why the product is a mess with no tests]. Only 32Gb per [virtual] machine".

      One of my first programs was a Tetris clone, because ZX-Spectrum BASIC was slow as molasses. All on top of only having tape for storage so if I fucked up a pointer (I don't think Pascal had the concept of access violation back then but I sure discovered it on my own skin), it would take 5 minutes to load the Pascal compiler + some backup copy of my Tetris game, hopefully not from a month ago and hopefully I remember what I changed. Lots to discover and have "fun" with.

      About a year later I did find a compiler for BASIC and it turned the unplayable BASIC code for Tetris I wrote in the 9th grade into a totally playable Tetris game, without the need to learn another language and paradigm (pointers!) but the damage was done. Ignoring a year of databases, in 12th grade of high school computer science class (elite class, found there basically all the Math olympics I was competing with in gymnasium), I got introduced to C and from then on, here I am, 30 years later, doing C++ in finance for an S&P 500 company.

    • virgulino 2 hours ago ago

      Kaaaaaaaaaaaahhhnnn!!!

  • ttoinou 2 hours ago ago

    I’m tired of those senseless comparisons

    Bytes have history, meaning, context of creation, different utilities and different cost associated with creation/transfer/storage/manipulation

    We could also use those comparisons to praise how complicated our current world has become and how good we are at managing such complexity

  • ilaksh 4 hours ago ago

    This is only slightly related but I just made a Turbo Vision UI for Claude Code sessions.

    https://github.com/runvnc/tvclaude

    • badsectoracula 37 minutes ago ago

      Amusingly i also used Turbo Vision to make some agentic harness[0] :-P (though mine is meant to talk with llama-server via its OpenAI compatible endpoint since i'm using local models - the one in the shot is Gemma 4 E4B which i'm using for testing).

      That said i never finished that and ended up making another one (using tvchat as a base since it had largely working communication and session management) that acts as a server/daemon inside the container is meant to run in the background and provides a web-based UI instead.

      http://runtimeterror.com/pages/iv/images/25b1d4b43bb3467e392...

    • andsoitis 4 hours ago ago

      cool. can you drag & drop in files (e.g. screenshots, PDFs, video recordings, text files, etc.) for context when you work on features or bug fixes? Cursor is great at workflows like that.

      • ilaksh 3 hours ago ago

        no, but good idea, I am having Claude add that. EDIT: done. if your terminal doesn't support drag-and-drop (kitty and some others do) there is also a new File | Attach file(s) menu item

  • weinzierl 30 minutes ago ago

    "And the whole thing was lightning fast, orders of magnitude faster at building projects than Microsoft's compilers."

    Sure, I mean it had a turbo whereas Microsoft only ever had quick things. A shame no one thought of swift back then.

  • tetha 2 hours ago ago

    It's always an interesting thought that I had meetings about the log aggregation dropping stack traces that would take ~3 3.5" floppies to store. Each.

    Zabbix also confuses operators at this point. I recently had to increase a cache. I chose to go from a solid 4MB to a luxurious 256MB.

    I know high-performance Java, so just a little jab there, but you don't size JVM parameters like that, except maybe code caches. And before Rust comes in, we also have a Rust application running without good resource control and it wouldn't like those resource constraints.

    There is truth to this article.

  • throwaway2037 2 hours ago ago

        > zlib.h in the Mac OS X Lion SDK (80,504 bytes).
    
    What a stupid comparison. zlib.h is probably 99% comments.
    • gmueckl 2 hours ago ago

      Is it such a stupid comparison? It's an absolutely trivial amount of data now, but back in the 80s, a few files of that size would fill out a floppy disk. It's also a source file - the input to a compiler.

  • bell-cot 4 hours ago ago

    Well, yeah. Back in the mid-80's, software needed to be usable on a computer with a single 360KB floppy drive. (No HD, no SSD, no USB, no network, no ...) And even a big budget for RAM - which cost many orders of magnitude more than today - would really not get you around Bill Gates' 640KB DOS memory limit.

    Comparing to current-day stuff is kinda like comparing battery-powered bathtub toys to jetskis.

    • probably_wrong 4 hours ago ago

      Those "bathtub toys" built the entire modern infrastructure, parts of which are still chugging along. If anything, I'd put the onus on software developers - like John Carmack said in 2005, "there is something deeply wrong when text editing on a 3.6 ghz processor is anything but instantaneous".

      Software in the 80s showed what's possible when you really care about doing it. Software in the last 15 years feels like an exercise on what happens when you don't.

      • throwaway2037 2 hours ago ago

        Read the original John Carmack post here: https://web.archive.org/web/20050330004221/http://www.armadi...

      • exe34 an hour ago ago

        I remember Windows 98, where it crashed every few hours and took everything with it, but while it worked, it never missed a keystroke or mouse press. I could type ahead and click where I knew the button would appear in 10 seconds and it still wouldn't lose anything. Nowadays you just finish typing out a thought and then realise half of it never turned up, because something else claimed the focus or whatever.

    • BobBagwill 4 hours ago ago

      More like comparing a racing kayak to a leaky container ship burning sulfurous bunker fuel carrying a load of short-lived consumer junk. :-)

      • MonkeyClub 4 hours ago ago

        Yet at the same time, one is a pastime for an affluent lifestyle while the other is driving the global economy. Interestingly, or ironically, the former was probably put on the shelves by means of the latter.

        If there is any positive progress to be made, the rethinking necessary must go much, much deeper than the superficial flesh of the problem, but there it’s bound to hit upon the sinews and bones of vested interests.

        In all, as I’m growing older and see the world trudge along the same lines it did centuries ago, I’m more and more pessimistic about the possibility of people agreeing that the sacrifices necessary will be made.

        Short-term stakeholder interests seem to trump any notions of longer-term greater good.

        • andersonpico 2 hours ago ago

          > one is a pastime for an affluent lifestyle while the other is driving the global economy

          which one is which?

  • oldjohnnylane an hour ago ago

    The wall of defensive, hostile replies to this simple post is expected. Today’s programmers need to feel like they are an elite class above the rabble and programming is their identity. When someone shows them an example of what talented programming really looks like, they have to pile on and dismiss it from a thousand cuts. The guy who wrote Pascal understood the system top to bottom, and understood computer science. There are maybe a few thousand programmers alive today with that kind of skill, and it hurts the egos of the average HN typescript scrum jockey to see something they just don’t comprehend so they lash out at it.

  • haaz 5 hours ago ago

    This article basically says that a text based application (turbo pascal) is smaller than images and PDFs. Obviously.

    • MattCruikshank 5 hours ago ago

      It's a full compiler and debugger. It's not at all obvious that it could be smaller than an image.

    • mikestew 4 hours ago ago

      “Obviously”. Look, if you don’t really know what a development environment is, that’s okay. But a dismissive comment such as this makes it obvious to the rest of us that you don’t know, when I’m confident that isn’t your goal.

      • noir_lord 4 hours ago ago

        If you want to be entertained have a look at their comment history.

        Their comment was entirely on brand.