bah. mistakenly added so removing
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@6882 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
b48eff1dd6
commit
50801b9c79
1 changed files with 0 additions and 395 deletions
395
swigweb/TODO
395
swigweb/TODO
|
|
@ -1,395 +0,0 @@
|
||||||
SWIG TO-DO
|
|
||||||
|
|
||||||
Release: SWIG-1.3.24
|
|
||||||
|
|
||||||
$Header$
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
**** = High Priority
|
|
||||||
*** = Implement if possible.
|
|
||||||
** = Will implement if time.
|
|
||||||
* = Implement if bored (or deemed necessary).
|
|
||||||
|
|
||||||
defer = Implement in next version
|
|
||||||
|
|
||||||
CORE:
|
|
||||||
|
|
||||||
**** Add support for nested classes. The type system should be
|
|
||||||
defer ready to go. The primary obstacle lies in the target language
|
|
||||||
modules (which were never programmed with nested classes in
|
|
||||||
mind). There are also issues with nested C structures. For
|
|
||||||
example:
|
|
||||||
|
|
||||||
struct Foo {
|
|
||||||
struct {
|
|
||||||
int x,y;
|
|
||||||
} z;
|
|
||||||
};
|
|
||||||
|
|
||||||
This is one of the last remaining "hard" problems in the SWIG
|
|
||||||
core, but it is important that we solve it.
|
|
||||||
|
|
||||||
**** Typemap environments. Stay tuned.
|
|
||||||
|
|
||||||
*** "Nested" typemaps. The basic idea is similar to allowing one to
|
|
||||||
use $descriptor(T) for any T, rather than just $descriptor
|
|
||||||
for the type currently being typemapped.
|
|
||||||
|
|
||||||
In short (ha!), given a previously defined typemap:
|
|
||||||
|
|
||||||
%typemap(in) Foo {
|
|
||||||
// whatever it takes to initialize $1 from $input
|
|
||||||
}
|
|
||||||
|
|
||||||
it would be possible to inline its code inside another typemap.
|
|
||||||
While the syntax is still to be defined, the use would be
|
|
||||||
along the lines of:
|
|
||||||
|
|
||||||
template <class T> class vector {
|
|
||||||
%typemap(in) vector<T> {
|
|
||||||
...
|
|
||||||
for (int i=0; i<N; i++) {
|
|
||||||
PyObject* x = ... // i-th element
|
|
||||||
$typemap(in, T, x, $1[i]);
|
|
||||||
}
|
|
||||||
...
|
|
||||||
}
|
|
||||||
...
|
|
||||||
}
|
|
||||||
|
|
||||||
i.e., when $typemap(in,Foo,x,y) is encountered, it will
|
|
||||||
be replaced by the code for %typemap(in) Foo; in the latter,
|
|
||||||
x will be replaced for $input and y will be replaced for $1.
|
|
||||||
As in the case above, x and y themselves might need to be
|
|
||||||
expanded before or after being substituted in the typemap code.
|
|
||||||
Also, $typemap(what,Foo,x,y,z,...) will be used in case of
|
|
||||||
multi-arguments typemaps. The same will hold for "out" typemaps
|
|
||||||
and all the others.
|
|
||||||
|
|
||||||
Comment by mkoeppe:
|
|
||||||
|
|
||||||
I think we need to be careful to keep the syntax readable.
|
|
||||||
I would like to get a syntax that is close to that of
|
|
||||||
typemap definitions. So consider this typemap:
|
|
||||||
|
|
||||||
%typemap(in) int { ... }
|
|
||||||
|
|
||||||
I would like to refer to this typemap like this:
|
|
||||||
|
|
||||||
$typemap(in, input=x) int = foo;
|
|
||||||
|
|
||||||
Here $input would be replaced by the given keyword argument
|
|
||||||
x, and $1 would be replaced by foo.
|
|
||||||
|
|
||||||
This syntax would extend easily to multi-typemaps:
|
|
||||||
|
|
||||||
%typemap(in) ( int FIRST, double SECOND ) { ... }
|
|
||||||
|
|
||||||
-> $typemap(in, input=x)
|
|
||||||
( int FIRST = foo, double SECOND = bar );
|
|
||||||
|
|
||||||
The advantage of this syntax would be that the formal
|
|
||||||
arguments (int FIRST, double SECOND) are close to the
|
|
||||||
actual arguments (foo, bar).
|
|
||||||
|
|
||||||
Comment by beazley
|
|
||||||
|
|
||||||
$typemap(in, input=x) int = foo;
|
|
||||||
|
|
||||||
is a little bit hard to parse in terms of variable substitution.
|
|
||||||
I'm considering something like this:
|
|
||||||
|
|
||||||
$typemap(in,1=int foo, input=x)
|
|
||||||
|
|
||||||
*** Implement $fail special variable substitution in wrappers. Used
|
|
||||||
to properly transfer control out of a wrapper function while
|
|
||||||
reclaiming resources.
|
|
||||||
|
|
||||||
*** Better targeting of output typemaps. For example:
|
|
||||||
It is not possible to target an output typemap for function
|
|
||||||
Foo::func() and not Bar::func(). Output typemaps need to support
|
|
||||||
syntax something along the lines of:
|
|
||||||
|
|
||||||
%typemap(out) int *Foo::func { ... }
|
|
||||||
|
|
||||||
Currently only globals functions can be targeted, like so:
|
|
||||||
|
|
||||||
%typemap(out) int *func { ... }
|
|
||||||
|
|
||||||
*** Rewrite declaration annotation to better unify %rename and related
|
|
||||||
directives. Add a selector mechanism that allows specific parse tree
|
|
||||||
nodes to be identified. For example:
|
|
||||||
|
|
||||||
%feature("foo", nodetype="class") Foo { ... some code ... };
|
|
||||||
|
|
||||||
Consider use of wildcards. Namespace/nested scope support in
|
|
||||||
%feature is currently weak. It works, but is fragile. Consider
|
|
||||||
an implementation that is better integrated with symbol table
|
|
||||||
management. Continue to consolidate SWIG directives to %feature.
|
|
||||||
|
|
||||||
*** Bring Aquinas' contract/assertion checking code online.
|
|
||||||
|
|
||||||
*** Add more intelligent information related to object ownership.
|
|
||||||
SWIG should be able to automatically strip ownership from
|
|
||||||
objects when they are assigned to pointer variables and structure
|
|
||||||
members as well as stored in a container (i.e., an array of pointers).
|
|
||||||
|
|
||||||
[ Partially finished for Tcl/Python. ]
|
|
||||||
|
|
||||||
** Restoration of the documentation system.
|
|
||||||
|
|
||||||
** Restoration of Objective-C support.
|
|
||||||
|
|
||||||
** Unification of symbol tables and type system scopes. In a sense
|
|
||||||
they capture the same information so it is not necessary to have
|
|
||||||
both. The existence of two symbol management systems is mostly
|
|
||||||
historical.
|
|
||||||
|
|
||||||
Build
|
|
||||||
-----
|
|
||||||
|
|
||||||
**** Make sure there are tests for *ALL* library files in the test-suite.
|
|
||||||
A number of files appear to be broken in SWIG-1.3.13.
|
|
||||||
|
|
||||||
Library
|
|
||||||
-------
|
|
||||||
|
|
||||||
**** Add more support for the C++ standard library. std::complex and other
|
|
||||||
core datatypes. Refine support for STL vector. Add more STL objects.
|
|
||||||
|
|
||||||
[ Partially finished for Python. ]
|
|
||||||
|
|
||||||
**** Continue to expand the set of recognized typemaps.
|
|
||||||
|
|
||||||
Windows
|
|
||||||
-------
|
|
||||||
|
|
||||||
All language modules
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
Python
|
|
||||||
------
|
|
||||||
|
|
||||||
*** Ability to wrap certain classes as Python built-in types.
|
|
||||||
|
|
||||||
Perl
|
|
||||||
----
|
|
||||||
|
|
||||||
**** Rewrite runtime pointer type checking to better integrate
|
|
||||||
shadow classes. Creation of shadow classes should be done
|
|
||||||
in C instead of Perl. This will fix a number of problems
|
|
||||||
related to typemaps and reduce the amount of Perl wrapper code.
|
|
||||||
|
|
||||||
**** Create tests for existing support for operator overloading
|
|
||||||
|
|
||||||
Tcl
|
|
||||||
---
|
|
||||||
|
|
||||||
Ruby
|
|
||||||
----
|
|
||||||
|
|
||||||
**** The "Resource Management in Proxies" section of the "SWIG and C++"
|
|
||||||
chapter discusses how proxies' ownership of their associated C++
|
|
||||||
object can change, and the use of the special disown() and
|
|
||||||
acquire() methods to change this ownership status. Need to
|
|
||||||
address this for Ruby as well.
|
|
||||||
|
|
||||||
*** Add support for keyword arguments (by collecting them in a hash?).
|
|
||||||
|
|
||||||
* Add some special directives to automatically rename declarations to
|
|
||||||
or from CamelCase.
|
|
||||||
|
|
||||||
Java
|
|
||||||
----
|
|
||||||
|
|
||||||
|
|
||||||
C#
|
|
||||||
--
|
|
||||||
|
|
||||||
*** Implement director support for C# so that virtual methods work seemlessly
|
|
||||||
when mixing C# and C++ code.
|
|
||||||
|
|
||||||
**** Fix exception handling. Currently memory leaks occur when a C# exception
|
|
||||||
is thrown from C/C++.
|
|
||||||
|
|
||||||
PHP
|
|
||||||
---
|
|
||||||
|
|
||||||
** When returning wrapped objects via alternate constructors if that
|
|
||||||
pointer value already exists "out there" as a resource we should
|
|
||||||
use the same resource, we can't have multiple ref-counted resources
|
|
||||||
mapping to the same object in case it gets twice destroyed. And check
|
|
||||||
if ref count destroying is even working, see smart_pointer_rename
|
|
||||||
|
|
||||||
* Work out how classes without even inherited constructors should
|
|
||||||
interact with the php "new <class>" notation.
|
|
||||||
See: abstract_inherit_wrap.cpptest
|
|
||||||
|
|
||||||
** Look at pass by point and passby ref,
|
|
||||||
Make sometype** to be auto allocated
|
|
||||||
Make sometype& and sometype* to be autoallocated IF THEY ARE NOT
|
|
||||||
ALREADY swigtype wrapped.
|
|
||||||
|
|
||||||
* Overloading, callbacks, really review to see what else is missed
|
|
||||||
|
|
||||||
Guile
|
|
||||||
-----
|
|
||||||
|
|
||||||
** Maybe rename slot setters from CLASS-SLOT-set to CLASS-SLOT-set!
|
|
||||||
to match Scheme convention for naming of mutators.
|
|
||||||
|
|
||||||
** Support keyword args.
|
|
||||||
|
|
||||||
** Director Support!
|
|
||||||
|
|
||||||
** Cleaner handling of multiple values.
|
|
||||||
Use a typemap keyword argument "numoutputs" of "out" and
|
|
||||||
"argout" to indicate how many values are returned.
|
|
||||||
|
|
||||||
** Make SWIG's types first-class by using a separate smob type for
|
|
||||||
SWIG type descriptors; enable reflection on types. (Maybe
|
|
||||||
GOOPS metaclasses?)
|
|
||||||
|
|
||||||
** Maybe communicate the type system between object modules via Scheme
|
|
||||||
variables, rather than a shared object. This would remove the
|
|
||||||
need of a shared SWIG runtime library.
|
|
||||||
|
|
||||||
** Provide a clean way to construct type predicates.
|
|
||||||
|
|
||||||
** In GOOPS mode, maybe make overloaded functions methods.
|
|
||||||
|
|
||||||
** Increase the safety of destructor functions. John Lenz suggests:
|
|
||||||
|
|
||||||
I think the best way of doing this would be to use %feature to mark
|
|
||||||
which classes allow for "normal" <swig> smobs to be deleted explicitly.
|
|
||||||
|
|
||||||
We separate pointers into two classes, those that can be deleted from
|
|
||||||
scheme and those that can't. The pointers that can be deleted use the
|
|
||||||
<collectable-swig> smob and those that can not be deleted use the
|
|
||||||
<swig> smob. A user can specify which type of each object they want
|
|
||||||
with %newobject and the CONSUMED typemap.
|
|
||||||
|
|
||||||
By default, the exported destructor will only accept <collectable-swig>
|
|
||||||
smobs, because by definition, collectable-swig smobs are those that can
|
|
||||||
be deleted from scheme. This allows for the user to implement
|
|
||||||
protection. In the interface file, the user has complete control over
|
|
||||||
which objects can and can not be deleted, and can guarantee that
|
|
||||||
objects that should not be deleted can not be deleted, and that objects
|
|
||||||
that should eventually be deleted will be garbage collected.
|
|
||||||
|
|
||||||
This protection can then be overridden with a %feature directive,
|
|
||||||
something like
|
|
||||||
|
|
||||||
%feature("guile_allow_destroy_all","1") Foo::~Foo;
|
|
||||||
|
|
||||||
I don't know what word we want to use, guile_allow_destroy_all is kinda
|
|
||||||
bad. This feature would then allow for a <swig Foo *> smob to be
|
|
||||||
deleted by passing it to the destructor. This would allow users to
|
|
||||||
maintain the protection on other classes, only manually overriding the
|
|
||||||
protection on the classes that need it.
|
|
||||||
|
|
||||||
|
|
||||||
Mzscheme
|
|
||||||
--------
|
|
||||||
|
|
||||||
** Port list-vector.i and pointer-in-out.i from Guile.
|
|
||||||
|
|
||||||
** Add shadow class support for the Swindle system.
|
|
||||||
|
|
||||||
Pike
|
|
||||||
----
|
|
||||||
|
|
||||||
* Decide how to handle global variables (probably using something
|
|
||||||
like the Python module's cvar). Affects Examples/pike/simple.
|
|
||||||
|
|
||||||
* Decide how to handle static class member functions and member
|
|
||||||
variables.
|
|
||||||
|
|
||||||
* Should investigate the possibility of generating .cmod files
|
|
||||||
in addition to straight C/C++ code for extensions.
|
|
||||||
|
|
||||||
Common Lisp
|
|
||||||
-----------
|
|
||||||
|
|
||||||
* Random thoughts by mkoeppe on supporting Common Lisp implementations:
|
|
||||||
|
|
||||||
There are many different Foreign Function Interfaces (FFI) for
|
|
||||||
the various CL implementations. Probably SWIG should interface
|
|
||||||
to UFFI, a least-common-denominator FFI that supports many
|
|
||||||
implementations.
|
|
||||||
|
|
||||||
Via the s-expression SWIG module we can export SWIG's parse
|
|
||||||
tree and import it into CL. It remains to check if all
|
|
||||||
relevant information is dumped (for instance, the type
|
|
||||||
information). Experimental code is available to generate
|
|
||||||
low-level UFFI declarations from this parse tree.
|
|
||||||
|
|
||||||
However, for wrapping C++, we also need to create C wrappers
|
|
||||||
because most FFIs cannot directly import C++. A CL SWIG module
|
|
||||||
could be exporting both these wrappers and UFFI declarations.
|
|
||||||
I have experimental code (not checked in yet) that does this.
|
|
||||||
|
|
||||||
This is fine for generating low-level wrappers. But how do we
|
|
||||||
support user typemaps (like converting lists and vectors to C
|
|
||||||
arrays on input)? We have to generate Lisp code that does the
|
|
||||||
conversion and then calls the low-level wrapper. If we
|
|
||||||
generate Lisp code, it should be beautiful and readable.
|
|
||||||
Therefore, we need at least a Lisp pretty printer. A Lisp
|
|
||||||
pretty printer works best when the Lisp program is represented
|
|
||||||
not as text but as Lisp data. Moreover, typemap writers will
|
|
||||||
feel very much constrained by SWIG's capabilities for
|
|
||||||
generating wrapper code, when compared to writing Lisp macros.
|
|
||||||
Thus we would need half a re-implementation of Lisp in SWIG to
|
|
||||||
make users happy.
|
|
||||||
|
|
||||||
The solution could be the following:
|
|
||||||
|
|
||||||
** Build a SWIG library (again) and load it into a Common Lisp
|
|
||||||
implementation.
|
|
||||||
|
|
||||||
The FFI declarations could be written manually, or this could
|
|
||||||
be bootstrapped via the s-expression module or the primitive
|
|
||||||
UFFI wrappers. This should be easy because SWIG's API is quite
|
|
||||||
simple.
|
|
||||||
|
|
||||||
The embedded SWIG would be driven by a CL program. High-level
|
|
||||||
typemaps would be written as Lisp programs that generate Lisp
|
|
||||||
code.
|
|
||||||
|
|
||||||
Ocaml
|
|
||||||
-----
|
|
||||||
** I've been working with my camlp4 module and type information
|
|
||||||
from the compiler. When I'm done, the user will have access
|
|
||||||
to type inference when writing code, when the inference is
|
|
||||||
unambiguous. This allows the user to write x = _foo 1.0
|
|
||||||
instead of x = get_float (_foo (C_float 1.0)). It's not as
|
|
||||||
easy as it sounds, because O'caml doesn't keep type information
|
|
||||||
at run time, and doesn't really have a mechanism for doing what
|
|
||||||
I need. However, it's possible to write a preprocessor that
|
|
||||||
inserts correct type info at compile time.
|
|
||||||
|
|
||||||
That having been said, the program must compile for type info
|
|
||||||
to be available, so I need to attend to a lot of details; The
|
|
||||||
program must compile both with and without type augmentation.
|
|
||||||
|
|
||||||
Xml
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
Documentation
|
|
||||||
-------------
|
|
||||||
|
|
||||||
**** Extending SWIG (and internals).
|
|
||||||
|
|
||||||
*** Perl, Python, Tcl modules.
|
|
||||||
|
|
||||||
*** add section for Perl module support for operator overloading
|
|
||||||
|
|
||||||
** Add section on WAD.
|
|
||||||
|
|
||||||
Other
|
|
||||||
-----
|
|
||||||
|
|
||||||
***** Learn more wicked Jazz chords.
|
|
||||||
(in progress)
|
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue