Cool! One thing Swift is really (maybe uniquely?) strong at is C/C++/Objective-C interop, including mixing "legacy" code with Swift and even replacing it file-by-file with minimal ceremony. Looks like this is aiming to bring a similar level of interop to Swift<->Java.
The reasoning being different though, back then Apple wasn't sure Objective-C would take off among Mac OS developer crowd, used to Object Pascal and C++, Java support and its high integration with OS APIs was a kind of Plan B.
Objective-C was actually embraced by the community, only Java heads cared about the bridge, and it was eventually killed.
I feel it was a lost opportunity, but what do I know.
This gives me flashbacks to the Objective-C / Java bridge [1] from over a decade ago. It makes me wonder how they are dealing with memory management when Java objects are being used from Swift (or Swift objects from Java). This was one (of various) issues that made using the Cocoa Java bridge a bit unpleasant.
I guess Swift has a lot less run-time dynamism going on, so it may not be too hard to translate Swift semantics to Java. Definitely interested to see how this unfolds over the next year.
> It makes me wonder how they are dealing with memory management when Java objects are being used from Swift
It uses Swift macros to add a `JavaObjectHolder` property to Swift types annotated with `@JavaClass`[0]. `JavaObjectHolder` is a Swift class that takes a global JNI reference to the Java object, and releases it when the holder is destroyed[1].
The result is that a codegen utility emits Swift structs[2] that wrap the JNI values, and the JNI glue code for method invocation is applied at compile-time when the macros are expanded.
If Swift were practical to use for Android app development, I would absolutely do so. I enjoy writing Swift more than I do Kotlin by a good measure and not having to wrestle with gradle and proguard would be a nice bonus.
This would happen in about five minutes if a SwiftUI port was included.
Which ironically would be just like Flutter, totally bypassing any native UI.
My gut feeling is both teams probably have a plan for steamrollering the other in the event of anti monopoly measures forcing each to accept the other store. I.e. it is conceivable you could launch the Play Store on iOS and run a significant proportion of Android apps through a compat layer.
They have gone hard on Kotlin. Very hard. For example, in all of Spring/Boot's documentation, you will find Java and Kotlin examples, but not other JVM languages.
This sounds useful. Here are links that actually load on my phone.
- https://github.com/swiftlang/swift-java
- https://forums.swift.org/t/improving-swift-support-and-inter...
Cool! One thing Swift is really (maybe uniquely?) strong at is C/C++/Objective-C interop, including mixing "legacy" code with Swift and even replacing it file-by-file with minimal ceremony. Looks like this is aiming to bring a similar level of interop to Swift<->Java.
Plus ça change: https://developer.apple.com/library/archive/documentation/Co...
The reasoning being different though, back then Apple wasn't sure Objective-C would take off among Mac OS developer crowd, used to Object Pascal and C++, Java support and its high integration with OS APIs was a kind of Plan B.
Objective-C was actually embraced by the community, only Java heads cared about the bridge, and it was eventually killed.
I feel it was a lost opportunity, but what do I know.
PythonKit (from Swift) is underrated but immensely useful in certain scenarios (i.e.: https://engineering.drawthings.ai/from-iphone-ipad-to-mac-en...).
Hopefully JavaKit can find their usefulness too!
This gives me flashbacks to the Objective-C / Java bridge [1] from over a decade ago. It makes me wonder how they are dealing with memory management when Java objects are being used from Swift (or Swift objects from Java). This was one (of various) issues that made using the Cocoa Java bridge a bit unpleasant.
I guess Swift has a lot less run-time dynamism going on, so it may not be too hard to translate Swift semantics to Java. Definitely interested to see how this unfolds over the next year.
[1] https://developer.apple.com/library/archive/documentation/Co...
> It makes me wonder how they are dealing with memory management when Java objects are being used from Swift
It uses Swift macros to add a `JavaObjectHolder` property to Swift types annotated with `@JavaClass`[0]. `JavaObjectHolder` is a Swift class that takes a global JNI reference to the Java object, and releases it when the holder is destroyed[1].
The result is that a codegen utility emits Swift structs[2] that wrap the JNI values, and the JNI glue code for method invocation is applied at compile-time when the macros are expanded.
[0] https://github.com/swiftlang/swift-java/blob/e7d7a217e37d49b...
[1] https://github.com/swiftlang/swift-java/blob/main/Sources/Ja...
[2] https://github.com/swiftlang/swift-java/blob/main/Sources/Ja...
IIRC, the ObjC/Java bridge was first done at NeXT for WebObjects around 1996... almost thirty years ago!
Will be wildly ironic if Apple pulls uno reverse card and eats Kotlin on Android instead of the other way around.
If Swift were practical to use for Android app development, I would absolutely do so. I enjoy writing Swift more than I do Kotlin by a good measure and not having to wrestle with gradle and proguard would be a nice bonus.
This would happen in about five minutes if a SwiftUI port was included.
Which ironically would be just like Flutter, totally bypassing any native UI.
My gut feeling is both teams probably have a plan for steamrollering the other in the event of anti monopoly measures forcing each to accept the other store. I.e. it is conceivable you could launch the Play Store on iOS and run a significant proportion of Android apps through a compat layer.
Except contrary to iOS, on Android the C and C++ surface is very small, and calling JNI is a huge performance bottleneck.
Anyone that cares about performance on Android has to write the userspace logic directly in Java or Kotlin, and use Android IPC instead of JNI.
Outside of Apple's ecosystem, is anyone using Swift?
Kotlin is growing in all areas, especially backend (being fully embraced by Spring/Spring Boot et al).
Spring embraces all JVM languages that can bring them new customers.
They have gone hard on Kotlin. Very hard. For example, in all of Spring/Boot's documentation, you will find Java and Kotlin examples, but not other JVM languages.
I am old enough to remember when Groovy had similar treatment by Spring.
Because they’re most likely commercial partners with JetBrains.
Kotlin-Java interoperability is at a completely different level.
It will also be glorious
This [1] is a good place to start!
[1] https://github.com/finagolfin/swift-android-sdk
Oh, well that’s cool!
[flagged]