top | item 40086552

(no title)

rankam | 1 year ago

Does this mean that, theoretically, this could lead to the ability to build MacOS apps in higher languages that interoperate well with C such as Python? I know you can build MacOS apps with Python now, but does this potentially improve the experience?

discuss

order

flohofwoe|1 year ago

You can already do this in the traditional way by building an ObjC shim which exposes a C API. The solution shown here just skips ObjC and talks directly to the ObjC runtime (which has a C API but is not as convenient to use as doing the same thing in ObjC or Swift).

In a highly simplified way you can think of Objective-C as preprocessor which replaces the ObjC syntax sugar with C function calls into the ObjC runtime (it's not how it works in reality, but how it could work).

jackjeff|1 year ago

That’s essentially what this project does. It creates the C code that the ObjC compiler would generate to “implement methods” or “send messages”.

It’s somewhat doable by hand because Objc is a thin lawyer.

Over 15 years ago I did stuff similar to this project to call some Objc code from a C++ app. Most of it was exposed to normal C APIs but one feature only available in AppKit. It was much simpler to do it this way than figure out how to make GCC or Objc like our C++ or any mess with bridging headers.

I think the move to Swift has made that harder in some ways.

But then again I don’t want to write C or C++ these days if I can avoid it.

gwking|1 year ago

In fact, early objective-c was a preprocessor according to Wikipedia!

jimbokun|1 year ago

I believe RubyMotion does basically this:

http://www.rubymotion.com

It was fun building an app in this a few years ago, but was difficult to keep up with updates to MacOS breaking my code.

CodeWriter23|1 year ago

There’s already PyCocoa and pretty sure *Cocoa exists for a variety of languages.