I coded a viewer for a binary file format reader at work that launched Octave via a TProcess and communicated with it over pipes. Rather than rewrite the Matlab that did the file processing, I just called the same functions our analysis guys were using. To get the data into Pascal, I had Matlab write binary files to disk and then read them in - this is because the pipe implementation on Windows (it was faster than the pipe).
Then I used the BGRABitmap's BGRACanvas as a component to draw the bitmap images (frames of data). To this I added some crosshairs. There is also a chart component that displays the data that makes up our range calculation.
It came to ~5MB executable, one non portable function (I asked Windows the size of the file Octave is writing until it returns the correct value, and I block on it - not bright, but easy to do. I prime the message pump with Application.ProcessMessage in that loop so the user doesn't see the blocking action.
I compressed the executable down to 1.5MB, just to see how far it would go. The project is portable to Linux except for the one function (which will go in an ifdef when I get around to it).
All of this with visual feedback, no make files, and 100% free as in freedom, Borland/Embarcadero can't take it from me, can't "change directions to focus on Enterprise", whatever.
The community is amazing, and answered all of my questions, and many of them really know their shit.
Thanks for sharing your real life experience, as a Delphi developer I've been watching FPC/Lazarus becoming more and more mature over the years, what a exciting thing! If you need an ORM/Web framework, check mORMot out, with the supplied rich set of samples, it's easy to get started: https://github.com/synopse/mORMot/tree/master/SQLite3/Sample...
My only experience with Pascal has been really old-school Pascal, which is a pointers-and-explicit-allocation language like C; if you want a map of things, you need to build one from scratch, track pointer lifetimes, remember to free stuff explicitly, etc.
You have the option to do it manually, of course - full power to the programmer! However...
If you don't want to track pointer lifetimes, you can use interfaced objects, which are reference counted. There are tradeoffs there, but you get to choose them.
The Lazarus IDE is setup out of the box to have debug builds include heaptrc - running your program in debug mode gives you a printout of anything you forgot to free. This is what I've been using.
Do you have a particular example or data structure you're interested in? I'd be glad to help determine if FPC/Lazarus fits your use case.
Then I used the BGRABitmap's BGRACanvas as a component to draw the bitmap images (frames of data). To this I added some crosshairs. There is also a chart component that displays the data that makes up our range calculation.
It came to ~5MB executable, one non portable function (I asked Windows the size of the file Octave is writing until it returns the correct value, and I block on it - not bright, but easy to do. I prime the message pump with Application.ProcessMessage in that loop so the user doesn't see the blocking action.
I compressed the executable down to 1.5MB, just to see how far it would go. The project is portable to Linux except for the one function (which will go in an ifdef when I get around to it).
All of this with visual feedback, no make files, and 100% free as in freedom, Borland/Embarcadero can't take it from me, can't "change directions to focus on Enterprise", whatever.
The community is amazing, and answered all of my questions, and many of them really know their shit.
I can't recommend it enough.