On 31 Jul 2017, at 20:43, Liam Proven <[email protected]> wrote:
> 
> GNUstep apps can _only_ be written in Objective-C?

Kind of.  They can only be written in a language that has good bridging to 
Objective-C[++].  All of the interfaces are exposed as Objective-C objects, but 
there are bridges that allow these to be used from (as far as I am aware):

 - Java (JIGS)
 - Ruby (RIGS)
 - Python (not sure if this has a name, but I think it’s now part of the 
upstream ObjC bridge).
 - Rust

And we have a GSoC student who is working on porting JavaScriptCore, which 
would give us a high-performance JavaScript bridge too (for some workloads, JSC 
will generate faster code than using ObjC).

The most under-appreciated language is probably Objective-C++.  C++11 or later 
is a good language for programming in the small, Objective-C for programming in 
the large, and the two compose surprisingly well.  I’ve recently been writing 
an OmniOutliner replacement[1] in Objective-C++, and finding that I can do a 
lot of things in about half as much code in Objective-C++ than in either 
Objective-C or C++ (for example, Objective-C’s for..in loops are restricted to 
collections that contain objects, but with a tiny adaptor you can use 
NSIndexSet or NSString in C++ range-based for loops).

> OK, if so... are there any other rival foundation classes for writing
> GUI apps in Objective-C on Linux?

There are five implementations of the Foundation framework that I know of:

 - GNUstep Base
 - Microsoft’s WinObjC, which uses a lot of code from Apple’s SwiftFoundation
 - libFoundation (I think this is dead now?)
 - Justin Hibbits’ implementation (lightweight, FreeBSD-only, very clean code, 
but largely unmaintained now).
 - Cocotron (upstream[2] seems to be dead - last commit 2 years ago, though 
there are some moderately active forks).

Of these, only GNUstep and Cocotron also provide an AppKit implementation.  
Microsoft’s WinObjC provides an incomplete UIKit implementation, though 
recently they’ve refocused on providing bridging for their own GUI framework, 
to make it possible to use the same core on Windows and iOS but have native 
GUIs for each.

David

[1] https://github.com/davidchisnall/OpenOutliner/
[2] https://github.com/cjwl/cocotron
_______________________________________________
Discuss-gnustep mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnustep

Reply via email to