All notable changes to this project will be documented in this file. This change log follows the conventions of keepachangelog.com.
1.0.486 - 2024-10-04
- Bug where one too many indirections is used when serializing/deserializing pointer types
1.0.472 - 2024-10-03
- New
coffi.mem/null
var for implementing custom types
- Upcall functions serialized from functions returned by deserializing function pointers now use the backing function pointer directly
- Upcall and downcall classes have been changed to be memoized, meaning ASM is no longer invoked every time a function is serialized, which should drastically improve performance where functions are serialized in a hot loop
- Incorrect docstring on
coffi.mem/address-of
that implied some type of pointer type was returned rather than a long - Usage of deprecated
(Class/STATIC_FIELD)
access pattern
1.0.450 - 2024-10-02
- Support for JDK 22
reinterpret
function which changes the size associated with a segment, optionally associating it with an arena and cleanup action
- Arglists and docstrings of functions to refer to arenas rather than the outdated terms scope or session
- Change the arguments to
as-segment
to take longs to account for the removal of an Address type
- Deprecated functions referring to sessions and scopes
- Deprecated functions
slice-into
andwith-offset
, replaced by the functionslice
- Prep step when using coffi as a dependency wouldn't re-run if it failed during execution, e.g. when using the incorrect java version
0.6.409 - 2023-03-31
- Support for JDK 19
- New macros for defining vars with values from native code
- New function to allow getting the backing memory segment of a
coffi.ffi.StaticVariable
, to replace theAddressable
implementation lost in the migration to JDK 18
- Bug where
static-variable
s with primitive types would not deserialize properly onderef
- Uses of
defvar
not compiling - Bug where nil values would not be correctly coerced to null pointers when passed to inlined functions
- Bug where inline serde functions would fail on complex pointer types
- Bug where padding in structs may be increased when fields have alignments less than their size
- Bug where pointer alignment was incorrectly defined
- References to
scope
as a term have been changed tosession
to match Panama messaging. Where this conflicts with function names, old versions have been deprecated and new names have been introduced.
0.5.357 - 2022-07-07
:coffi.mem/long-long
primitive typecoffi.mem/slice-into
; the function no longer has an equivalent in panama, but see 2-arity ofcoffi.mem/as-segment
for an alternative
coffi.mem/as-segment
no longer has a close action arity- JDK version from 17 to 18
0.4.341 - 2022-01-23
- Constants for size and alignment of primitive types
- Support for non-native byte orders of primitive types
- Functions for reading and writing primitive types (e.g.
coffi.mem/read-float
,coffi.mem/write-long
, etc.) - Layout objects may now be passed to
coffi.mem/size-of
andcoffi.mem/align-of
- Constants for native-order primitive layouts
- Constants for byte orders
- The
coffi.mem/primitive?
predicate is now actually a function instead of a set
0.3.298 - 2022-01-10
- New
coffi.layout
namespace with support for forcing C layout rules on structs
- C-characters were being read as UTF-16 rather than ASCII code points
0.2.277 - 2021-10-25
- Non-primitive arguments on upcalls would generate invalid bytecode with
nil
instructions
0.2.259 - 2021-10-16
- Long and double arguments to upcalls failed to compile in some cases
- Void return types on upcalls would crash on serialization
0.1.251 - 2021-10-14
- Bug with the inline expansion of
make-serde-wrapper
, make it more maintainable
0.1.246 - 2021-10-14
- Incorrect inline expansion of
make-serde-wrapper
in cases where a function has no arguments
0.1.241 - 2021-10-14
- Added an
:inline
function tomake-serde-wrapper
to remove serialization overhead on primitives - Added multimethod implementations for primitives in (de)serialization functions, rather than using the default
cfn
didn't add serializers with non-primitive types in some cases
0.1.220 - 2021-10-09
- All-primitive method types still used serialization when called from
cfn
- Arrays deserialized to non-vector sequences
- Non-primitive argument types fail to link
0.1.205 - 2021-10-06
- An
address?
predicate
- Compound types caused problems in arglists meta on expansion of
defcfn
- Compound types were not allowed as return types in
defcfn
nil
was not considered a null pointer- Primitive-serializing types fail to compile as arguments to downcall handles
- Primitive-serializing types fail to load as arguments to upcall functions
- Void return types on upcalls crash the JVM
- Invalid implementation of serialize-into for primitive types
0.1.192 - 2021-09-30
- An
::ffi/address
key to wrapper functions' metadata
- Usage of a method no longer in Panama that breaks
with-acquired
0.1.184 - 2021-09-30
- Deserializing nullpointers as functions threw an exception
- Upcall stubs with non-primitive arguments failed to compile
- Upcall stubs had incorrect types
0.1.176 - 2021-09-29
- Usage of
defcfn
without a docstring produced an invaliddef
form
0.1.169 - 2021-09-28
- Macro for easily wrapping native functions with arbitrary logic
- Functions for creating wrapper fns for native functions
- Macro for easily aliasing types
- Functions to create scopes for deterministic deallocation
- Functions to load libraries by name or path
- Support for serializing and deserializing arbitrary Clojure functions
- Support for serializing and deserializing arbitrary Clojure data structures