[HN Gopher] A guided intro to the Free Pascal language
       ___________________________________________________________________
        
       A guided intro to the Free Pascal language
        
       Author : sysrpl
       Score  : 147 points
       Date   : 2022-12-28 11:53 UTC (11 hours ago)
        
 (HTM) web link (www.getlazarus.org)
 (TXT) w3m dump (www.getlazarus.org)
        
       | grumblepeet wrote:
       | Coincidentally i tried to install Lazarus yesterday and hit issue
       | after issue, two being some missing dependencies, which were
       | items that I found in the documentation to be downloads as well.
       | It then complained about lack of gdb, which I do understand (on
       | an older Macos here) but it did occur to me, if you know it is
       | needed, why not include it in the download?
       | 
       | Cut a long story short, Ive installed Dr Racket today and working
       | through the tutorials.
        
       | terminalcommand wrote:
       | I think the popularity of pascal has something to with Modula-2
       | (the successor of Pascal invented by Wirth) having been recently
       | included as an officially supported language in gcc alongside
       | Rust. I tried lazarus again, I was amazed. It is as simple as
       | using VB6 for creating quick GUIs that run everywhere.
       | Turbopascal is blazingly fast, produces efficient and small
       | binaries.
       | 
       | Pascal also has libraries for nearly everything, check awesome
       | pascal for a list of actively maintained third party libraries:
       | https://github.com/Fr0sT-Brutal/awesome-pascal
       | 
       | I feel like pascal is a hidden gem.
        
       | spapas82 wrote:
       | I still remember that the thesis of a fellow student back in the
       | university 20 years ago was to create an educational version of
       | Pascal called... "Paschool".
       | 
       | I laugh out loud when I remember it, definitely the programming
       | language with the most funny/catchy name ever!
        
       | MikusR wrote:
       | There is also this https://castle-engine.io/modern_pascal
        
       | themodelplumber wrote:
       | Some recent personal projects with laz and fp got me pretty
       | interested in it.
       | 
       | I have nothing impressive to show for my work except for a lot of
       | retro-pride when I type in e.g. the snippet which triggers the
       | Pascal program which tells me how old I am. With some bells and
       | maybe a couple whistles.
       | 
       | I was surprised to learn that there was Pascal for the C64, which
       | I thought was more of a "BASIC or bare metal" system.
       | 
       | I too was a victim of the great AP Pascal force-feed in my HS
       | comp. sci. class...but fortunately at the same time there were
       | demoscene programmers around the world blowing my mind with
       | Pascal programs and it seemed like there were new projects to
       | appreciate online (BBS) every day after school.
       | 
       | To whit: Someday I would like to write a Pascal raytracer that
       | tells me how old I am, with emoji output, since my other ride is
       | a text editor. (And if you don't like my driving, get off the
       | sidewalk!)
        
         | bigpeopleareold wrote:
         | Heh - I didn't do great in AP with Pascal either. I remember
         | though trying to make it worth buying CodeWarrior for Mac OS
         | (oh how the Internet changed everything ... :D ), which had a
         | Pascal compiler, but I got overwhelmed looking at the Mac
         | Toolbox docs and couldn't make much sense of it. (I know there
         | was also MPW, but I didn't know how to get my hands on it.) The
         | school computers ran Turbo Pascal on MS-DOS. I vaguely remember
         | having to write programs on paper without a lot of access to
         | those computers.
         | 
         | But, I tried FP last year. I wrote a program to mimic a small
         | tool in the company I worked for. It was fun actually. At the
         | time, I sort of wanted a lot to write stuff in Emacs. There is
         | an LSP server for FP but it's not really complete.
        
         | xet7 wrote:
         | For C64 and other retro platforms with Pascal, there is TRSE:
         | 
         | https://lemonspawn.com/turbo-rascal-syntax-error-expected-bu...
         | 
         | If coding with C, like text adventure games, then for example:
         | 
         | https://github.com/xet7/darkesthour
        
       | markwong wrote:
       | It is a beautiful language.
        
         | chasil wrote:
         | This is not a universal opinion.
         | 
         | https://www.cs.virginia.edu/~evans/cs655/readings/bwk-on-pas...
        
           | renewedrebecca wrote:
           | That is an opinion that is completely irrelevant to modern
           | pascal. Let's just judge C11 on what K&R looked like while
           | we're at it.
        
       | SomeHacker44 wrote:
       | Back when I learned computing, I had an old Apple ][+ with a Z80
       | card. There were only a few choices to program it. Apple and Z80
       | BASIC, Apple Logo, 6502 assembly (I did not have access to a Z80
       | assembler) and UCSD Pascal.
       | 
       | Pascal was awesome. So much better than the others. It really
       | launched my interest in coding once it clicked.
       | 
       | I remember discovering that the early Apple game Wizardry was
       | written in it one day when I was hacking around with it.
        
       | boobybrown25 wrote:
       | Lazarus has, imo, the best wysiwyg GUI editor you can get. Enjoy
       | it a lot more than fighting with qt.
        
       | speed_spread wrote:
       | I used to be a hard Delphi/Pascal guy and still think it is much
       | better than C for it's strong typing and overall "squareness".
       | But I'd have a hard time going back to it nowadays. The 'var'
       | section, magic "Result" variable and begin/end pairs are just
       | from another age.
       | 
       | Programming languages have advanced _a lot_ since Pascal was
       | created. It's core principles remain valid (safety by default,
       | readability, flexibility). But the feedback loop between language
       | design and actual usage is much tighter thanks to the Internet
       | and open source.
       | 
       | Some things I still miss from my Delphi days are the language-
       | level enumsets, near-instant compilation and RAD tooling (GUI
       | builder).
        
         | 5e92cb50239222b wrote:
         | I pretty much started programming in Delphi (which was very
         | popular in this part of the world, and still is to some
         | extent).
         | 
         | After using VCL for a year or two, I started branching to
         | other, much more popular programming environments, and was
         | shocked about how bad they were for GUI development. Why would
         | anyone put themselves through the pain of writing interfaces
         | manually using programming languages not designed for it (like
         | C) when you could design everything in a convenient GUI
         | builder?
         | 
         | It's sad they decided to focus on the "enterprise" market and
         | buried themselves in the long term. Writing GUI stuff in Delphi
         | was (probably is) a pleasure: they compiled quickly, looked
         | native, and ran fast on my shitty hardware.
        
         | revanx_ wrote:
         | nothing magic about Result keyword, it's just an implicit
         | pointer, you can avoid it completely by using explicit
         | pointers.
        
           | speed_spread wrote:
           | It's not magic in how it works, it's just magic in it's
           | syntax. It's a variable you don't have to declare. It's ripe
           | for abuse / mistakes and would be one of the things I'd have
           | lints for and watch closely in PRs.
        
             | cardanome wrote:
             | Nim has the same result variable[1] and I absolutely love
             | it.
             | 
             | It helps avoid the classic "oh, I forgot to return it" bug.
             | Also makes the code more succinct and saves you from having
             | to type an extra line for explicit return.
             | 
             | I kind of get why you would be wary of it, as it is a
             | special variable but compared to other messed up stuff like
             | for example Rust treating a line without semicolon as
             | implicit return, it is a relatively tame solution for this
             | problem and can be easily figured out.
             | 
             | Did you ever had any actual bugs caused by the use of
             | result?
             | 
             | [1] https://nim-by-example.github.io/variables/result/
        
               | ZoomZoomZoom wrote:
               | If you forgot to return a value, a function shouldn't
               | have compiled. In Nim you can easily forget to return
               | something or have a hole in your branching and get a
               | defaulted value, instead of a compiler error.
               | 
               | In some cases an implicitly declared variable feels neat
               | and convenient, but I'm not sure it's worth it.
        
               | speed_spread wrote:
               | Ha, I'm quite used to Rust's last-expression-is-the-value
               | and I also get why some would think it's weird but I find
               | it actually works quite well in practice. Each language
               | has its gymnastics and special moves, I guess. Back to
               | Pascal, I'm not opposed to Result usage per se and I
               | understand the appeal since it's what I grew on. My
               | concerns are more about code maintenance in long-ish
               | functions - I don't have a particular example of mis-
               | usage, but I'd be wary of late reassignments overriding a
               | previously set value. Separating exit points from return
               | value assignment could let code become hard to follow and
               | create situations where it's easy to misread the actual
               | outcome.
        
         | open-source-ux wrote:
         | " _The 'var' section, magic "Result" variable and begin/end
         | pairs are just from another age...Programming languages have
         | advanced _a lot_ since Pascal was created._"
         | 
         | I understand why some programmers dislike Pascal's syntax, but
         | C and C++ are also old and still popular (including for new
         | projects). Syntax and semantics are closely entwined but C and
         | C++ syntax still influence "modern" languages.
        
           | kwhitefoot wrote:
           | Nim has a result variable, it's very handy.
        
       | Peter5 wrote:
       | This website, is a collection of cool samples and sources. Check
       | https://www.getlazarus.org/learn/tutorials/examples/ for many
       | cool projects and the author has many nice projects including
       | https://github.com/sysrpl/Tiny.Sim
        
       | tristanbvk wrote:
       | Personally I read the programmer manual for FP. You can do both
       | Object Pascal OOP and Delphi OOP.
       | 
       | Wild. Also nice units for doing mmap and all libc stuff. I really
       | ought to finish learning Pascal and actually write something in
       | it. Not a bad language.
        
         | tanakian wrote:
         | not only libc. what is very cool is that most of the parts of
         | very rich fpc library has no libc dependency.
         | 
         | so necessary parts get linked statically to the resulting
         | binaries, and those binaries do not require libc. most of the
         | library goes with roots to kernel calls, bypassing libc.
         | 
         | once you start using threads or link to other c libraries (like
         | gtk) then libc becomes a dependency.
        
           | tristanbvk wrote:
           | Honestly it is such a fun language playing with FPC
           | especially. I have the urge tl write something in it.
           | 
           | Maybe when I am done with my compiler (written in D), I'll
           | write something fun and small like that in Pascal. Who knows!
           | But I love FPC!
        
       | shimonabi wrote:
       | Is there a way to use the Lazarus libraries, but write code in
       | C++, like with C++ Builder?
        
         | badsectoracula wrote:
         | You can have your C/C++ code exposed to Free Pascal via a C API
         | loadable as a shared library / DLL, but beyond that there isn't
         | much you can do (Free Pascal comes with a `h2pas` tool to help
         | convert C headers to Free Pascal units for such use).
         | 
         | This is of course far from having something like C++ Builder.
         | 
         | To have something like C++ Builder it'd need a lot of things to
         | work together:
         | 
         | 1. A C++ compiler will need to be extended so it can use Free
         | Pascal classes (in terms of memory layout) and add any
         | necessary language functionality for "published" sections (RTTI
         | data that allows FPC objects to describe themselves and be
         | streamed/serialized), metaclasses (classes in FPC are objects
         | and can have their own virtual methods, including virtual
         | constructors), delegates (basically "fat" pointers) as well as
         | data types like sets, strings, etc that FPC has. LCL (Lazarus'
         | framework) relies heavily on pretty much all of FPC features.
         | 
         | 2. FPC will need to somehow be able to import classes defined
         | on the C++ side too so that components written in C++ will be
         | usable in Lazarus. Also almost goes without saying but it
         | should be possible to statically link programs using both FPC
         | and C++ in the same executable.
         | 
         | 3. The C and C++ runtime libraries will need to use FPC runtime
         | library functionality for things like memory management (FPC's
         | memory manager is pluggable) so that "crossing" memory
         | management will work fine - even across dynamic library
         | boundaries (e.g. calling `malloc` on the C++ side and then
         | "FreeMem" on the Free Pascal side, even when the latter is in a
         | dynamic library that shares a memory manager with the host
         | program, should Just Work).
         | 
         | 4. Lazarus' "codetools" will need to be expanded to support
         | parsing C++ in addition to Free Pascal so that all of the IDE's
         | automatic code writing and refactoring functionality will work
         | for C++ too - things as simple as double clicking on a button
         | and having the methods be written automatically in the editor
         | with the cursor placed in the method body rely on this working.
         | 
         | These are from the top of my head, there might be other issues
         | to handle, but even from the above it should be clear that it
         | requires not only a lot of work but also a lot of different
         | projects to work together (unless FPC and/or Lazarus devs
         | decide to implement their own C++ compiler and runtime).
         | 
         | In the short term it might be easier to use Qt Creator which
         | has some RAD-ish features. It is certainly clunkier, the API
         | feels to be made with a code-first (as opposed to LCL's
         | WYSIWYG-designer-first) approach and the IDE isn't as
         | featureful (also at least for me it never works out of the box
         | on Linux) but it is the closest open source project you can
         | find for C++.
        
         | tanakian wrote:
         | yes, i believe delphi rad studio has c++ compiler and the
         | libraries are written in pascal, it is a lineage from c++
         | builder.
        
           | tanakian wrote:
           | https://cppcast.com/cpp-builder/ - this is the podcast where
           | embarcadero devs tell about how they maintain number of
           | patches to llvm's compiler to make it compatible with
           | necessary non-standard features like closures.
           | 
           | this also tells us that c++ became so big and complicated
           | that one company (embarcadero size company) is not able
           | anymore to support own compiler, they need to maintain own
           | patches.
        
             | coliveira wrote:
             | If you look at C++ standard support in major compilers,
             | you'll find that no compiler on earth supports the whole
             | C++20 standard. Gcc is the one that gets closest, but still
             | has several "partially supported" features.
             | 
             | https://en.cppreference.com/w/cpp/20
        
         | signaru wrote:
         | Qt and wxWidgets are also worth considering assuming you would
         | just be "writing" the code and not taking advantage of the
         | visual designers. These do have visual designers, but Lazarus
         | if far easier to use, IMHO, following the footsteps of Delphi
         | and VB classic.
        
       | kqr wrote:
       | When I looked into learning Free Pascal (not _that_ many years
       | ago) it seemed to me like Ada was the more well-developed,
       | actively used language of that sort of heritage.
       | 
       | Have any of you used both languages? What made you stick with
       | Free Pascal instead?
       | 
       | (To be clear, I'm interested in a comparison that goes beyond the
       | price point of the commercial compilers, which is a tired subject
       | at this point.)
        
       | tifadg1 wrote:
       | Pascal killed my interest in programming for a while as it was
       | force fed in both high school and earlier collage years.
       | Reflecting back, it was the pessimistic approach to teaching of
       | just pushing math problems via programming.
        
         | tanakian wrote:
         | they just didn't know how to teach back then.
         | 
         | they could approach the same math from the other side, by
         | starting to write games. and gradually come to game math. that
         | would be more interesting, and then it would become obvious why
         | one may need some math while programming.
        
           | 082349872349872 wrote:
           | Heh, now you've made me consider an "abstract algebra for
           | kids" tutorial, with data representations for simple games as
           | the overarching conceit. Unfortunately, as a cishumanist, my
           | finite lifetime expectation means I'll leave this project for
           | some other interested party?
        
             | prosaic-hacker wrote:
             | HexFlexagons https://en.wikipedia.org/wiki/Flexagon
             | 
             | Angle trisection tools. https://www.instructables.com/The-
             | Tomahawk-an-Angle-Trisecti... First AA proof I learned:
             | Cannot trisect an angle with ruler and compass.
        
               | 082349872349872 wrote:
               | Flex Mex: https://www.youtube.com/watch?v=GTwrVAbV56o
               | 
               | > _However it is imperfect: for it is not yet delicious._
        
           | prosaic-hacker wrote:
           | Back Then. When was that? At University (1978) we used Pascal
           | as the first language to learn (if you exclude CDC Cyber 6600
           | assembly). Yes we did the Discrete math problems common in CS
           | (https://mathworld.wolfram.com/Floyd-WarshallAlgorithm.html).
           | We did other things as well. The professors were a mix of
           | hippies, math geeks, and the Doctors from Doctor Who. Most
           | knew both the academic and fun side of programming.
           | 
           | I guess it depends on the school and people there to create a
           | fun but educational culture.
        
         | projektfu wrote:
         | Ca. 1994 we had Pascal as the language for AP computer science.
         | Later, they started adding other languages. In my school the
         | options were Basic (TrueBasic) which was offered as a stepping
         | stone to APCS and pascal. I also had the opportunity to study
         | Scheme through CTY's excellent summer class.
         | 
         | At the time, I remember pascal feeling like "real programming".
         | The programs were compiled and they operated at various levels
         | of abstraction, from pointers up through advanced data
         | structures and interfaces/ADTs. I didn't see Scheme as more
         | than a toy, which was partly because the MIT Scheme
         | implementation was just an interpreter. And I hated Basic and
         | still do.
         | 
         | Pascal was great because it was pretty easy to learn and
         | somewhat consistent. Its most annoying feature, semicolon-as-
         | separator, was easily handled by the terrific Think pascal
         | editor.
         | 
         | In its time, Pascal was a great choice. There were real-world
         | things that you could do immediately using Think Pascal and
         | Turbo Pascal. Making the switch to C and Unix wasn't simple but
         | probably easier than starting with Basic. However, I was left
         | with a bias towards wordy languages like Pascal, Ada and
         | Modula-3 that took a while to get over :)
        
         | coliveira wrote:
         | Pascal is great as a teaching language because of its simple
         | syntax. It is also a pre-OO language, so you don't need to
         | spend time explaining what classes and objects are. For an
         | introductory programming course it is a very good language.
        
         | analog31 wrote:
         | This was all people knew. Most people saw programming as a
         | branch of math. When a high school offered a programming class,
         | it was often taught by a math teacher. The smaller colleges in
         | my state, that were beginning to add computer science, did so
         | by combining it with the math department.
         | 
         | My mom taught programming in the early 80s. She took a course
         | at the nearby community college, and a year later, was teaching
         | the course. Her background was... high school math teacher. She
         | said: "Programming is just math, a program is like a proof."
         | Fortunately I loved math and proofs, so that way of thinking
         | wasn't an obstacle for me. Clearly we know differently now.
        
         | alexvoda wrote:
         | I also experienced mandatory Pascal classes in high school and
         | similarly hated it, especially because I already knew other
         | programming languages.
         | 
         | Much later however, I started really appreciating Pascal, both
         | as a teaching language and as a multiplatform language.
         | 
         | PeaZip, CudaText, Transmission Remote GUI, UltraStar Deluxe and
         | plenty others are written in FreePascal.
        
         | markus_zhang wrote:
         | Pascal aside, back when I was 10 my father also tried to force
         | math programming to me when I showed interest in games.
         | Apparently it didn't work.
        
         | JanisErdmanis wrote:
         | I also had mandatory pascal during my high school years.
         | Although I knew a little of C, C++ and python at that time and
         | felt a bit obscured about learning pascal, today, I deeply
         | admire my teacher's choice of pascal. Pascal has a nice
         | beginner terminal IDE with a debugger and breakpoints; it has
         | types, stack allocation and memory planning before the program
         | is being run; recursion is possible, and it does not have many
         | obscure features like pointers and OOP obscurities. Today,
         | perhaps I would suggest Julia as the first language to teach,
         | but pascal is still at the top.
        
         | pankajdoharey wrote:
         | Pascal is a great language for programming games as is
         | evidenced from Delphi Quake and Delphi Quake 2 projects
         | https://sourceforge.net/projects/delphiquake/
         | 
         | I believe the right approach to programming is graphics for
         | kids.
        
           | codewritinfool wrote:
           | Age of Wonders is a great Delphi-produced game too, if I
           | remember correctly.
        
         | sysrpl wrote:
         | Free Pascal was originally derived from Object Pascal and later
         | Delphi, both of which added more object oriented programming
         | features to Pascal. Additionally, it supports some of the more
         | advanced features introduced to Pascal with later releases of
         | Delphi including managed types, interface types, operator
         | overloading, generics, implicit and explicit conversions,
         | extension properties and methods, as well and user defined
         | initializers and finalizers for your custom types, and more.
         | 
         | I could write an article about each of these features, but in
         | summary they each are powerful and help users write more useful
         | programming code when leveraged correctly.
        
         | FpUser wrote:
         | Luckily for me I've never received any formal training in
         | programming back in school. My introduction to programming
         | happened in University and research labs in a very simple way -
         | I needed to process and interpret some experimental data live
         | and the only way I could do it was a computer. So I got me a
         | user guide for particular one and bunch of books. In a few days
         | I was already coding away. In exactly the same way I was
         | introduced to electronics. Had to make some equipment for my
         | research as you could not by one. Started with machine codes
         | but over the time I've used many languages including Pascal
         | from Borland. Programming was far from my main job but at some
         | point I switched from science to creating commercial products
         | as I was good at it. Some products I own and some I develop for
         | clients. Most of products are ether pure software or contain
         | some good chunk of it so I am still happily coding away even
         | though I am 60 already.
        
       | ThinkBeat wrote:
       | Pascal gets an underserved bad reputation. I am showing my age
       | but Turbo Pascal was (is) great. Extensions from Turbo and Delphi
       | Object Pascal is great as well.
       | 
       | I hate the insane pricing Embarcado has imposed on Delphi. They
       | have had cross platform GUIs in Delphi for a long time. Something
       | for some reason other tools struggle and mostly fail to do.
       | 
       | I have not been able to "sell" it to clients mostly due to price.
        
         | ak39 wrote:
         | Embarcadero insane pricing of Delphi is the reason I haven't
         | continued beyond my old version Xe2. I guess they are making
         | hay while the sun shines with the locked-in customers.
        
           | galangalalgol wrote:
           | Do they have the yellow-on-blue syntax highlighting
           | trademarked or something? I've looked for vim and vscode
           | color schemes to match the original turbo c++ but to no
           | avail. I remember borland builder had a setting to switch
           | back to it.
        
           | Peter5 wrote:
           | In these days, Lazarus and FPC are a valid choice instead of
           | Delphi, except when you are doing some heavy component based
           | codes, like organization oriented projects. Plus side is
           | Lazarus can produce a project and UI for almost any OS.
        
             | nurettin wrote:
             | I would jump back to fpc/lazarus after twenty years if
             | devexpress supported it.
        
               | ak39 wrote:
               | 100%. My projects are DevExpress heavy.
        
         | [deleted]
        
         | klodolph wrote:
         | I think this was a reason for C's success back in the day. If C
         | compilers were a little cheaper and easier to get, then they'd
         | completely take over, long-term.
         | 
         | I remember that Pascal was the norm for Mac programming for a
         | time during the late 1980s or so. You could use THINK Pascal
         | (later Symantec) or MPW Pascal. Pretty soon everyone was
         | programming in C and compiling their programs with Metrowerks
         | CodeWarrior.
        
           | narag wrote:
           | _I think this was a reason for C's success back in the day._
           | 
           | Nop, more like the other way around in the 80's. Before,
           | there were two reasons: lack of a standard (Pascal was a
           | learning language, not intended for professional use) and the
           | VM fever: very often so-called P-Code systems were the quick
           | and dirty way to have a programming language for a new
           | system. The result was slow, incompatible, cumbersome access
           | to machine resources.
           | 
           | C was always compiled and had a clear standard that included
           | direct memory access. Also UNIX.
           | 
           | But in the 80s, TurboPascal was $50, had everything that C
           | had + an IDE + compiled x100 faster. Later there was a nice
           | text-mode GUI (TurboVision), then Delphi. Microsoft defused
           | it poaching most Borland talent.
        
             | dragonwriter wrote:
             | > lack of a standard (Pascal was a learning language, not
             | intended for professional use)
             | 
             | The parenthetical is correct, what is outside is not;
             | Pascal had a standard (ISO 7185:1983), but the standard
             | lacks features needed for serious use, so Pascal
             | implementations were either standard and hobbled or useful
             | but not interoperable.
        
               | narag wrote:
               | _Pascal had a standard (ISO 7185:1983)_
               | 
               | Doesn't "1983" tell you something?
               | 
               | I don't mean to snark. Maybe my comment wasn't clear
               | enough. I've talked of two different periods: the first
               | in the seventies, the second in the eighties and later.
               | The starndar was late. By that time, it wasn't needed
               | because the only Pascal that was widely used was
               | Borland's.
        
               | dragonwriter wrote:
               | > Doesn't "1983" tell you something?
               | 
               | That it was finalized around the same time Turbo Pascal
               | 1.0, which only ran on DOS and CP/M, was released.
               | 
               | > The starndard was late. By that time, it wasn't needed
               | because the only Pascal that was widely used was
               | Borland's.
               | 
               | The ISO standard closely followed the 1974 language
               | description, which served largely the same purpose and
               | had generally the same shortcomings on utility, so that
               | the "interoperable but not useful because following a
               | very limited common description, or useful but not
               | interoperable because of proprietary extensions on top of
               | the common description" predates the ISO standard; the
               | lack of a common labguage spec was never as much of a
               | problem as the focus of the spec.
               | 
               | And, no, by December 1983, Turbo Pascal (released the
               | month before) was not the only Pascal that mattered. Nor
               | would it be later in the 1980s, as Apple's Object Pascal
               | (which influenced later versions of Turbo Pascal) became
               | important.
        
       | squarefoot wrote:
       | A peculiar aspect of Lazarus (Free Pascal's Delphi-like IDE) is
       | that it either cross-compiles for other architectures or can run
       | itself on them, therefore generating native GUI software that
       | runs immediately on the target platform. That is, you can develop
       | ARM executables on a Raspberry PI using Lazarus running on the Pi
       | itself. I would also suggest to take a look at FPCUpDeluxe, an
       | installer that does all the tedious job of dealing with
       | dependencies for installing FPC, Lazarus and a great number of
       | modules and components.
       | 
       | https://wiki.freepascal.org/Lazarus_on_Raspberry_Pi
       | 
       | https://wiki.lazarus.freepascal.org/fpcupdeluxe
       | 
       | A personal dream: having something like Lazarus that works with
       | other languages too; that would likely become a game changer for
       | desktop apps development.
        
       | Peter5 wrote:
       | Note for people who don't know much about FreePascal. It is a
       | full-featured and very fast compiler. The resulting program is a
       | rival for the best output of C/CPP compilers. It can be used in
       | the style of simpler languages like Go and is almost as safe as
       | Rust in a much faster manner. It has a great but old-looking IDE,
       | Lazarus. It has been under active development for decades and is
       | used for proper projects like:
       | 
       | https://dadroit.com/ https://peazip.github.io/
       | https://cudatext.github.io/ https://lazpaint.github.io/
       | 
       | As far as I know, there is no toolkit out there that lets you
       | make fine looking applications for multiple platforms with proper
       | speed.
       | 
       | The old Pascal you may know is not the new Pascal. The
       | development of Pascal is mostly focused on ease of development
       | while maintaining low-level programming and backward
       | compatibility. It looks old on its face, but it is young at
       | heart.
       | 
       | I recommend starting with Lazarus, https://www.lazarus-ide.org, a
       | much lighter IDE compared to so-called light projects like
       | VSCode, with many more features and components to play with.
       | 
       | Friendly word: don't let the comments with outdated information
       | make you miss a great and fun tool.
        
         | chinabot wrote:
         | Should add the freepascal community is much more forgiving of
         | noobs and generally well behaved (trolls dont like quiche I
         | guess!)
        
         | andai wrote:
         | You mention that Pascal is almost as safe as Rust. This comes
         | as a great surprise to me, because I was under the impression
         | that Pascal and C are very similar.
         | 
         | (Though I hear the strings, at least, know their own size!)
        
           | ivanhoe wrote:
           | I have no experience with Free Pascal, but its predecessor
           | Delphi was a lot safer (and easier) to use because of dynamic
           | strings and arrays. You could use it almost without touching
           | pointers ever (Win apis were the main reason for using
           | pointers, as they were C based). In those days when stack
           | overflows were the main security issue for majority of apps,
           | Delphi apps were considered way safer than VC++ apps.
        
           | slt2021 wrote:
           | I learned programming at school in Pascal and didn't have
           | troubles with memory safety. FreePascal/Delphi has good
           | standard library to work with strings and dynamic arrays and
           | objects, and as long as you follow very simple convention
           | with TObject.Create() and TObject.Free; you won't have memory
           | safety problems.
           | 
           | I didn't really have a need to work with pointers and do
           | pointer math in Pascal, because language itself provided
           | facilities to work with heap objects safely.
           | 
           | Also standard Pascal compiler added array bounds safety and
           | many other checks, and you would easily find these errors
           | during program execution (there wont be a silent exception).
           | 
           | Also because Pascal compiler is LL(1) single pass compiler,
           | you could easily do a cycle of: edit code, compile (<1 second
           | on 333Mhz Pentium-II), and run.
           | 
           | That compiler enabled developer experience of like modern
           | Python/Javascript
           | 
           | Unlike C++ which spent enormous time evaluating macros,
           | compiling, linking, etc
        
             | twic wrote:
             | > as long as you follow very simple convention with
             | TObject.Create() and TObject.Free; you won't have memory
             | safety problems
             | 
             | Is this the same as how in C, as long as you follow very
             | simple convention with malloc() and free() you won't have
             | memory safety problems?
        
           | chinabot wrote:
           | Pascal is type safe and generally catches most errors at
           | compile time, you can still create run-time errors such as
           | indexes outside arrays but these will cause errors not bad
           | return data.
           | 
           | eg I use C a lot and find myself referencing array index [0]
           | a lot, in pascal arrays starts at [1] if not specifically
           | defined so I know this from experience, frustratingly I have
           | a different problem in C which will either return random data
           | or crash if writing.
        
             | gramie wrote:
             | I'm pretty sure that FreePascal and Delphi can do run-time
             | bounds checking (it's a compile-time option).
             | 
             | Pascal also avoids buffer overrun errors on strings,
             | because strings are dynamically resized as necessary.
             | 
             | You can also avoid having to free objects if you declare
             | them as implementing a certain Interface (I forget the
             | exact one). They will automatically be freed when the
             | number of references drops to 0.
        
             | kwhitefoot wrote:
             | Pascal arrays can use any sub-range of an ordinal type as
             | the index. You should define the distinct type of the index
             | instead of using integers then you will get an exception if
             | you attempt to use an out of range index.
        
           | suprjami wrote:
           | I am fairly sure FPC protects against out of bounds access in
           | some cases. I ported a Pascal game fairly verbatim to C for
           | fun, and many segfaults later I realised it seemed to be
           | relying on this behaviour of the language. Maybe I'm wrong,
           | it's the only Pascal I've ever read.
        
         | jchw wrote:
         | I don't believe you regarding "as safe as Rust." It's been a
         | minute since I've messed with FreePascal, but as far as I know
         | and can ascertain at a glance, it lacks any true modelling of
         | memory safety to even match Go, and certainly not memory
         | ownership to match Rust. It is surely possible to write correct
         | programs in Pascal, and maybe even easier than C, but it would
         | not be accurate to describe it as "as safe as Rust." It's not
         | really even close...
         | 
         | Don't get me wrong, though. I do think Lazarus/FreePascal are
         | underrated, but some of these claims are exaggerated. FPC
         | generates good code, but on par with GCC/LLVM? I'd guess it's
         | probably sitting closer to Go in terms of performance
         | characteristics. More than good enough, but surely a ways away
         | from the ridiculously complicated optimization systems in LLVM
         | and GCC which aggressively vectorize, constant-fold, DCE,
         | inline calls, interchange loops, and so forth.
        
         | jksmith wrote:
         | Yeah, but it's not hip, and it's too wordy with BEGIN/END, and
         | the data structures are too restrictive, and the compiler nags
         | you, and the like. And you can write an 8M line codebase in it,
         | touched in all kinds of foul ways, and it still works. That's
         | the biggest codebase I've ever worked on at least.
         | 
         | Take that as a small (subjective) clue. Anything that is great
         | about Rust or Nim or <..> could also have extended Pascal or M2
         | for the same result, and much sooner. Especially goes for M2,
         | because the grammar was so small, thus avoiding the old PL1
         | traps from an overloaded parser.
         | 
         | FPC needs smart macros, needs to backport M2 interfaces, and
         | the solid green thread spec* backported from M2, but it really
         | is in the ballpark. You want gc? Well, fair enough, but you can
         | write a pretty good mark/release* facsimile with RTTI. Or how
         | about Eiffel simulated contracts with open arrays?
         | 
         | And Lazarus, good grief what a 30 year old premiere open source
         | project. No point in even talking about how awesome it is.
         | 
         |  _Co-Pascal has been doing co-routines for 45 years.
         | 
         | _ In turbo pascal, you could create mini-heaps that could be
         | dumped most anytime. They weren't smart, but still a cool
         | feature.
        
         | ptx wrote:
         | > _It can be used in the style of simpler languages like Go and
         | is almost as safe as Rust in a much faster manner._
         | 
         | What does this mean, exactly? Usage in the style of Go requires
         | garbage collection and being safe like Rust (without GC)
         | requires a borrow-checker, and as far as I know Free Pascal
         | doesn't have either.
        
           | planetis wrote:
           | A borrow-checker isn't the most practical or the only way to
           | provide safety. For example, a string type can have an offset
           | for creating O(1) string slices and point to a shared
           | counter. That way when mutating the string, it creates a
           | fresh copy iff the counter is bigger than 0.
           | 
           | I am working towards this in
           | https://github.com/planetis-m/cowstrings
        
           | shadowofneptune wrote:
           | Object Pascal has two magic types, dynamic arrays and
           | AnsiStrings. These are automatically reference counted.
           | Objects and classes have to be managed by hand, yes.
           | 
           | In general, expect a lot more compiler magic out of Pascal, a
           | lot of concepts were hacked into the Borland compilers over
           | time.
        
             | usrnm wrote:
             | So, it's closer to C++ wrt safety, not Go or Rust.
        
               | shadowofneptune wrote:
               | That is accurate, yes. Borland C++ and Delphi share the
               | same component library and are interoperable.
        
       | Akira1364 wrote:
       | Don't download the bundled Free Pascal and Lazarus distributions
       | from this site, they're very outdated. Just get the normal
       | releases from the actual Free Pascal and Lazarus sites which are
       | linked at the top of the page. Lazarus comes with Free Pascal
       | bundled by default anyways, so you don't need to grab the
       | compiler separately if using Lazarus.
        
       | Mikeb85 wrote:
       | Since this is a pretty general thread about Pascal, shout out to
       | Castle Game Engine:
       | 
       | https://castle-engine.io/
        
       ___________________________________________________________________
       (page generated 2022-12-28 23:01 UTC)