[Estimated Reading Time: 6 minutes]

It has been a looong time since I last looked at Lazarus. So long in fact that I don’t remember exactly when it was. Whenever it was I don’t think I ever actually managed to even get it up and running at that point. Certainly I don’t remember much about it if I ever did. But with the timely Lazarus 1.0 announcement last week, I have gone back to have another look.

And this is what I found.

First up, installation was not only smooth and painless but also extremely swift. I didn’t put a clock on it but it was certainly only a few moments. Installation on OS X was slightly more involved as it required first installing FPC and FPC sources before Lazarus could actually start up, but the Win64 build seemed entirely self contained.

Once installed I fired it up:

First of all, it was a bit of a culture shock finding myself back in a Delphi 7 era undocked IDE especially as, although still quite familiar, the Lazarus IDE has adopted some of the more modern IDE changes, such as in the Options dialog.

Now, I’ll be the first to admit that – back in the day – I was a big fan of the undocked layout, primarily as I found it far more productive in a multi-monitor configuration. These days though, I now have such a huge primary display (27″ iMac) that at home I have gratefully reclaimed the desk space previously occupied by the second monitor. In the office – with a much larger desk – I still have a second monitor alongside my iMac there, but these days it is used for little else other than as a Spotify and Skype console. πŸ™‚

I should mention at this point that there is a project to create support for the “Docked IDE” configuration, but it is not included as part of Lazarus 1.0 but is a separate download, currently still in beta.  This installs as a “package”, but packages in Lazarus appear to be a slightly different animal that that which we’re used to in Delphi as installation requires a rebuild of the Lazarus IDE to incorporate it.

So I tentatively went through this process, but was pleased to find it was a simple matter of click-click-done: I opened the Lazarus package project file and when I then tried to install it was informed that the IDE needed to be recompiled and did I want to go ahead ?

I confirmed that I did, and a few seconds later it was finished and Lazarus automatically restarted.  After the rebuild, I had a new KZDesktop -> Start option in the Tools menu.  Selecting this cautioned me that the package was a beta – I had been warned! – and that the docked mode was now enabled and I just had to restart Lazarus for it to take effect.

There is a Restart option on the Lazarus File menu, so I guess restarting Lazarus is something that crops up quite often.  But no worries, restarting takes barely a moment (literally a couple of seconds).  And on this occasion I then found myself presented with the “Docked IDE”.

Sort of.

As you can see, the Form Designer for some reason failed to embed even though the scaffolding for it is clearly present.  This may be something to do with the fact that I am using the OS X build of Lazarus (for this exercise at least – I have also looked even more briefly at the Win64 build and it is basically identical as far as I can tell… and all without a SmokingChimp in sight).  I believe – from little I have gathered about Lazarus etc so far – that there is some issue with re-parenting windows in the LCL.

There is also only very limited flexibility in terms of which IDE windows can be placed where (there is no drag/drop docking that I could find, for example, only a couple of settings in an options dialog).

Hey ho – this is flagged as a “beta” and isn’t part of the Lazarus “core”, at least not yet.  And frankly, the “Classic IDE” won’t take much to get used to again, I’m sure.  So, for now I simply removed the KZ Desktop package to get back to “vanilla” Lazarus.

At this point I did have something of a problem.

After restoring the “Classic” IDE, most of the Lazarus windows were positioned so far to the left and top of my display that I couldn’t get to the caption bars – without that there is no way (that I know of) to drag them back into view, and keyboard controls for this seemingly aren’t part of OS X. Consequently, this exercise has also taught me something about OS X and led me to Mercury Mover. And actually it’s such a neat bit of kit that I’m quite grateful. πŸ™‚

But I digress – back to Lazarus.

Obviously in the brief time spent with Lazarus so far I have only barely scratched the surface of it, but already I am finding things that have bugged me as not having been addressed in the Delphi IDE for a long, long time.

Display Options

  • The background colour for ALL elements can be set in one place. No need to change the background colour for each and every separate syntax element which you wish to have a common – the default – background colour
  • I haven’t done an exhaustive comparison, but there seem to be far more syntax elements over which individual control can be exercised, not just text elements but almost every aspect of the code editor.
  • As well as font selection, you also get some additional fine control over line and character spacing.

Display Options may appear superficial and cosmetic, but when you spend 8hrs+ of a working day in an environment, making it comfortable – and personal – can be important. It is to me.

Your mileage may vary. πŸ™‚

Code Tools

Overall Lazarus appears to have an embarrassment of riches in this area compared to the Delphi IDE.

Frankly, the scope of the controls seemingly available is a little bewildering, but there was one which immediately leaped out at me as of incredible utility (to me) in the area of Class Completion.

Yes, Lazarus allows you to choose the prefixes for read/write property accessor methods, for field names, for the “stored” function and even the name of the parameter in generated property write accessors! πŸ™‚

Other things help you while moving around in and editing your code too, like matched begin/end highlighting as well as parenthesis matching.

This sort of attention to detail also shows up in the messages When you compile your project. Warnings are visually more distinct (to my eye) than in Delphi and only a single-click is required to take you to the relevant and highlighted line of code.

Speaking of the message view, here’s something else that this innocuous little window revealed:

What needs to be mentioned here is that I didn’t have to explicitly perform a full build. I just hit “Run” after making a change in the project options: the IDE recognised the impact this might have on my project and made sure that a full build was performed rather than the usual compilation.

Barely Scratching The Surface and Looking Forward

I quickly came to the conclusion that I couldn’t do Lazarus justice in a single article, so I have deliberately limited this to my First Impressions – the things I noticed straight away without digging too deeply.

But I can already see that there is a lot more to Lazarus. A very great deal more.

Enough that I am determined now to make porting my existing Delphi Pascal libraries to FPC and Lazarus just as soon as possible. That means knocking them into shape for availability in Delphi first.

But just as soon as that is done, I am actively looking forward to getting to grips with Lazarus in earnest.

Quite apart from anything else, despite 1.0 only having just been released, I already have a good idea of what to expect in future deliveries.

There is a school of thought that says that such open and transparent communication with a user community is only possible if you have a hugely profitable operating system and applications division to bankroll the effort.

Given that Lazarus benefits from no such financial buttressing, seemingly what I have always believed appears to be true: that all you really need is to care.

And the team behind Lazarus seems to care. A lot.

70 thoughts on “Lazarus 1.0 : First[-ish] Impressions”

    1. To be honest, I looked at CodeTyphon and couldn’t exactly make out how it actually differed from Lazarus other than that is seemed to have a lot of components/libraries bundled in the distro. And I couldn’t see any mention of OS X either as a compilation target or as an IDE host. I think I’ll stick with vanilla Lazarus for now… more than enough to get my teeth into there as it is. πŸ™‚

  1. Code Typhon on the Mac?

    Amazing that Lazarus already already works this satisfactory on the Mac.

  2. One thing I discovered recently in Lazarus. You can write such code:

    function str2num(const s: string): integer;
    begin
      case LowerCase(s) of
        'one':
          Result := 1;
        'two':
          Result := 2;
      else
        Result := -1;
      end;
    end;
    
    1. wow, I had no idea I could use case with strings in Lazarus, thanks for the tip.
      Another reason to no use Delphi ha ha ha

      1. Cool. That feature didn’t exist last time I tried it

        But it depends on fpc, not Lazarus.

        And wth does it not support

        case ‘abc’ of
        ‘abc’: writeln(1);
        ‘def’: writeln(2);
        end;

        when s := 'abc'; case s of , works…

  3. …and we would never get that. EMB has fired a lot of trained compiler engineers.

  4. Jolyon, please make a review about HOW FAST and SMOOTH the code completion works, also, the code editor is friggin’ FAST — yes, with caps because it deserves it!

    P.S. I completely agree with your first impressions, but there are tons of pros in a more in depth review.

  5. i find cnWizards style code highlighting (when they use defferent colours for begin/end nesting) is more use to me, than having many syntax element differently highlighted

  6. I would seriously consider Lazarus if DevExpress would support it. Unfortunately, they don’t and have no interest in doing so, yet….

    1. We need to voice our opinion about Lazarus to DevExpress, if no one says anything to to them they won’t support it.

      Personally though I am trying to move away from Devexpress because it’s simply getting too expensive to renew the subscription each year.
      For a lot of grid stuff I have been using the Virtual Treeview in unbound grid mode and it works pretty good. Virtual Treeview also works in Lazarus by the way.

  7. “the IDE recognised the impact this might have on my project and made sure that a full build was performed”

    Is it a feature ? To me it looks workaround for FPC bug instead.

    1. No it’s a feature. In Delphi the problem still exists that if you change something in your project options and then forget to do a full build, only the changed source units (since the previous compilation) are recompiled, even though the project options might impact on UNchanged units.

      e.g. turning range checking on/off or adding/removing a conditional define etc.

      Many hours over the years have been spent scratching heads wondering why code isn’t working “properly”, only to realise that a full build was all that was required to have consistent project settings applied.

      Either way, if you do want to consider it a bug then it’s a bug that has never been fixed in Deplhi. [shrug]

      1. Agreed. I find it intensely annoying that (as of Delphi 2007 anyway and presumably you have used the more recent versions) if you change conditional defines then you need to manually trigger a full build otherwise Delphi will happily use DCUs from previous compiles which inevitably will fail to compile (or worse, fail at run time).

        An obvious problem and easy to fix, yet one which has escaped Borland/CodeGear/Embarcadero for years.

  8. The whole coding part is excellent. I gave 1.0 a try this moment. Works good.

  9. The case statement listed has been lacking in Delphi since the beginning. Hard to believe COBOL has it (evaluate) and Delphi never got it. One of the more useful syntax elements in a language as it simplifies the if/else/if/else structure.

    I always thought the concept of “begin” was tired and dated even when Delphi was first released. Why can’t an else, end, etc be the conditional terminator?

    1. procedure Foo;
      var
        i: Integer;
      
        for i := 1 to 10 do       // invalid variable declaration ?
          BarOne(i);
      
        BarTwo;  // repeat 10 times ?
      end;       // end of 'for' or 'procedure' ?
                 // < missing an 'end' ?
      

      For similar reasons I don’t think I’ve ever seen anyone argue that the ‘{‘ is unnecessary in C-like languages and that they could just get by with ‘}’. πŸ˜‰

  10. Interesting article, I hope you continue your investigations and report them here, would like to hear more about your impressions. Lazarus could be a good platform for teaching students, it’s free and it apparently works πŸ™‚

  11. The single-click on the message panel was one of the first things I turned off. It makes it much harder to scroll the message log than it needs to be, which is especially bothersome given the copious compiler hints that FreePascal generates.

    I also don’t know if it’s related to our environment, but automatically rebuilding when you click Run is something that Lazarus does every time I launch something, even if I’ve done a Build immediately beforehand. Unlike Delphi, I frequently run our Lazarus build without the debugger just to avoid that extra startup time.

    We’ve been really impressed with Lazarus and FreePascal too. It’s definitely made solid progress over the years. I haven’t tried Delphi’s Objective C interface yet, but FreePascal’s Objective Pascal mode is really pleasant to work with.

    The only serious caveat I have is that the OS X builds use the Carbon widgetset rather than Cocoa. The Cocoa support isn’t anywhere near complete, so if you want to target it you need to use the Qt interface instead. We’ve been building using the Carbon interface and it’s worked very well, but the threat of Apple deciding to do more than deprecate it does hang over our work.

    1. I will also say that getting what I consider a a professional level of look and feel has been quite a bit of work. Making dialogs work as sheets stably is something we’re still struggling with, and using the NSToolbar/HIToolbar controls (which we’ve had to pass on) requires dropping down to the API level. True to its VCL roots, the color and font dialogs are modal, and making them non-modal required dropping down to the API level too.

      It’s definitely been one of those experiences where the first 90% went quickly at the last 10% has been taking ages.

  12. One of the things that has always ‘bugged’ me about Lazarus is generally something never works!

    In the 1.0 release they are supposed to have a MS SQL component. It is not installed and if you try the MSSQL example program, it says it needs FPC 2.6.1. Lazarus 1.0 ships with FPC 2.6.0.

    So you upgrade to a beta 1.1 build with FPC 2.6.1 and try the same example program again and now a dblib.dll is missing. But you now have the MSSQLCOnneciton.

    It is stuff like this that has always discouraged me and led me to believe that Lazarus in any flavor just has never been ready for prime time.

    I guess I am not willing to spend the time to fix the bugs for things I want and or need.

    1. Well, you do at least have the option of fixing the bugs, rather than having to file a report into the QC black-hole and then wait for someone else to fix it, hoping that they will choose your bug to fix and hoping that the fix will be released in an update to the product you paid for rather than being used as bait to lure you into paying for the next version.

      DB access will be something I shall be taking a look at in the not too distant future.

      1. Keep in mind that you can always download and use the ZeosLib DB library that connects to 8 of the most popular SQL databases.

        See: http://sourceforge.net/projects/zeoslib/

        At this pint, it’s recommended to download the new preview edition of ZeosLib v6.6.7 at: http://sourceforge.net/projects/zeoslib/files/Zeos%20Database%20Objects/snapshots/preview-ZEOSDBO-6.6.7-stable.zip/download

        The ZeosLib tutorial for Lazarus is at: http://wiki.lazarus.freepascal.org/Zeos_tutorial

        1. Personally I’d advise taking a Zeos7 snapshot.

          I’m also not sure if the mysql option in zeos works.

          The 2.6.1+ mssqlconnection support is based on an external dll (freetds iirc)

          1. MySQL 5.5 works “out of the box” on Lazarus 1.0 using the standard “MySQL 5.1” connector component. Took me a few minutes to get my head around the transaction component but it seems to work great with the very polished dbgrid component.

            Half way through writing a home accounts package in Lazarus and overall the stability and professionalism of the system has been awesome, I’m so impressed I’ve donated US$100 to the cause (about 1/5th the XE3 Upgrade cost to put it in perspective!)

            The only thing I’m currently missing in the IDE from Delphi is the nice prompt which automatically includes a form when you reference it in your code but hey its version 1.0 and the finesse of the system so far is outweighing any minor problems I have.

            This is seriously how Delphi 7 should have progressed..

    2. Well, if you judge only from one component (and AFAIK not really widely used) of course it would look so buggy. I use MySQL(50,51,55), SQLite3, FireBird, PostgreSQL through SQLdb and they work just fine. Of course, you’ll need the client libraries which is a good idea not to be bundled with Lazarus.

      Lazarus is not designed only for / primarily for database centric application. It’s a general programming platform that can build anything. Take a look at the application gallery and projects that are using it, how many of them are database centric? Likewise, how many of them are NOT yet still damn useful and cool? πŸ˜‰

    3. >One of the things that has always β€˜bugged’ me about Lazarus is generally something never works!

      ACK that’s just awful.

      I have been using the svn-version of Lazarus for years, and feel like I have spent more time writing Lazarus bug reports than doing actual programming!

      But there is just no alternative to maintain the Pascal programs you have

  13. I guess that makes Delphi about the only language that does not let you write case statements with strings. Unique! πŸ™‚

  14. [in reply to Craig Peterson’s comment]

    Regarding the recompiles: there is an option in the project settings which reads “always do a clean build”. This option was on by default in older versions, because the change detection didn’t work as good as today (or at all).

    Regarding Cocoa: You can take a look at the new CustomDrawn widgetset which contains support (in different stages) for Cocoa, Win32, pure X11 and Android. You can find more info about it here: http://wiki.freepascal.org/Custom_Drawn_Interface

    Regards,
    Sven

    1. This should have been an answer to Craig Peterson’s post… Stupid reloads in Android browser -.-

      Regards,
      Sven

      1. I added a link back to Craig’s comment that I think you were responding too (unfortunately I can’t change the actual threading – or at least I don’t know how to if I can, using the standard WordPress comments management facilities. πŸ™‚ )

        Either way, all part of the service. πŸ™‚

  15. Some of the other stuff I think is an improvement

    – the ability to setup a copy of lazarus, installed components inclusive that is located in one directory, and nearly entirely location (installed path) independent. I was talking to lazarus devels, and we hope to have an out of the box installation option for that in the next release (but it is already possible now)

    – projects have dependencies on packages. Paths from packages you have a dependency are automatically added. This makes exchanging programs much easier. (since not everybody installs his packages in the same place)

  16. Thank you for your review of Lazarus. I’m looking forward for any to come, even if they may be more critical ^^

    Regarding some of the points you mentioned:

    There are two packages distributed with Lazarus since 0.9.28 that allow you to enable docking: anchordockingdsgn and easydockmgrdsgn. You should only install one of them (I personally prefer Anchor Docking) and let the IDE restart. You will be greeted with a misconfigured IDE layout that you need to correct a bit using the splitters. You can then use Drag and Dock to reconfigure the IDE and save the layout using “Tools -> Save layout as default”.

    The docking of the designer forms is disabled, because that does still more harm than good. But the form will be moved to the front if you click a component in the component palette πŸ˜‰

    Take your time when getting in touch with Lazarus and Free Pascal as there are many gems to be discovered (even for me as a compiler dev) πŸ˜‰ (defintely take a look at the links mentioned by Martin and the wiki in general)

    Regards,
    Sven

  17. Excellent article, and a most informative set of discussions on Lazarus I have seen to date. I have been impressed with the quality of recent releases of Lazarus. A big, big thank you to the development team who had done such a wonderful job. I am using the Code Typhon edition, which is also put together extremely well by the team at Pilot Logic. Look forward to native development for Android out of the box, is this on the road map?

    1. It works already more or less. See here.

      Alternatively you can use the new JVM/Dalvik port of Free Pascal for which you can find informations here and here. Be warned though: Using the JVM port is currently not as fluent as normal Pascal development, but at least the Lazarus IDE helps you πŸ˜‰

      Regards,
      Sven

  18. Delphi 7 IDE Woohoo! – I can make big forms again!

    If I make the Properties window wider, the vertical divider does not creep along and need resizing, as in XE2.

    If I click on a property, I really get that property. In XE2, if you scroll down it selects the property that was at that position before.

    Seems a bit slow opening and closing. But is OK.

  19. I have been using the latest builds of Lazarus for the last 6 months and have to say it’s excellent. I have been doing a lot of new projects with Lazarus and only using delphi if a 3rd party control I need like Trichview edit is not available.
    Devart.com is a good supporter of Lazarus and their PGdac (postgresql) and others work on Lazarus.

    Also there is docking built in but it does not embed the designer which is OK with me for now.

    Spread the word on Lazarus and let try and influence 3rd party developers to support it.

    I would have no problem ditching Delphi and using Lazarus exclusively if the 3rd party comes around and sees the light.

    1. Have you try Code Typhon package? There are mile more components than I was using in my D6 days.

      1. yes, I use Code Typhon to cross compile a server app for linux, works
        great.

  20. oh, one really nice thing about the code Typhon distro is it allows for easy setup of cross compiling Linux executables on windows.
    You have to copy the needed linux libs to your windows 7 box but other than that it works great, I compile a chat server I made with Synapse as a Linux Daemon right on my windows PC. One word sweet action, shame on Embarcadero for being out done by a open source project…..

    If embarcadero was smart they would switch to the Free Pascal Compiler and make the basic IDE free and sell extra abilities to the IDE such as refactoring etc.

    1. Personally, I am still annoyed with Embarcadero(?) killing off Kylix 3, and refused to release the source to open community, which left many K3 user stranded for quite a long time. With open source, we should not suffer from the same commercial brutality again.

        1. Ya, I did as well, when it was like 1500 bucks for the the pro version.
          I immediately sent it back when I discovered it was not really ready for prime time. I later bought it when they reduced the price to 129 or something like that for the Pro version.

          My revenge is to now try and use Lazarus for everything instead of Delphi, third party component developers take note!!!!!

      1. For iOS the Delphi XE2 IDE exports the project to X Code which you then compile using the FPC plug in for X Code and also debug under X Code itself.

        For OS X Delphi XE2 compiles on the Windows side and then automatically deploys to a host Mac. Debugging is done within the Delphi IDE using “Platform Assistant”, a new, multi/cross-platform variant of the “Remote Debug Server” technology that Delphi has had for years.

        As of XE3 the FPC kludge for iOS has been removed – there is no iOS support in Delphi XE3. A new iOS compiler is due to come out in Q1 next year which will be part of a new product, “Mobile Studio”, and not part of Delphi.

  21. Before I forget it: one important and very positive difference from Delphi is the fact that all the CodeTools (class completion, jump to something, etc.) are fully working when you debug your application! [of course you need to recompile if you changed something πŸ˜‰ ] So Lazarus does not become a “fancy text editor” when debugging like Delphi does.

    Regards,
    Sven

  22. Hi,
    This is very nice review, especially because it is written from the perspective of Mac OS X user. I don’t have much experience with Mac OS X/Apple – therefore I found your thoughts very interesting.

    For me, the release of Lazarus IDE 1.0 means a lot – I was waiting for this moment and I believe that right now Lazarus will gain some more commercial/enterprise recognition. I also wrote a short review on my website on this occasion – you can check it here:

    http://turingsman.net/index.php/my-blog-list/132-lazarus-1-0-free-pascal-ide-finally-released

    Not to mention, that I recommended your review, too:

    http://turingsman.net/index.php/my-blog-list/133-lazarus-ide-1-0-on-mac-os-x-reviewed

    I think that we should spread “the good word” about Lazarus 1.0/FPC as much as we can. This can help a lot in the overall success of this project (which – in my opinion – is great).

    Regards,
    Pawel Wawrzyniak
    http://turingsman.net/

  23. One annoyance I noticed is if I click a forms title bar at design time does
    not select it. Say for example say you have a pagecontrol aligned to client and you need to get to the forms events etc in the object inspector, click on the forms title does nothing and you have to scroll up in the component view window to select it. It’s minor buy kind of annoying.

    Overall I am very pleased with Lazarus so far and they have my full support in pitching it’s use to others πŸ™‚

  24. I have set-up a “Lazarus – Free Pascal Developer Group. Write Once, compile anywhere” Link-in group in order to help to focus experience and promote Lazarus, you are all invited!

  25. In my opinion Lazarus 1.0 is the BIG piece of news in this last period from a developer point of view.
    I’m using this great IDE on Windows XP 32, Windows 7 64 and Ubuntu. I ported a really big application from Delphi to Lazarus and now I can compile this app on Linux too. The range of applications you can write is wider enough to consider to use this tool for all desktop apps.
    For DB access ZeosDB components are great. Actually I’m using CodeTyphon 2.80 distro.
    Fast report works very well.
    So Long life to Lazarus.

    1. Totally agree with Luca. Lazarus is one of the best RAD tool on Linux. I use Code Typhon with Ubuntu 12.04, docking comes as standard. However, same version on Windows XP do not, may be the Linux version is more developed?

  26. What we should do is donate some cash to lazarus/fpc instead
    Of paying Embarcadero for bug fixes….
    I am currently in the process of rewriting
    My postgresql app and so far totally love
    Lazarus, it’s not all fat and bloated like
    Newer Delphi versions are. 3rd party design
    Need to take notice as I won’t be purchasing
    Components that don’t support lazarus

  27. You’re on the front page of reddit.com/r/programming.

    Congrats!

    W

  28. I would be intrigued to read a comparative review from someone who hated the earlier, bug-ridden version of Lazarus on Linux. Perhaps this new version has caught all the bugs that drove me mad, or perhaps it hasn’t and they just didn’t happen to show up in this reviewer’s testing. I’m reluctant to go through the considerable hassle of installing it on my production Ubuntu box unless someone can say “yes, I had the same trouble as you, and yes, this version fixes all that”. Because I do in fact have a copy of Delphi running on my dual-booting desktop, so I’m a bit of a rare case.

Comments are closed.