discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Improving GNUstep tooling with Clang


From: Frederik Seiffert
Subject: Improving GNUstep tooling with Clang
Date: Thu, 28 Nov 2019 17:15:32 +0100

Hi all,

In the wake of the recent discussions about GCC, Clang, and modern Objective-C 
features, I wanted to share some observations and propose some improvements.

As a recent newcomer to the GNUstep community, one of the things that made 
building GNUstep difficult was understanding the various configuration options 
and their implications and interdependencies, most notably the different 
"library combos" and libobjc2 runtime versions, which e.g. depend on the Clang 
version being used and affect which modern Objective-C language features are 
supported.

With 2 language combos (gnu and ng) and 3 runtime versions (gcc, 1.9, 2.0), 
this leaves Clang users with at least 5 different build variants, some of which 
significantly differ in their abilities. In contrast, if I understand it 
correctly GCC only supports one library combo and runtime. I could imagine that 
this might also play a role in many people sticking to GCC with its simplicity, 
and obviously it creates quite a large test surface that makes it more likely 
for bugs to go unnoticed.

Given the above I would like to propose improving and unifying the experience 
for Clang users with changes like the following:

- Define which library combo and runtime version is the recommended one for 
Clang users, and change the defaults in make/base to reflect that.
As far as I can see the current defaults are "gnu-gnu-gnu" with the gcc 
runtime; when the user selects the ng library combo the 1.8 runtime version is 
used. Changing the default runtime version is non-obvious or well documented 
and requires building make with a user config file containing e.g. 
"RUNTIME_VERSION=gnustep-2.0".
I would propose to change the default to "ng-gnu-gnu" and the 2.0 runtime 
version when a sufficiently recent Clang version (to be defined by David) and 
libobjc2 are detected.

- Set up CI testing for the 2.0 runtime version, which currently doesn’t seem 
to be tested with libs-base.
I have submitted a pull request for this 
(https://github.com/gnustep/libs-base/pull/88).

- If possible provide updated packages with the new recommended setup for the 
various distributions (if needed as a new major revision).

The above could unify Clang users with a common, better tested, and easier 
setup, and thus make it more straightforward to use modern Objective-C language 
features in own code with GNUstep. And maybe it will also allow more people to 
use and get acquainted with modern ObjC features like ARC, blocks, and 
generics. Coming from Mac/iOS development, I think you’ll have a hard time 
finding a developer there who doesn’t use and take these features for granted.

Note that none of this would break support for existing GCC setups. It would 
also not force anyone to e.g. adopt ARC, but it would allow anyone to easily 
enable it in their own projects by adding -fobjc-arc to their compiler flags 
(ARC and non-ARC can be easily mixed, so this also works if libs-base doesn’t 
use ARC).

As I said I’m fairly new to GNUstep so I’m likely missing some things, but 
maybe this could be part of a path forward from the recent discussions.

Thanks,
Frederik




reply via email to

[Prev in Thread] Current Thread [Next in Thread]