[fpc-pascal] What to do to get new users

Michael Van Canneyt michael at freepascal.org
Sat Nov 16 17:05:38 CET 2024



On Sat, 16 Nov 2024, Marcos Douglas B. Santos via fpc-pascal wrote:

> On Sat, Nov 16, 2024 at 11:43 AM Michael Van Canneyt via fpc-pascal
> <fpc-pascal at lists.freepascal.org> wrote:
>>
>> > I could see that if it was a compiler for “Pascal” which was defined by
>> > some other group and you could reference them but it isn’t. FPC is a
>> > language in its own right and the compiler is the only place that
>> > implements it.
>>
>> Really ?
>>
>> You never heard of Delphi, ElevateWeb, Smart Mobile Studio, PascalScript, OxyGene ?
>> There are some others, can't recall the name. There is a Russian version,
>> called abcpascal or something similar.
>>
>> They all implement "object pascal", as defined by Delphi.
>
> This is something I don't understand. Why should all these
> environments and we, as Free Pascal/Lazarus users, follow Delphi's
> standards?
>
> Don't get me wrong. I've been working with Delphi for over 25 years
> and with FPC for 6 or 7 years. My career is based on Object Pascal.
> So, I too am interested in keeping the language relevant... but why
> follow Delphi? Why does FPC/Lazarus need to maintain this
> compatibility? Why does FPC/Lazarus need to follow the trends
> (erroneous, in my opinion) of Delphi or any other language?

Because it means we can reuse code written for Delphi.

Not only components on github/gitlab, but entire projects.

At my current job I'm converting a Delphi application to WebAssembly.
FPC has (meanwhile very good) support for webassembly. 
Delphi does not have it.

Due to the good compatibility, the same codebase can be used to create a
desktop/mobile application that runs in the browser.

If we didn't have it, this project would be impossible.

> Object Pascal is, in my opinion, one of the best programming languages
> ever created—if not the best. It is easy to understand and write; you
> can implement anything with it, from an operating system to visual
> applications for end-users.

No argument.

> Its structural organization is one of the
> things that sets it apart from other languages, where everything has
> its proper place to be declared... well, that used to be the case.
> Now, variables can be declared "anywhere"; "anonymous procedures" now
> exist and can also be declared "anywhere"; we have Generics because,
> well, Delphi and other languages have them, so we must have them too,
> right?

Depending on your goals, yes.

> Wrong!
>
> In my humble opinion, what keeps a language/environment/architecture
> relevant is how it deals with the world's innovations. It's not about
> adding new features to the language but adding new layers to address
> current problems.

That is what I am doing. All my work for FPC is geared towards a single
goal:

Whatever your project, FPC can do realize it.

Desktop. Server. Browser. Embedded Device: FPC has what you need.

>
> Let me explain: think about all these new features that have been
> added to the language and tell me what (most of them) allow us to
> build now that we couldn't build before. Most people still use the
> language to create the same kinds of systems. Does that make the
> language obsolete? Not if it can still create systems that are usable
> today! If it has performance, is easy to write, and is maintainable...

I agree.

I don't use these new features, or only very sporadically.

>
> So instead of "wasting time" implementing things Delphi did or what
> another language did, we could use that time to make everything
> simpler in the "FPC + Lazarus ecosystem" and forge our own path
> instead of following "false leaders" who are, in fact, just a slightly
> larger niche than FPC/Lazarus itself.

I have no idea how big the Delphi community is. 
It's a secret only known to Embarcadero, and they're not talking.

Do you know how big (or small) FPC/Lazarus is ?

I have no idea. I of course hope it is big.

>
> How about:
>
> - finally unifying FPC and Lazarus, whether on the FPC website, the
> Lazarus website, or a new one;
> using fpcupdeluxe as the official installation method;
> cross-compilation is very important, and most people using Lazarus for
> real-world applications use fpcupdeluxe to install Lazarus;

How do you know this ? On what do you base this statement ?

Again, I have no idea.

> - having pas2js pre-configured for creating web applications;

What is missing ? It is present in current lazarus ?

> - having an option to create mobile applications; we know it's
> possible (Castle does it), but nobody knows how to do it with a
> standard Lazarus setup; mobile is current, and we need that!

We're working on improving the support for mobile.

> - simplifying/deleting most of the libraries that are not used by default;

Such as ?

> - simplifying the naming conventions of units; using something like
> "lazarus.blablabla" and "fpc.blablabla" and leaving the main system
> units with names without prefixes;

No. I think prefixes are actually a good idea. 
Initially, I also didn't like them. 
But I have changed my opinion.

In projects with lots of units (roughly 27.000 in my job project) 
they are actually useful to structure the code.

> - do you want to add new features to the language? Then why not "fix"
> the WITH statement by adding something like [WITH someobject AS obj
> DO], so we can use WITH without the problems we all know;

Actually, it has been implemented.

https://gitlab.com/freepascal.org/fpc/source/-/merge_requests/860

It needs some attention, but basically it is ready.

> - how about allowing the same AS in unit declarations so we can do
> something like [unit MyUnitWithABigName AS MyUnit] and then use
> [MyUnit.TSomeClass] — this can already be done with MACROS, so it
> would be simple to implement in the language, right?

Basically, more syntactic sugar ?

You can do this today.

uses MyUnitWithABigName;

Type
   TSomeClass = MyUnitWithABigName.TSomeClass;

> Notice that all these new features would NOT break the "philosophy of
> the language," unlike what has been added over the years.

As most people on the lists know, my concern for the "philosophy of
the language" is big. I make no secret of it.

But Delphi compatibility is a must-have. If there are things in Delphi we
don't like, we can implement it, but forbid the use in the FPC code base.
Such as inline variables - I agree this has no place in well-written pascal
code.

Michael.


More information about the fpc-pascal mailing list