All Projects → mulle-objc → Mulle Objc Runtime

mulle-objc / Mulle Objc Runtime

Licence: other
⏩ A fast, portable Objective-C runtime written 100% in C11

Programming Languages

c
50402 projects - #5 most used programming language

Labels

Projects that are alternatives of or similar to Mulle Objc Runtime

Runtimepermission
Simpliest way to ask runtime permissions on Android, no need to extend class or override permissionResult method, choose your way : Kotlin / Coroutines / RxJava / Java7 / Java8
Stars: ✭ 860 (+855.56%)
Mutual labels:  runtime
Nexusjs
Nexus.js - The next-gen JavaScript platform
Stars: ✭ 1,073 (+1092.22%)
Mutual labels:  runtime
Hookmeifyoucan
Protection against cycript/runtime
Stars: ✭ 69 (-23.33%)
Mutual labels:  runtime
Kevoree
The Kevoree Java project
Stars: ✭ 37 (-58.89%)
Mutual labels:  runtime
Django Access
Django-Access - the application introducing dynamic evaluation-based instance-level (row-level) access rights control for Django
Stars: ✭ 47 (-47.78%)
Mutual labels:  runtime
Jsrt
javascript runtime ( JSRT ) project for windows , based on chakra
Stars: ✭ 55 (-38.89%)
Mutual labels:  runtime
Runtimemeshcomponent
Unreal Engine 4 plugin component for rendering runtime generated content.
Stars: ✭ 903 (+903.33%)
Mutual labels:  runtime
Client
An alternative Polkadot Runtime Environment implementation acting as a full-node (excluding block production for validators) for syncing with Substrate-based chains.
Stars: ✭ 82 (-8.89%)
Mutual labels:  runtime
C2goasm
C to Go Assembly
Stars: ✭ 1,072 (+1091.11%)
Mutual labels:  runtime
Harmonyx
Harmony built on top of MonoMod.RuntimeDetours with additional features
Stars: ✭ 69 (-23.33%)
Mutual labels:  runtime
Crun
A fast and lightweight fully featured OCI runtime and C library for running containers
Stars: ✭ 990 (+1000%)
Mutual labels:  runtime
Gsysint
Golang (as of 1.12.5) runtime internals that gives you an access to internal scheduling primitives. Park Gs, read IDs. (for learning purposes)
Stars: ✭ 44 (-51.11%)
Mutual labels:  runtime
Vcprofiler
An accurate and simple tool uses KVO to measure the time cost of every view controller.
Stars: ✭ 61 (-32.22%)
Mutual labels:  runtime
Mintype
🍵 minimal composable type abstraction
Stars: ✭ 12 (-86.67%)
Mutual labels:  runtime
Chakracore
ChakraCore is an open source Javascript engine with a C API.
Stars: ✭ 8,600 (+9455.56%)
Mutual labels:  runtime
Objectivekit
Swift-friendly API for a set of powerful Objective C runtime functions.
Stars: ✭ 847 (+841.11%)
Mutual labels:  runtime
Config
Yii2 application runtime configuration support
Stars: ✭ 54 (-40%)
Mutual labels:  runtime
Napajs
Napa.js: a multi-threaded JavaScript runtime
Stars: ✭ 8,945 (+9838.89%)
Mutual labels:  runtime
Arcgis Appstudio Samples
Collection of samples available in AppStudio for ArcGIS desktop to learn and help build your next app.
Stars: ✭ 78 (-13.33%)
Mutual labels:  runtime
Ts Node
TypeScript execution and REPL for node.js
Stars: ✭ 9,571 (+10534.44%)
Mutual labels:  runtime

mulle-objc-runtime

⏩ A fast, portable Objective-C runtime written 100% in C11

A portable Objective-C runtime written in C11. No Assembler required. It follows the Apple "Objective-C 1 Runtime" and adds many features from "Objective-C 2.0", but the runtime function calls are completely different. It is designed to be suitable for massive multi-threading.

Release Version
Mulle kybernetiK tag Build Status

What's so different ?

  • Runtime objects (like classes and selectors) are not referenced by name, but by a unique ID. No special linker action required.

  • Parameters outside of self and _cmd are passed via _param, a single pointer to a struct. This simplifies a lot of code, especially forwarding code. Return values are also returned with the same struct. Optimizations are done for simple methods with only none or one parameter and none or one return value.

  • It uses inlineable method calls for superior performance. The user can specify "fast" classes and "fast" methods for extra speed in performance critical cases.

  • retain/release semantics are built in. These are non-overridable, which makes them a lot faster.

  • isa is not part of the instance, but instead prefixed to the instance.

  • Protocol as a type and an object does not exist anymore. Instead there is PROTOCOL which is basically the same as SEL and has compiler support.

  • No global lock, except when loading code. The runtime in normal operation only locks during +initialize on a per class basis.

  • Protections against the fragile base class problem

  • Multiple runtimes can coexist in differently named "universes".

Required Libraries and Tools

Libraries and Tools

Name Release Version
mulle-aba Mulle kybernetiK tag Build Status
mulle-allocator Mulle kybernetiK tag Build Status
mulle-c11 Mulle kybernetiK tag Build Status
mulle-concurrent Mulle kybernetiK tag Build Status
mulle-thread Mulle kybernetiK tag Build Status
mulle-vararg Mulle kybernetiK tag Build Status

How to use it

If you haven't used an Objective-C runtime before, it is useful to get to know the much better documented "Mac OS X Objective-C 1.0" runtime first. Intro to the Objective-C Runtime could be a good starting point.

C Caveat

It you use .c files that include <mulle-objc-runtime/mulle-objc-runtime.h> make sure that you compile with __MULLE_OBJC_TPS__, __MULLE_OBJC_NO_TPS__ __MULLE_OBJC_FCS__ __MULLE_OBJC_NO_FCS__ as defined when compiling the runtime. Since C-only compilations do not emit runtime information, mismatches can not be checked by the runtime. Easy fix: rename .c to .m and use mulle-clang

Data structures

API Description
_mulle_objc_class Deal with Classes
_mulle_objc_ivar et al. Instance variables
_mulle_objc_loadinfo Install Classes, Categories, Methods, Strings into the runtime
_mulle_objc_method et al. Deal with Methods
_mulle_objc_object et al. Deal with Instances
_mulle_objc_property et al. Handle Properties
_mulle_objc_runtime Work with the runtime

Other functions

API Description
Global Functions Global functions and conveniences
Exceptions Raising exceptions
Vararg extensions Dealing with variable arguments

Articles

These articles give you some background about the mulle-objc runtime:

  1. mulle-objc: a new Objective-C runtime
  2. mulle-objc: a meta calling convention
  3. mulle-objc: removing superflous ifs
  4. mulle-objc: inlined messaging
  5. mulle-objc: some research about selectors
  6. mulle-objc: hashes for classes, selectors and protocols
  7. mulle_objc: object layout, retain counting, finalize
  8. mulle_objc: inheriting methods from protocols
  9. mulle_objc: present and absent language features
  10. mulle_objc: the trouble with @property
  11. mulle_objc: ivar layout with @property
  12. mulle_objc: technically speaking
  13. mulle-clang, technically speaking
  14. mulle-objc-runtime, technically speaking
  15. MulleFoundation, technically speaking

If something is unclear, feel free to contact the author.

Platforms and Compilers

All platforms and compilers supported by mulle-c11 and mulle-thread.

Add

Use mulle-sde to add mulle-objc-runtime to your project:

mulle-sde dependency add --c --github mulle-objc mulle-objc-runtime

Executables will need to link with mulle-objc-runtime-startup as well.

Install

See mulle-objc-developer for the preferred way to installation mulle-objc-runtime.

mulle-sde

Use mulle-sde to build and install mulle-objc-runtime and all dependencies:

mulle-sde install --prefix /usr/local \
   https://github.com/mulle-objc/mulle-objc-runtime/archive/latest.tar.gz

Manual Installation

Install the requirements:

Requirements Description
mulle-atinit Cross-platform atinit support
mulle-atexit Cross-platform atexitsupport
mulle-concurrent Concurrent hashmap and array
mulle-dlfcn Cross-platform dlfcn support
mulle-stacktrace Cross-platform stacktrace support
mulle-vararg Cross-platform atexit support

Install into /usr/local:

mkdir build 2> /dev/null
(
   cd build ;
   cmake -DCMAKE_INSTALL_PREFIX=/usr/local \
         -DCMAKE_PREFIX_PATH=/usr/local \
         -DCMAKE_BUILD_TYPE=Release .. ;
   make install
)

Author

Nat! for Mulle kybernetiK and Codeon GmbH

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].