MULLE_OBJC_UNIVERSE_CALL_BORING_TRACE_BIT
used to be calledMULLE_OBJC_UNIVERSE_CALL_SKIP_BORING_TRACE_BIT
and had inverted semantics- most
call
functions have internally been rewritten to make it easier with a C debugger to step over the boring parts to get into the Objective-C method quicker. You just step over the imp resolution part - two new environment variables
MULLE_OBJC_TRACE_LEAK
andMULLE_OBJC_TRACE_ZOMBIE
greatly simplify two common debugging tasks and make the mulle-sde test output less daunting
feat: improve method search and TAO support
-
Add TAO (Thread Affine Objects) support to improve thread safety
- Add atomic thread pointer in object header
- Add checks to ensure objects are accessed from owning thread
- Update method calls to support TAO validation
-
Refactor method lookup and caching
- Rename methodcache to impcache for clarity
- Add callbacks to impcache for better extensibility
- Improve method search tracing
- Clean up lookup and refresh functions
-
Enhance protocol class handling
- Run +initialize on adopting classes and subclasses
- Support +deinitialize for protocol classes
- Fix meta rootclass protocol class wrapping
-
Other improvements
- Add support for double/float tagged pointers
- Add noautorelease property attribute
- Add dynamic property storage for categories
- Remove -release/-retain from fast methods
- Fix 32-bit system compatibility
-
the chained calls are history now as
mulle_objc_class_search
has been updated with a callback. This avoids code duplicated in the chained calls and future problems with having to maintain the same logic twice -
fix +initialize calls for some border cases
-
search arguments are no longer set up with
init
functions but withmake
functions -
the TAO thread pointer in the object header is now atomic
-
change in
mulle_objc_object_get_property_value
where now astrategy
value is passed as an int, containing multiple bits (like atomicity) -
the impcache gained a lot of callbacks, and the Objective-C methods were changed to use them. The callbacks were also renamed to make them a bit more telling
-
protocolclasses
+inititalize
is now run on each adopting class and subclass (this is freaky and useful) -
slightly improved method search traces
-
-release and -retain are no long fast methods, since they are usually inlined anyway this frees up two slots that are put to other use
-
new
for
functions for methodlists, propertylists etc. (still experimental) -
functions that use method calls (like
mulle_objc_object_call_dealloc
now) -
add support for the
noautorelease
@property attribute -
add support for double and float TPS
-
fix problems with 32 bit systems
-
improved method calls
-
renamed
mulle_objc_object_call_variablemethodid_inline
tomulle_objc_object_call_variable_inline
-
renamed
mulle_objc_object_supercall
tomulle_objc_object_call_super
-
+deinitialize
now also calls protocol classes+deinitialize
for tidier cleanup -
fix that meta rootclasses wrap around to root infraclass again, even if there are protocolclasses
-
+method calls also wrap arounf to -methods on protocolclasses attached to the root class
-
NSObject now inherits the most "hardcore" runtime functionality from MulleObjCRuntimeObject
-
new base class MulleObject enables @dynamic @property storage for categories (and all others)
-
nicer output of compilation flags in loadinfo
-
struct
mulle_objc_typeinfo`` no longer restricts instance variable arrays to 16 bit -
added pre-alpha
_mulle_objc_ivarsignature_is_compatible
for the benefit of MulleObject -
BREAKING total cleanup of the various lookup and refresh functions, too many to mention
-
TAO (thread affine objects) added. Your multi-threaded code will now bail, if a method accesses an instance that is living in a different thread
-
the methodcache of a class has been renamed to an impcache, because that's what its really caching
-
you can now specify that a class should NOT search through its own (non-category) methods with
MULLE_OBJC_CLASS_DONT_INHERIT_CLASS
you can also specify to keep the search scope instead of using the superclass inheritance withMULLE_OBJC_CLASS_DONT_INHERIT_INHERITANCE
-
redid the method calls to support TAO and improved tracing.
mulle_objc_implementation_invoke
should now always be used instead of just(*imp)( self,
_cmd,void *
maybe) -
changed informational cache statistics code
-
BREAKING protocolclasses +initialize will be called by the adopting class now, it will NOT be called for the protocolclass itself (this is needed to support MulleObjCThreadSafe +initialize to set a bit on the class)
-
renamed almost all lookup methods, changed some of the calls (there maybe temporary performance degradation) until this gets benchmarked again
-
renamed methodcache to impcache, because that's what it is (it maps uniqueids to imps, not methods)
-
TAO mode (thread affine objects) added
-
reorganized mulle-objc-methodcache code, so that it can be used outside of classes
-
the compiler now emits an origin in the loadinfo, which makes tracking loadinfo problems easier
- fix endless recursion in to hither unused function
mulle_objc_universeid_is_sane
- fix an assert in class-search, that curiously was never triggered
- changed a lot of printf formats so that they also should work on 16 bit systems
- changed the bits field in
_mulle_objc_descriptor
fromint
touint32_t
(for the future benefit of 16 bit systems) - rename method signature methods from
_signature_
to_methodsignature_
- added
_mulle_objc_ivarsignature_compare
- you can now mark classes as being boring allocations (e.g. NSAutoreleasePool)
MULLE_OBJC_CLASS_IS_BORING_ALLOCATION
as to not show up inMULLE_OBJC_TRACE_INSTANCE,
except when set to 2 - allow instance reuse on a global or infraclass level
- improved trace output
- csv dumping is back in the runtime (from debug) for profile output
- added
_mulle_objc_type_is_equal_to_type
function - improved coverage support
- metaabi struct renamed to union, because.. it is a union
- rename some metaabi macros to show if it matches a type or an expression or both
- rename some public
__
functions - fix bug in
_mulle_objc_class_lookup_implementation_mode
- fix bug in
_mulle_objc_class_lookup_implementation_mode
This bugfix may make lookup functions slower, so regular execution should not be affected. Those lookups which are now slower can be easily fixed though. Just complain :)
- fix
mulle_objc_signature_supply_typeinfo
to not suppress supplier - fix runtime initializing classes on shutdown needlessly
- rename
_mulle_objc_searcharguments_superinit
and its ilk to_mulle_objc_searcharguments_init_super
for consistency with other functions - change GLOBALs for Windows
- rename
_mulle_objc_object_cacheonlylookup_implementation
to_mulle_objc_object_lookup_implementation_cacheonly
- moved debug support out into mulle-objc-debug, which reduces the size of the runtime proper by 25%
- redid method call functions
- changed class header ivar order, removed some unused ivars
- some code refactorings
- slow -release support when you need to suppress inlined retain counts and maintain your own
- main thread may now wait on background threads before exit, if desired
- instance meta header (retaincount, isa) is not fixed size anymore
- added
mulle_objc_symbolizer_done
- rename runtime functions, e.g.
_mulle_objc_object_partialinlinesupercall
tomulle_objc_object_supercall_inline_partial
for consistency - moved hash code shared by other projects to mulle-data
- reorder parameters of
mulle_objc_class_trace_call
for consistency - give instantiate its own placeholder, this makes +object work with classclusters as well
- add
mulle_objc_searchresult_get_categoryid
andmulle_objc_searchresult_get_classid
- add
mulle_objc_universe_lookup_infraclass
for consistency - graphviz methodlists are now sorted
- you can now use to dump the class hierarchy for a specific infraclass or metaclass
- renamed
_mulle_objc_signature_pedantic_compare
to
_mulle_objc_signature_compareand
_mulle_objc_signature_compareto
_mulle_objc_signature_compare_lenient.
The pedantic compare is now also the default (as its faster) - there is now a map that lists selectors for which selectors with varying types exist. Use
_mulle_objc_universe_lookup_varyingsignaturedescriptor
to query it mulle_objc_metabi
is nowmulle_metaabi_
possibly to be moved outside of mulle-objc-runtime in the future.- there is now a metaabi reader and a metaabi writer to support interpreters
- replace
object
forinstantiate
in the fastmethods table - foundation allocator is now a pointer, which is more convenient
- reorganized some structs to support mulle-gdb easier
- now has some special case test ouputs for i686
- improved signature comparison, now ignores return value by default
- new mulle-sde project structure
- experimental stackdepth indent for method trace (not that satisfactory, but occasionally useful)
- up the version to 0.17, load version stays at 16
- redid class +initialize code, it now uses a per-classpair mutex for simplicity
- renamed some
_mulle_objc_object_...
functions to_mulle_objc_instance_
when it is clear, that object can't be a class - improved trace capabilities for threaded mulle-objc code
- redid +initialize, instead of using implicit locks with atomic bits and
thread_yield
now a per-class mutex is used - clarified the signature offset to be only useful for invocations
- The initializing code, now puts caches on infra an meta classes immediately
- added signature enumeration, clarified that offsets are for NSInvocation only
- added
MULLE_OBJC_TRACE_THREAD
- threadinfo now has destructors or foundation and userspace
- reduced
S_MULLE_OBJC_UNIVERSE_FOUNDATION_SPACE
to 512 but added some userspace to universe - support for dynamic properties added (auto-create selectors for getter,setter,adder,remover)
- improved method family bits to discern accessors from regular methods
- add
_mulle_objc_object_is_finalized
method _C_BOOL
is now used to serialize BOOL (not! ``_Bool)
- type modifiers like
_C_CONST
or_C_INOUT
are no longer encoded/decoed in mulle-objc - runtime may wait for non-main threads to complete before exiting
- which is not just beneficial for tests, but makes thread writing much easier
- preserve errno over method calls (inluding +initialize)
- fix
debug.warn.stuck_loadable
which is executed too late in the universe teardown
- start of special gdb support
- fix
MULLE_OBJC_COVERAGE
cache fill bug - remove retain/release from fastcalls (superflous)
- use mulle-atinit und mulle-atexit now
- support new mulle-clang 9.0 property attributes "container" and "observable"
- improved universe crunch, will now notify classes with willfinalize
- method search can now search for a specific IMP
- category names are now (properly) available via methodlists and API
- classes gain the +finalize method (and +willFinalize)
- fix a KVC bug
- startup code has been moved to its own library mulle-objc-runtime-startup
MULLE_OBJC_TRACE_LOAD_CALL
is no more, its part ofMULLE_OBJC_TRACE_DEPENDENCY
mulle_objc_..._current_thread
functions and related are now namedmulle_objc_thread_...
- improved symbolification of stacktrace
- messed up the version number in 0.15.1
- improved find_library code for mulle-atexit
- fix RPATH for executables on OS X
- avoid setting errno during messages
- improved support for lldb
- the debughashname is now hashstring and its always loaded
- make loadclass accessible from classpair, makes origin superflous
- Inherit inheritance from superclass
- modernized mulle-sde with .mulle folder
- for release 7.0.0.0 of the mulle-clang compiler
- the mulle-objc runtime can now handle multiple universes
- most if not all of the runtime convenience functions had to be purged or renamed
- the threadlocal runtime is gone, superseded by universes with names
- there is now a clean distinction between ObjC exceptions and runtime errors called fails
- the compiler now needs to emit universeids to properly lookup classes
- for class lookups inside a method, there should be a considerable speedup
- improved universe trace facility
- moved debug conveniences to MulleObjC
- RENAMED: too many methods to list
- did some work on the big bang, for MulleObjC benefit
- use new verbs threadset and threadget and rename some functions
- add minimal.h for MulleObjC C includes
- BREAKING: renamed
_mulle_objc_universe_get_allocator
to_mulle_objc_universe_get_foundation_allocator
- RENAMED:
mulle_objc_inlined_get_universe
tomulle_objc_inlineget_universe
- RENAMED:
_mulle_objc_cachepivot_atomic_get_cache
to_mulle_objc_cachepivot_atomicget_cache
- RENAMED:
mulle_objc_object_copy
tomulle_objc_object_call_copy
- RENAMED:
mulle_objc_object_autorelease
tomulle_objc_object_call_autorelease
- RENAMED:
mulle_objc_object_copy
tomulle_objc_object_call_copy
- ADDED:
mulle_objc_invalidate_class_caches
- BREAKING:
mulle_objc_infraclass_alloc_instance
now has no allocator parameter, use__mulle_objc_infraclass_alloc_instance
if you must - ADDED:
_mulle_objc_class_lookup_method
to search in a class without recursion for a method - ADDED:
_mulle_objc_infraclass_get_allocator
- BREAKING: Load version set to 13, as the ivar order in methods changed
- ADDED:
_mulle_objc_instance_get_allocator,
get the allocator of the class - signature is now aware of function pointers and blocks
- BREAKING:
mulle_objc_signature_next_type
will now always return NULL if there is no next type, and not an empty string. - mulle-objc-uniqueid can now deal with multiple arguments and can output CSV
- changes for mulle-lldb 6.0.0.5
- improve trace output for methods
- fix mingw, update sde
- fix DEBUGGING.md variable names
- moved compiler test-suite back from MulleObjC
- migrated to mulle-sde
- for release 6.0.0 of the mulle-clang compiler
- _MULLE_OBJC_CLASS_HAS_CLEARABLE_PROPERTY replaces _MULLE_OBJC_CLASS_HAS_RELEASABLE_PROPERTY
- _mulle_objc_object_infiniteretain_noatomic replaces _mulle_objc_object_nonatomic_infinite_retain
- Adapt runtime to MULLE_OBJC_FCS to compile without fast methods
- adapt search so that we a root class inheriting from protocolclasses, also inherits the infraclass methods from the first protocolclass
- adapted call functions to the new way of calling super, where the classid of the calling class is passed (no longer the superclassid)
- add MULLE_OBJC_CLASS_HAS_RELEASABLE_PROPERTY bit for the sake of benchmarking
- add searchcache functionality to the runtime
- added _mulle_objc_signature_skip_extendedtypeinfo
- expect propertyclasses now in declaration order from compiler
- fixes for windows
- follow mulle-configuration 3.1 changes and move .travis.yml to trusty
- improve contents of signature typeinfo
- improve dotdump method cache
- improve superfunctions some more by inlining first stage also. Put everything into the methodcache
- increase fast class cache size to 64
- load version 12
- mingw fixes and hacks
- MULLE_OBJC_PRINT_RUNTIME_CONFIG renamed to MULLE_OBJC_PRINT_UNIVERSE_CONFIG
- new super call with its own cache
- property gains an ivarid
- reduce initial method cache size to 4
- rename _mulle_objc_uniqueid_is_sane to mulle_objc_uniqueid_is_sane
- super struct now gains the selector name for introspection. The selector is now compatible to @selector
- support newer mulle-tests
- up the load version, because of function renaming
- use a tuned fnv1a hash for better cache utilization
- follow mulle-configuration 3.1 changes and move .travis.yml to trusty
- fixes for windows
- mingw fixes and hacks
- use a tuned fnv1a hash for better cache utilization
- improve dotdump method cache
- improve contents of signature typeinfo
- reduce initial method cache size to 4
- increase fast class cache size to 64
- add MULLE_OBJC_CLASS_HAS_RELEASABLE_PROPERTY bit for the sake of benchmarking
- improve superfunctions some more by inlining first stage also. Put everything into the methodcache
- super struct now gains the selector name for introspection. The selector is now compatible to @selector
- Adapt runtime to MULLE_OBJC_FCS to compile without fast methods
- expect propertyclasses now in declaration order from compiler
- adapt search so that a root class inheriting from protocolclasses, also inherits the infraclass methods from the first protocolclass
- adapted call functions to the new way of calling super, where the classid of the calling class is passed (no longer the superclassid)
- add searchcache functionality to the runtime
- up the load version, because of function renaming
Shortened mulle_objc_methoddescriptor_t
to mulle_objc_descriptor_t
Shortened mulle_objc_methodimplementation_t
to mulle_objc_implementation_t
Added new struct _mulle_objc_super
to support even faster and better super
calls (and overridden calls in the future)
Renamed a lot of functions to make them easier to understand what they do.
Went a bit nuts on verbing stuff, instead of using underscores. So for instance
all _get_or_lookup
functions are now called fastlookup
.
Finally got around to a renaming. The runtime library is now, mulle-objc-runtime and it's header is mulle-objc-runtime.h. I renamed the struct mulle-objc-runtime to mulle-objc-universe. Though that's confusing in the short term, I am not a big fan of overloaded definitions.
This has the benefit of freeing up the <mulle_objc/mulle_objc.h> header, that should be part of MulleObjC.
__MULLE_OBJC_TRT__
will be renamed to __MULLE_OBJC_TLU__
in 1.0
It should now be possible to initialize a global universe from multiple threads. It should not be necessary to set the global universe up from a single thread, before starting other threads.
Only use mulle_objc_global_register_universe
during loading. Makes it easier.
Also distribute mulle-objc-uniqueid.
Changed the coverage format to be compatible with mulle-objc-list. Use a more all encompassing form of coverage check using a descriptor bit.
Initialize the cache now before +initialize. To be able to affect the cache
size (and possible other stuff) there is a new callback in the universe
will_init_cache
. The +initialize code has been reworked, so that superclass
+initializes are now guaranteed to be called before the subclass.
Made it a "C" cmake project
- modernize to mulle-configuration 2.0.0
- modernize CMakeDependencies.txt and CMakeLists.txt
- better MULLE_OBJC_TRACE_UNIVERSE output
- will_dealloc callback for universe deconstruction
- modernize project, beautify and fix dotdump a little
- Community release
- enlarged class state bit space for mulle-objc to 16 bits, which cramps user and foundation to 8 bits each
- added cache csv dump fo future shenanigans
- introduced the _mulle_objc_protocol structure, which is now emitted by the compiler. It's sole use is to detect hash collisions on protocolids, as unlikely they maybe
- also there is now a central table for categories, also just to check for collisions
- improved the search speed of conformsToProtocol:
- upped the LOAD version to 8
- renamed size_of functions to sizeof as its more c like
- renamed has_category/has_protocol and related functions to has_categoryid/has_protocolid, because it is less confusing
- removed misleading mulle_objc_describe_ivarid and friends (use class to get the names)
This version has changes mostly to the benefit of the mulle-lldb debugger
- moved some more call functions into "...call.c" (duh)
- moved version and new "path" up for easier debugging and easier version checks its kinda useful if version is at a fixed offset
__get_or_create_objc_runtime
has been renamed to__register_mulle_objc_universe
for clarity in the debugger and multi-universe code.- moved forward into a fixed position in the class structure for a future debugger
- the forward function is now fixed to be named as
__forward_mulle_objc_object_call
as a benefit to the debugger. Let's put it this way, you can still forward on a per class basis, but the debugger won't pick up on it. Which isn't a problem just not as gainly looking in the stacktrace'
- coverage file "append" to existing coverage files (seems more useful)
- added short-name dump routines to dump to working directory
- added _mulle_objc_searchresult to _mulle_objc_class_search_method, so one can find the location a method is stored
- shortened the names of the dump sources
- renamed various "get_id" functions to get_id" for consistency
- added coverage csv dumpers for future optimization benefits
- renamed ..._CACHE_INITIALIZED to ..._CACHE_READY, because it confused me
- when doing a dotdump of everything, don't write out each class filename
- improved protocol class detection, so now protocolclasses can conform to protocols (as long as they aren't protocolclasses)
- added MULLE_OBJC_TRACE_DEPENDENCIES
- added MULLE_OBJC_TRACE_STATE_BIT
- +classDependencies and +categoryDependencies don't exist anymore. They are
replaced by +dependencies, which combines them. To specify a dependency on
a class do
{ @selector( Class), 0 }
, on a category do{ @selector( Class), @selector( Category) }
+ (struct _mulle_objc_dependency *) dependencies
- this universe needs the mulle-clang compiler, based on clang 4.0.0
- significantly improved the graphviz and html dumper to be more useable for bigger universe environments.
- this universe needs the mulle-clang compiler, based on clang 4.0.0
- the universe load structures now have their own independent versioning called MULLE_OBJC_RUNTIME_LOAD_VERSION
- the class now contains a list of categoryids, which can be queried at universe
- the class loader will check if a class implements +classDependencies, this allows proper sequenced +loads of classes. the category loader will check if a category implements +categoryDependencies. this allows proper sequenced +loads of categories and their order in the methodlists. To make this really happen though, the loading of classes and categories had to be serialized with lock!
- Renamed
mulle_vararg_count_objects
andmulle_vararg_next_object
tomulle_vararg_count_ids
andmulle_vararg_next_id
.mulle_vararg_next_object
now resides in MulleObjC. - new trace flag
MULLE_OBJC_TRACE_LOAD_CALLS
traces+load
,+initialize
and+categoryDependencies
calls. - With mulle_objc_check_runtimewaitqueues you can see if clases or categories are "stuck" waiting for dependencies
mulle_objc_object_get_retaincount
now returns a human readable number. Ask the header for the raw value (if its not a tagged pointer)
It is preferred to set the environment variables with "YES" or "NO" now.
Usually you rather undefined an environment variable, then set it to "NO"
Variable | Description |
---|---|
MULLE_OBJC_TRACE_LOADINFO |
more detailed output of the loadinfo |
MULLE_OBJC_TRACE_CATEGORY_ADDS |
trace universe category additions |
MULLE_OBJC_TRACE_PROTOCOL_ADDS |
trace universe protocol additions |
MULLE_OBJC_WARN_STUCK_LOADABLES |
replaces ..._WARN_NOTLOADED_CLASSES and .._CATEGORIES |
- renamed
MULLE_OBJC_HAVE_THREAD_LOCAL_RUNTIME
to__MULLE_OBJC_TRT__
and added compiler support for it - added
__MULLE_OBJC_NO_TRT__
,__MULLE_OBJC_NO_TPS__
,__MULLE_OBJC_NO_AAM__
, this helps to find problems, when mulle-objc code is compiled with a C compiler only - renamed
mulle_objc_object_get_taggedpointerindex
tomulle_objc_object_get_taggedpointerindex
- new trace flag
MULLE_OBJC_TRACE_RUNTIME_CONFIG
CMakeLists.txt
sets__MULLE_OBJC_TPS__
and__MULLE_OBJC_NO_TRT__
by default. Since the universe is built by the standard host compiler, this matches the current default of the mulle-clang compiler- improved and more lenient thread local compatibility check on load
- the pass-through for foundation code w/o version has been removed
MULLE_OBJC_USER_VERSION_MAJOR
and friends shortened toUSER_VERSION_MAJOR
MULLE_OBJC_FOUNDATION_VERSION_MAJOR
and friends shortened toFOUNDATION_VERSION_MAJOR
mulle_vararg_next_id
is the oldmulle_vararg_next_object
.mulle_vararg_next_object
now accepts a type.
- improved super calls
- add support for char5-encoding check
- rename some load struct fields
- dependency check on "class" protocolids added
- renamed MULLE_OBJC_HAVE_THREAD_LOCAL_RUNTIME to MULLE_OBJC_THREAD_LOCAL_RUNTIME
- universe checks for mismatch between global and thread local universe code
- Merge in community version changes
- Compile fix for linux / gcc
- Improve documentation
Community Release
Merciful Release