- The JVM interface to Python has been completely rewritten from scratch to share all of its logic with the Scala Native backend by binding directly to CPython with JNA. This means that moving forward, ScalaPy JVM and Native will always have the same features and use near-identical logic for talking to Python libraries
- Readers and Writers have been simplified to always work in terms of Python interpreter values, simplifying the implementation and reducing intermediate allocations
- The
CPythonInterpreter
object should now be used to access low-level interpreter functions instead ofpy.interpreter
- Various reference count manipulation bugs have been fixed to ensure that Python values are not being leaked
- Fix a segfault in Scala Native when the interpreter is initialized outside of a
py.local { ... }
block - Correctly handle reading a list-like object (such as a NumPy array) into a
Seq
- ScalaPy now has a website! Check it out at scalapy.dev
- The
py""
interpolator now makes it possible to interpret bits of Python code with references to Scala values
py.Any
is now the default type taken in and returned by operations- The apply method of
py.Object
to interpret abritrary strings has been replaced by theeval()
method. py.DynamicObject
has been renamed topy.Dynamic
to better match the Scala.js naming scheme- Casting to
DynamicObject
with.asInstanceOf[DynamicObject]
has been replaced by just calling.as[Dynamic]
- Facades are now declared as
@py.native trait MyFacade extends Object { ... }
instead of a class that extendsObjectFacade
(which has been removed)