Lazarus 2.0.0
forum.lazarus-ide.org
forum.lazarus-ide.org
And to associate a face with the name, here is the screen shot page: http://wiki.lazarus.freepascal.org/Screenshots
W10 Specific page: http://wiki.lazarus.freepascal.org/File:lazarus_win10_1709.p...
Pros: super easy to serialize data, compilation is fast, easy to avoid crashes.
Cons: version packaged in Debian is far from perfect, some UI bindings are not very stable on macOS for instance.
This makes it one of the few modern languages where you have to manually free all child pointers (like in C).
The first way to auto destroy objects is to expose an Interface and free your object in the Release method. You can inherit from several class types that already do that if you don't want to rewrite a new class.
The second way is a newer feature that allows you to define Initiazlize and Finalize methods on any complex type. When you define these methods, the compiler generates code to reference count your object and call Initazlize on create, and Finalize when your object is no longer referenced. This works the same on stack based types as well as heap allocated types.
Do you think that the changes help with simpler algorithms -- like in StringHashList [0], where destructor specifically calls Dispose on each array element, and then deletes the array storage itself?
[0] https://github.com/graemeg/lazarus/blob/95d183bacd5f895d3e6c...
The change we're talking about automatically invokes Initialize and Finalize on all types for dynamic allocations / destruction, unless they intentionally circumvent it. Intentional circumvention might include allocating raw memory in a class and treating the class like an array with an index property. In other words, if you declare a raw pointer, allocate untyped memory (e.g. bytes), and handle something back from that memory using a typecast, then you are bypassing automatic allocation and destruction.
All other ways to make space for complex types (records and classes) as well as types which may hold complex types (arrays and nested fields) will safely and reliably use Initialize and Finalize when needed if they are defined.
Or use fpcupdeluxe with several clicks, screenshot here: https://screenpresso.com/=iyqoc
> Lazarus is a free cross-platform visual integrated development environment (IDE) for rapid application development using the Free Pascal compiler
Title might be better if it was 'Lazarus 2.0 released' maybe.
People come to HN to escape repetition—except of their favorites, of course, which they love to see repeated. Everybody's favorites are different, so for an overall solution we need to regulate repetition.
Even when they aren't strictly reposts, we mark a story as a dupe if (a) it has had significant attention in the last year, and (b) the new post doesn't add significant new information (See https://news.ycombinator.com/newsfaq.html and https://hn.algolia.com/?query=%22significant%20new%20informa...).
Project-release threads tend not to be about the incremental features in the new release but rather free-ranging discussion of the project in general. That's fine, but about one per project per year is the right amount for HN to host. That gives us a good mix of projects to discuss while still leaving space for other things.