[HN Gopher] Modern Pascal is still in the race (2022) ___________________________________________________________________ Modern Pascal is still in the race (2022) Author : open-source-ux Score : 45 points Date : 2023-10-11 14:02 UTC (1 hours ago) (HTM) web link (blog.synopse.info) (TXT) w3m dump (blog.synopse.info) | jchw wrote: | Hmm meh. I have a soft spot for Delphi/Object Pascal but I think | the case here is not great. What it looks like at a glance is | they wrote a better Pascal program than the Go one it was | competing against, rather than just idiomatically port it. A fine | approach, but it doesn't tell us _that_ much. Specifically, it | doesn 't tell us very much about programming languages. | | Go has plenty of weaknesses versus Pascal, but two commonalities | of the languages are lightning fast compile times and a pretty | good experience for modelling data structures. Pascal is | undoubtedly lower level and does not guarantee memory safety, | whereas Go does but its GC is often less efficient and more | memory-heavy than manual allocation. | | Blow for blow, though, I'd say the largest weak point for Pascal | is a somewhat archaic syntax and for Go, honestly, the | concurrency model. (Channels are nice, until they are not. I feel | as though it's easier, though not necessarily easy, to write | correct programs using mutexes than Go channels in many cases. | This is weird, because nothing has changed about the old shared | memory with locks model since it was the source of so many | problems. Yet, programmers, computers and toolchains have changed | a lot. Rust with locks is a great example.) | | But the biggest problem for Pascal is the lack of a strong killer | app. Back in the day, libraries like VCL made Delphi amazingly | productive for desktop apps. But VCL/LCL doesn't really hold up | as well these days, where desktop apps are less important and the | important features of GUIs has shifted a lot. That leaves Delphi | and Object Pascal as a sort-of also-ran: It's not that Go is | especially good, in fact I'd argue its claim to fame and namesake | (the concurrency model) just wound up being kind of ... bad. But, | now that it's here and popular, there's little reason for e.g. Go | developers to switch to Object Pascal, a less supported language | with less of a job market, less library support, etc. | | And that really is a shame, because it isn't really a reflection | of Object Pascal being unfit for modern software development. | rob74 wrote: | Delphi (and probably also Free Pascal?) is not wholly memory | safe, but at least it has bounds checking for arrays and a sane | string type, which is more than you get with C... | | I'm an ex-Delphi developer myself, and actually Go and Pascal | are more closely related than you might think at first glance: | Go code looks mostly like a C-family language, but the | declaration syntax ("a int" instead of "int a") and the | "package" concept which helps achieve fast compilation times | are borrowed from Pascal. And both have a ":=" operator, | although in Go it declares and assigns variable(s) with type | inference, while in Pascal it's any assignment. | jerf wrote: | "Channels are nice, until they are not. I feel as though it's | easier, though not necessarily easy, to write correct programs | using mutexes than Go channels in many cases." | | The rule for mutexes is, never take more than one. As long as | you only ever take one, life is pretty good. | | When all you had was mutexes as your primitive, though, that | became a problem. One is not enough. You can't build a big | program on mutexes, and taking only one at a time. | | But as you add other concurrency primitives to take the load | off of the lowly mutex, and as you do, the mutex returns to | viability. I use a lot of mutexes in my Go code, and I can, | precisely because when I have a case where I need to select | from three channels in some complicated multi-way, multi- | goroutine choice, I _have_ the channels for that case. The | other concurrency mechanisms take the hard cases, leaving the | easy cases for mutexes to be fine for once again. | | The story of software engineering in the 1990s was a story of | overreactions and misdiagnoses. This was one of them. Mutexes | weren't the problem; misuse of them was. Using them as the only | primitive was. You really, really don't want to take more than | one at a time. That goes so poorly that I believe it nearly | explains the entire fear of multithreading picked up from that | era. (The remainder comes from trying to multithread in a | memory-unsafe language, which is also a pretty big mistake.) | Multithreading isn't trivial, but it isn't _that_ hard... but | there are some mistakes that fundamentally will destroy your | sanity and trying to build a program around multiple mutexes | being taken is one of them. | astrodust wrote: | Delphi was really a "Concorde moment" in that it was actually | _rapid_ , both in terms of development speed, and performance, | which was somehow forgotten as the web emerged. | | Forgotten to the point that people thought Visual Basic was a | good idea. | misja111 wrote: | Delphi was great but a major deal breaker was that is was not | free to use. | davidw wrote: | If you have to loudly proclaim you're still important... | dbsmith83 wrote: | I used Delphi in the 90's and early 00's, and really loved how | simple it was to create desktop applications. I tried to get back | into Pascal via Lazarus a few years ago, but was just very turned | off by Pascal itself. The conventions just differ so much from | other more popular languages that I use for work now, and there | just isn't the same level of stack overflow questions/answers to | make it easy to pick up. I guess with ChatGPT, it should be a lot | easier to pick up now, so maybe I should give it another go. | Svip wrote: | This article reads more like an ad for mORMot 2 than Pascal. I've | been out of the Pascal game for a few years, so I had to look up | mORMot 2.[0] Apparently Synopse are the maintainers of it. | | The article basically compare their CSV/JSON serialising library | to Go's standard CSV/JSON libraries. Looking at the Go code, it's | pretty clear why it has memory issues, it reads _all_ the lines | into a single object (well, `[][]string`) immediately, rather | than reading line for line (which takes advantage of the stream). | | I am not sure how this is remarkable and impressive for Pascal. | They talk about how you don't need to use the | `try..finally..Free` routine all the time, but that's only if the | object in question is an interface. Interfaces are somehow | handled by a reference counter in Object Pascal, so you need to | know how to operate on objects vs interfaces, because they act | very different. Pascal is full of these quirks. | | [0] https://github.com/synopse/mORMot2 | soliton4 wrote: | pascal was the 2nd language i learned after basic and it was the | best time of my learning life. the fact that you could add inline | assembler code and the early attempts of object oriented | programming were amazing. it was turbo pascal 6.0 btw. | wiz21c wrote: | Inline assembler was a killer feature: you could optimize bits | of your code without having to understand how an assembler | works and without having to deal with a linker as Pascal | compiler did everything itself. | | Great time indeed ! | anta40 wrote: | >> And... Pascal is still in the race for sure! | | And what about.. umm... Modula 2/3 or Oberon? They don't gain as | much industry attractions as Pascal does, eh? | runlaszlorun wrote: | I def have a soft spot for Pascal. And I think Niklaus Wirth | deserves more recognition in broader circles for his foundational | work with pcode, compilers, Oberon, etc. I learned Pascal like | many of us growing up in the early PC era and never could look at | BASIC the same way again (or respect Gates for his love of it, | lol). I think having such a highly structured language at a young | age did wonders. | | But these days folks are mostly used to the C style syntax. And | I'm not even arguing that it is a better language than C or | others. But the whole industry has gone overall into believing | that anything newly 'invented' is good and anything that's been | around a while is passe. Ironically, at the same time as the core | technologies we use are based on decades old tech like Unix, | relational databases, TCP/IP, etc. And many others like Lisp and | Smalltalk fell by the wayside at least partly due to performance | issues that were made irrelevant by Moore's law long ago. | | Oh humans... :) | | Btw, Logo is another one that's under appreciated. Seymour Papert | was brilliant in making programming more visual and intuitive for | kids. And I didn't actually know until recently it's actually a | Lisp based language with a lot of power. Who knew? | | In some parallel universe, I'd love to see folks like those, | along with many others from that era, as the ones we heap | recognition on instead of our worship of current tech | billionaires. Those guys generally understood the hardware, | software, and core theory. Given the mess that is computing and | the internet, it's a shame that we'll be losing them over the | next few decades. | cdelsolar wrote: | Nice mormot. | zwnow wrote: | Having to write C/AL to make a living, which is based on Pascal, | I can safely say it shouldnt be in the race anymore... | elteto wrote: | Interesting take. Pascal is definitely a niche language but | most of the community around FPC and Lazarus seems very | positive and welcoming. | | Would you mind expanding on why you feel this way? What Pascal | do you use? Do you use Delphi or FPC/Lazarus? What don't you | like about the language (or your particular vendor | implementation)? | zwnow wrote: | I have to say I wrote this as more of a joke as I do have no | actual experience with Pascal. Looking at the syntax I just | assumed it to be extremely similar to the language I have to | work with on a daily basis. And with that, just as limited. | | C/AL is a product of Microsoft and is only used in their ERP | Software Navision. It's a horrible experience to work with as | you don't have a lot of modern languages features just for | the sake of readability. | | At some point in the article the author wrote that Rust code | isn't readable for example. I'd argue code shouldn't have to | be readable by non-programmers. And especially not if the | language sacrifices features like creating objects or dynamic | arrays... | | But as I wrote, I don't have actual experience with Pascal so | maybe it's actually better. | bitwize wrote: | Free Pascal is a lot more robust and featureful than | whatever God-awful ERP language you have to work in. It's a | spiritual descendant of Turbo Pascal and Delphi, which were | used to develop diverse applications from line-of-business | to games for decades. Dynamic memory allocation and objects | are built-in. It is definitely NOT the Pascal of | Kernighan's "Why Pascal Is Not My Favorite Programming | Language". | falker wrote: | PS4 emulator/compat layer in FP: https://github.com/red- | prig/fpPS4 | b800h wrote: | I hope this isn't hosted on Pascal. Got a 502. | doublerabbit wrote: | Probably got a 502 for it not being hosted on Pascal. | | But iirc, HN is Lisp? ___________________________________________________________________ (page generated 2023-10-11 16:00 UTC)