mirror of https://github.com/swig/swig
220 lines
7.2 KiB
Plaintext
220 lines
7.2 KiB
Plaintext
SWIG TO-DO
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
**** = 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.
|
|
|
|
*** Implement $fail special variable substitution in wrappers. Used
|
|
to properly transfer control out of a wrapper function while
|
|
reclaiming resources.
|
|
|
|
Note: Implemented in languages that uses the UTL via the
|
|
'SWIG_fail' macro.
|
|
|
|
*** 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.
|
|
|
|
Note: Initial implementation in the %rename directive.
|
|
|
|
*** 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 Ruby/Perl/Tcl/Python. ]
|
|
|
|
** Restoration of the documentation system.
|
|
[ Partially done for Python. ]
|
|
|
|
|
|
** 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
|
|
-----
|
|
|
|
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?).
|
|
|
|
Java
|
|
----
|
|
|
|
|
|
C#
|
|
--
|
|
|
|
PHP
|
|
---
|
|
|
|
**** Look at moving to using the UTL.
|
|
|
|
** 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.
|
|
|
|
** 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.
|
|
|
|
* Review to see what else is missing!
|
|
|
|
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?)
|
|
|
|
** 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.
|
|
|
|
|
|
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
|