12 comments

  • jasperry 3 minutes ago
    Excited to see another project targeting the QBE back end, from what I can tell it's a great lightweight alternative to LLVM.
  • ausare 4 hours ago
    “ The Object Pascal ecosystem has two options: Embarcadero Delphi (proprietary, Windows-first) and Free Pascal…”

    This part isn’t true, for many years now we’ve also had Oxygene - https://www.remobjects.com/elements/oxygene/ (also proprietary)

    • pjmlp 4 hours ago
      Which has had a strange relationship with Delphi, for a while they were responsible for Delphi.NET.
  • samuell 6 hours ago
    It is a bit curious with the Mojo 1.0 beta coincidence, as Pascal was the other langauge with a highly readable and quite simple language combined with performant compiled code without GC.

    What it lacked was a modern compiler and stack. There is FreePascal for sure, and Lazarus is impressive, but it for sure has its baggage.

    • vintagedave 5 hours ago
      Yeah, Python and Pascal have always felt like they share similar vibes, despite being massively different languages. (Ease of writing, ease of reading, good inbuilts, etc.) Mojo feels like a clean take on similar goals... it's essentially a cleaner Python.
      • jibal 35 minutes ago
        Mojo is faster than Python but certainly not cleaner.
        • vintagedave 34 minutes ago
          Can you share more? I haven't actually used Mojo, I've just read about it, so I'm going on vibes (not AI ones :D) here. I'd love to hear your opinion.
  • magicalhippo 6 hours ago
    Looks interesting. As someone who's been using Pascal since Turbo Pascal 6, and use Delphi daily at work, I'm not sure I quite get the "COM-style interface GUID" objection. What exactly about it is complex, and how do you implement Supports() without it?
    • jasim 2 hours ago
      In my early programming days, working with Clipper, I used to look at Delphi from a distance with awe and a bit of jealousy. There also used to be PowerBuilder and Paradox, as competition to the xBase platforms.

      I'd love to hear more about how you're using Delphi and what it excels at, compared to current web and native software stacks.

      • magicalhippo 9 minutes ago
        To be fair, Delphi was left to rot during a crucial point in time, around when .Net was being created. It has struggled ever since due to that.

        And while the attention to backwards compatibility has been astounding, the move to Unicode-by-default strings was a non-issue for most unlike say Python, the language suffers and feels a bit tedious at times compared to say modern C#.

        That said, for creating Win32 applications, especially CRUD stuff, there's nothing quite like it in terms of the efficiency of getting deliverables to customers.

      • rob74 15 minutes ago
        Not the parent commenter, but what Delphi always excelled at was being able to quickly click together a GUI (with a WYSIWYG UI designer) and easily hook up the events (onClick etc.) to your code. That, and the blazing fast compilation speed which contributed to making quick iteration easy. Think VB6, just with a "serious" compiled language sitting behind it. Current versions of Delphi also support MacOS, iOS, Android and Linux (?), although I'm not sure how well that works, as I got off the Delphi train back in 2010.
    • vintagedave 5 hours ago
      Not the OP, but I can answer with an objection to COM-style GUIDs myself. Delphi's interfaces are heavily based around COM, and so you need GUIDs, ARC, etc.

      But interfaces as a concept don't require the COM backend. If you want your code to be cleanly separated, but don't want to split ownership/management models* (create/free vs ARC), and have no need for an interface and type identity to be managed outside your code and process (ie no COM), then interfaces that are not tied to ARC, and not tied to COM, give the clean code benefit without the baggage.

      [*] People work around this by implementing interfaces from a base class with no-op AddRef/Release methods. But this kinda shows the problem: why is that necessary?

      I work with Oxygene which is another modern Pascal -- quite a few new Pascals have popped up recently, I get the sense there's a real desire for something new! Our interfaces can be 'clean' and we support soft interfaces, too.

      • magicalhippo 5 hours ago
        But you don't need to specify a GUID for an interface in Delphi, and Blaise uses ARC for both objects and interfaces.
        • vintagedave 3 hours ago
          True! But here at least Blaise is consistent. It’s not mixing models.

          My real wish for Pascal interfaces is that they are pure. Some of that is not bringing in COM stuff (including recounting) because I think memory management is or should be different to interface-based clean coding. Another: In Delphi if you define a property in an interface, you have to bring in the getter and setter too. And that makes them implicitly public / visible (even if the implementing class declares them as private.) And they must be methods, there’s no way to say “read, but I don’t care how” (where Delphi can normally read fields too.) In other words, the semantic of “I want a property with read access” causes the interface contract to define the implementation, including making public the normally private / internal backing.

          Whereas what I really want is to declare “property Foo: Integer read;” and the interface requires that is satisfied, but not how. In other words, interfaces are pure - they don’t bring in extra baggage. You can do that in Oxygene.

          • magicalhippo 3 hours ago
            Being restricted to COM-style interfaces, so no true properties like you say, that I totally get.

            However my question was mostly with the objection against having a GUID, and how Supports() is solved without said GUID, especially since Delphi interfaces doesn't require a GUID in the first place.

            • vintagedave 3 hours ago
              I guess the language implementer needs to answer how they implement Supports :)

              But within one app, ie not crossing boundaries, perhaps their object model's vtable carries references to the interfaces, so casting of any sort to/from object-interface and interface-to-interface would work, including Supports?

  • anthk 31 minutes ago
    Can this compile these games?

    https://jxself.org/git/supernova.git

    https://jxself.org/git/beyond-the-titanic.git

    Ok, there's no way to bootstrap it without FPC... can the compiler compile itself?

  • HexDecOctBin 4 hours ago
    Does this support declaring variables anywhere (as opposed to only in the beginning of a function)? That was my primary complaint when using Lazarus.
    • pjmlp 4 hours ago
      Delphi has allowed this for quite some time.
      • vintagedave 3 hours ago
        Yes - OP, you can do this via inline vars and consts:

          begin
            var foo : string := 'hello';
            const c : integer = 5;
            var bar := GetBar(); // type inference even
            
            // and in blocks:
            for var i := low(x) to high(x) do...
          end;
      • HexDecOctBin 1 hour ago
        Yeah, but then I'll have to deal with Embarcadero.
  • tomekw 6 hours ago
    That’s so great! Thank you!

    I wish something like this existed for Ada :)

  • dvh 5 hours ago
    For me the only reason to use pascal is GUI apps but this doesn't have it.
    • graemep 19 minutes ago
      I have not used Pascal, but things that appeal to me (other than GUI apps) are that it seems simple to learn, and is readable, fast and compiles fast.

      What languages would be better in these ways?

  • superdisk 7 hours ago
    Looks cool and does aim to address some of the annoying warts in Pascal. Especially the memory model.
  • zx8080 2 hours ago
    Sorry, I don't trust a compiler project that's done in 3 weeks (I've checked the repo commits history). Downvote this if you want.
  • lpcvoid 4 hours ago
    [dead]
  • peter_d_sherman 8 hours ago
    [dead]