New version: ObjectiveC v4.0.0#155243
Conversation
JuliaRegistrator
commented
May 12, 2026
- Registering package: ObjectiveC
- Repository: https://github.com/JuliaInterop/ObjectiveC.jl
- Created by: @maleadt
- Version: v4.0.0
- Commit: 806087a00c5a482e7e80affd5b151bd8ee67c326
- Reviewed by: @maleadt
- Reference: JuliaInterop/ObjectiveC.jl@806087a#commitcomment-185003030
- Description: Objective-C embedded in Julia
- Release notes:
UUID: e86c9b32-1129-44ac-8ea0-90d5bb39ded9 Repo: https://github.com/JuliaInterop/ObjectiveC.jl.git Tree: 5c6ea80558b987952ecdb2f0ae35497459c0b611 Registrator tree SHA: 50f504d641745716a5b3eabaf681d3a4937d2ae3
…#63) Today, `@objcwrapper Foo <: Bar` emits an abstract `Foo` plus a concrete `FooInstance`. Anything stored as a `Foo` (containers, struct fields, inferred return types) carries an abstract type, which boxes in `Vector{Foo}`, breaks inference through property chains, and triggers dynamic dispatch in profiles. With this change, each `@objcwrapper Foo <: Bar` now emits *two* parallel definitions: ```julia struct Foo <: Object # concrete leaf (storage) ptr::id{Foo} end abstract type FooKind <: BarKind end # parallel lattice (dispatch) classkind(::Type{Foo}) = FooKind ``` Crucially, the inheritance stays flat: every wrapper is `<: Object` directly so that `Vector{NSString}` is bits-packed and inference sees fixed types through property access. This of course breaks dispatch on "non-leaf" classes, for which we introduce a parallel Kind lattice used by `@objcmethod` methods: ```julia @objcmethod foo(obj::KindOf{Bar}) = ... ``` The macro `KindOf{T}` lowers to trait dispatch on `Type{<:classkind(T)}` plus a method that forwards from untyped `Object` inputs. Multiple sites on the same function compose naturally -- Julia's dispatch picks the most specific Kind at the call site -- and downstream wrappers automatically participate by virtue of `SubKind <: ParentKind`. When the static type is known at the call site (the common case), the entry-then-body chain folds at compile time, so the trait dispatch is often zero-cost. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Hello, I am an automated registration bot. I help manage the registration process by checking your registration against a set of AutoMerge guidelines. If all these guidelines are met, this pull request will be merged automatically, completing your registration. It is strongly recommended to follow the guidelines, since otherwise the pull request needs to be manually reviewed and merged by a human. 1. AutoMerge Guidelines are all met! ✅Your new version registration met all of the guidelines for auto-merging and is scheduled to be merged in the next round (~20 minutes). 2. To pause or stop registrationIf you want to prevent this pull request from being auto-merged, simply leave a comment. If you want to post a comment without blocking auto-merging, you must include the text Tip: You can edit blocking comments to add |