forked from pythonnet/pythonnet
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchanges.txt
More file actions
400 lines (288 loc) · 18.3 KB
/
changes.txt
File metadata and controls
400 lines (288 loc) · 18.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
Python for .NET Changes
-----------------------
PythonNet 2.0 alpha 2
---------------------------------------------------------------------------
- First work on Python 2.5 compatibility. The destination version can be
set by defining PYTHON24 or PYTHON25. Python 2.6 compatibility is in
work. [tiran]
- Added VS 2005 solution and project files including a UnitTest
configuration which runs the unit test suite. [tiran]
- Enhanced unit test suite. All test cases are combined in a single
test suite now. [tiran]
- Fixed bugs in generics support for all Python versions. [tiran]
- Fixed exception bugs for Python 2.5+. When compiled for Python 2.5+ all
managed exceptions are based on Python's exceptions.Exception class.
[tiran]
- Added deprecation warnings for importing from CLR.* and the CLR module.
[tiran]
- Implemented support for methods with variable arguments
spam(params object[] egg) [tiran]
- Fixed Mono support by adding a custom marshaler for UCS-4 unicode,
fixing a some ref counter bugs and creating a new makefile.mono.
[tiran]
- Added a standard python extension to load the clr environment.
The src/monoclr/ directory contains additional sample code like a
Python binary linked against libpython2.x.so and some example code
how to embed Mono and PythonNet in a C application.
[tiran]
- Added yet another python prompt. This time it's a C application that
embedds both Python and Mono. It may be useful as an example app for
others and I need it to debug a nasty bug. [tiran]
- Implemented ModuleFunctionAttribute and added ForbidPythonThreadsAttribute.
The latter is required for module functions which invoke Python methods.
[tiran]
- Added clr.setPreload(), clr.getPreload(), clr.AddReference("assembly name"),
clr.FindAssembly("name") and clr.ListAssemblies(verbose). Automatic
preloading can be enabled with clr.setPreload/True). Preloading is
automatically enabled for interactive Python shells and disabled in all
other cases. [tiran]
- New Makefile that works for Windows and Mono and autodetects the Python
version and UCS 2/4 setting. [tiran]
- Added code for Python 2.3. PythonNet can be build for Python 2.3 again
but it is not fully supported. [tiran]
- Changed the PythonException.Message value so it displays the name of
the exception class ("Exception") instead of its representation
("<type 'exceptions.Exception'>").
- Added Python.Runtime.dll.config
PythonNet 2.0 alpha 1
---------------------------------------------------------------------------
- Moved the Python for .NET project to Sourceforge and moved version
control to Subversion.
- Removed CallConvCdecl attributes and the IL hack that they supported.
.NET 2.x now supports UnmanagedFunctionPointer, which does the right
thing without the hackery required in 1.x. This removes a dependency
on ILASM to build the package and better supports Mono (in theory).
- Refactored import and assembly management machinery. The old 'CLR.'
syntax for import is deprecated, but still supported until 3.x. The
recommended style now is to use 'from System import xxx', etc. We
also now support 'from X import *' correctly.
- Implemented a (lowercase) 'clr' module to match IronPython for code
compatibility. Methods of this module should be used to explicitly
load assemblies. Implicit (name-based) assembly loading will still
work until 3.x, but it is deprecated.
- Implemented support for generic types and generic methods using the
same patterns and syntax as IronPython. See the documentation for
usage details.
- Many small and large performance improvements, switched to generic
collections for some internals, better algorithms for assembly
scanning, etc.
- Fixed an unboxing issue in generated delegate implementation code
that affected delegates that return value types.
PythonNet 1.0 final
---------------------------------------------------------------------------
- Backported the refactored import and assembly management from the 2.x
line, mainly to improve the possibility of code-compatibility with
IronPython.
PythonNet 1.0 release candidate 2
---------------------------------------------------------------------------
- Changed some uses of Finalize as a static method name that confused the
Mono compiler and people reading the code. Note that this may be a
breaking change if anyone was calling PythonEngine.Finalize(). If so,
you should now use PythonEngine.Shutdown().
- Tweaked assembly lookup to ensure that assemblies can be found in the
current working directory, even after changing directories using things
like os.chdir() from Python.
- Fixed some incorrect finalizers (thanks to Greg Chapman for the report)
that may have caused some threading oddities.
- Tweaked support for out and ref parameters. If a method has a return
type of void and a single ref or out parameter, that parameter will be
returned as the result of the method. This matches the current behavior
of IronPython and makes it more likely that code can be moved between
Python for .NET and IP in the future.
- Refactored part of the assembly manager to remove a potential case of
thread-deadlock in multi-threaded applications.
- Added a __str__ method to managed exceptions that returns the Message
attribute of the exception and the StackTrace (if available).
PythonNet 1.0 release candidate 1
---------------------------------------------------------------------------
- Implemented a workaround for the fact that exceptions cannot be new-style
classes in the CPython interpreter. Managed exceptions can now be raised
and caught naturally from Python (hooray!)
- Implemented support for invoking methods with out and ref parameters.
Because there is no real equivalent to these in Python, methods that
have out or ref parameters will return a tuple. The tuple will contain
the result of the method as its first item, followed by out parameter
values in the order of their declaration in the method signature.
- Fixed a refcount problem that caused a crash when CLR was imported in
an existing installed Python interpreter.
- Added an automatic conversion from Python strings to byte[]. This makes
it easier to pass byte[] data to managed methods (or set properties,
etc.) as a Python string without having to write explicit conversion
code. Also works for sbyte arrays. Note that byte and sbyte arrays
returned from managed methods or obtained from properties or fields
do *not* get converted to Python strings - they remain instances of
Byte[] or SByte[].
- Added conversion of generic Python sequences to object arrays when
appropriate (thanks to Mackenzie Straight for the patch).
- Added a bit of cautionary documentation for embedders, focused on
correct handling of the Python global interpreter lock from managed
code for code that calls into Python.
- PyObject.FromManagedObject now correctly returns the Python None object
if the input is a null reference. Also added a new AsManagedObject
method to PyObject, making it easier to convert a Python-wrapped managed
object to the real managed object.
- Created a simple installer for windows platforms.
PythonNet 1.0 beta 5
---------------------------------------------------------------------------
- Refactored and fixed threading and global interpreter lock handling,
which was badly broken before. Also added a number of threading and
GIL-handling tests.
- Related to the GIL fixes, added a note to embedders in the README
about using the AcquireLock and ReleaseLock methods of the PythonEngine
class to manage the GIL.
- Fixed a problem in Single <--> float conversion for cultures that use
different decimal symbols than Python.
- Added a new ReloadModule method to the PythonEngine class that hooks
Python module reloading (PyImport_ReloadModule).
- Added a new StringAsModule method to the PythonEngine class that can
create a module from a managed string of code.
- Added a default __str__ implementation for Python wrappers of managed
objects that calls the ToString method of the managed object.
PythonNet 1.0 beta 4
---------------------------------------------------------------------------
- Fixed a problem that made it impossible to override "special" methods
like __getitem__ in subclasses of managed classes. Now the tests all
pass, and there is much rejoicing.
- Managed classes reflected to Python now have an __doc__ attribute that
contains a listing of the class constructor signatures.
- Fixed a problem that prevented passing null (None) for array arguments.
- Added a number of new argument conversion tests. Thanks to Laurent
Caumont for giving Python for .NET a good workout with managed DirectX.
- Updated the bundled C Python runtime and libraries to Python 2.4. The
current release is known to also run with Python 2.3. It is known
*not* to work with older versions due to changes in CPython type
object structure.
- Mostly fixed the differences in the way that import works depending
on whether you are using the bundled interpreter or an existing Python
interpreter. The hack I used makes import work uniformly for imports
done in Python modules. Unfortunately, there is still a limitation
when using the interpreter interactively: you need to do 'import CLR'
first before importing any sub-names when running with an existing
Python interpreter.
The reason is that the first import of 'CLR' installs the CLR import
hook, but for an existing interpreter the standard importer is still
in control for the duration of that first import, so sub-names won't
be found until the next import, which will use the now-installed hook.
- Added support to directly iterate over objects that support IEnumerator
(as well as IEnumerable). Thanks to Greg Chapman for prodding me ;)
- Added a section to the README dealing with rebuilding Python for .NET
against other CPython versions.
- Fixed a problem with accessing properties when only the interface for
an object is known. For example, ICollection(ob).Count failed because
Python for .NET mistakenly decided that Count was abstract.
- Fixed some problems with how COM-based objects are exposed and how
members of inherited interfaces are exposed. Thanks to Bruce Dodson
for patches on this.
- Changed the Runtime class to use a const string to target the
appropriate CPython dll in DllImport attributes. Now you only
have to change one line to target a new Python version.
PythonNet 1.0 beta 3
---------------------------------------------------------------------------
- A dumb bug that could cause a crash on startup on some platforms was
fixed. Decided to update the beta for this, as a number of people
were running into the problem.
PythonNet 1.0 beta 2
---------------------------------------------------------------------------
- Exceptions raised as a result of getting or setting properties were
not very helpful (target invokation exception). This has been changed
to pass through the inner exception the way that methods do, which is
much more likely to be the real exception that caused the problem.
- Events were refactored as the implementation was based on some bad
assumptions. As a result, subscription and unsubscription now works
correctly. A change from beta 1 is that event objects are no longer
directly callable - this was not appropriate, since the internal
implementation of an event is private and cant work reliably. Instead,
you should the appropriate OnSomeEvent method published by a class
to fire an event.
- The distribution did not include the key file, making it a pain for
people to build from source. Added the key file to the distribution
buildout for beta 2.
- Assemblies can now be found and loaded if they are on the PYTHONPATH.
Previously only the appbase and the GAC were checked. The system now
checks PYTHONPATH first, then the appbase, then the GAC.
- Fixed a bug in constructor invokation during object instantiation.
PythonNet 1.0 beta 1
---------------------------------------------------------------------------
- Added the baseline of the managed embedding API. Some of the details
are still subject to change based on some real-world use and feedback.
The embedding API is based on the PyObject class, along with a number
of specific PyDict, PyList, (etc.) classes that expose the respective
interfaces of the built-in Python types. The basic structure and usage
is intended be familar to anyone who has used Python / C++ wrapper
libraries like CXX or Boost.
- Started integrating NUnit2 to support unit tests for the embedding
layer - still need to add the embedding tests (many already exist,
but were written for an older version of NUnit).
- Added Python iteration protocol support for arrays and managed objects
that implement IEnumerable. This means that you can now use the Python
idiom 'for item in object:' on any array or IEnumerable object.
- Added automatic conversion from Python sequence types to managed array
types. This means, for example, that you can now call a managed method
like AddRange that expects an array with any Python object that supports
the Python sequence protocol, provided the items of the sequence are
convertible to the item type of the managed array.
- Added new demo scripts, mostly more substantial winforms examples.
- Finished the unit tests for event support, and fixed lots of problems
with events and delegates as a result. This is one of the trickier
parts of the integration layer, and there is good coverage of these
in the unit tests now.
- Did a fair amount of profiling with an eval version of ANTS (which is
quite nice, BTW) and made a few changes as a result.
- Type management was refactored, fixing the issue that caused segfaults
when GC was enabled. Unit tests, stress tests and demo apps now all run
nicely with Python GC enabled. There are one or two things left to fix,
but the fixes should not have any user impact.
- Changed to base PythonNet on Python 2.3.2. This is considered the most
stable release, and a good 25 - 30% faster as well.
- Added a new 'CLR.dll' that acts as an extension module that allows an
existing unmodified Python 2.3 installation to simply 'import CLR' to
bootstrap the managed integration layer.
- A bug was causing managed methods to only expose overloads declared in
a particular class, hiding inherited overloads of the same name. Fixed
the bug and added some unit tests.
- Added a virtual '__doc__' attribute to managed methods that contains
the signature of the method. This also means that the Python 'help'
function now provides signature info when used on a managed class.
- Calling managed methods and events 'unbound' (passing the instance as
the first argument) now works. There is a caveat for methods - if a
class declares both static and instance methods with the same name,
it is not possible to call that instance method unbound (the static
method will always be called).
- Overload selection for overloaded methods is now much better and uses
a method resolution algorithm similar to that used by Jython.
- Changed the managed python.exe wrapper to run as an STA thread, which
seems to be more compatible with winforms apps. This needs a better
solution long-term. One possibility would be a command line switch
so that -sta or -mta could control the python.exe apartment state.
- Added support for the Python boolean type (True, False). Bool values
now appear as True or False to Python.
PythonNet Preview 2
---------------------------------------------------------------------------
- Added a Mono makefile. Thanks to Camilo Uribe for help in testing and
working out problems on Mono. Note that it not currently possible to
build PythonNet using mono, due to the use of some IL attributes that
the mono assembler / disassembler doesn't support yet.
- Preliminary tests show that PythonNet *does* actually run under mono,
though the test suite bombs out before the end with an "out of memory"
error from the mono runtime. It's just a guess at this point, but I
suspect there may be a limited pool for allocating certain reflection
structures, and Python uses the reflection infrastructure quite heavily.
- Removed decoys like the non-working embedding APIs; lots of internal
refactoring.
- Implemented indexer support. Managed instances that implement indexers
can now be used naturally from Python ( e.g. someobject[0] ).
- Implemented sequence protocol support for managed arrays.
- Implemented basic thread state management; calls to managed methods
no longer block Python. I won't go so far as to say the thread
choreography is "finished", as I don't have a comprehensive set of
tests to back that up yet (and it will take some work to write a
sufficiently large and evil set of tests).
- Fixed a bug that caused conversions of managed strings to PyUnicode to
produce mangled values in certain situations.
- Fixed a number of problems related to subclassing a managed class,
including the fact that it didn't work :)
- Fixed all of the bugs that were causing tests to fail. This release
contains all new bugs and new failing tests. Progress! :)
PythonNet Preview 1
---------------------------------------------------------------------------
- Initial (mostly) working experimental release.