forked from nathanfunk/jep-java-gpl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathToDo.txt
155 lines (134 loc) · 6.66 KB
/
ToDo.txt
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
== Phone call =======================================================
- new name for DJEP
using "JEP Extensions" unless ideas come up within the next days
- new releases
- new release within next month (mostly current CVS state)
- JEP 2.4.0 and JEP Extensions 1.1
- next release will be JEP 3.0 and Extensions 2.0
- regular releases
- roughly every 2 months
- planned features for JEP 3.0
- Parser
- create interface
- easier operator extension (RunCC?)
- start implementing new parsers (RunCC,...)
- Evaluation
- create interface
- less creation of new objects in evaluation
- faster evaluation
(each node needs more annotation)
(rich is using 3 different evaluators (xjep overrides evalutar))
- new custom nodes
- switch on JavaCC to enable custom nodes
- move some group math features into JEP -> "arbitrary precision"
- move towards strongly typed approach enable before evaluation complex
== Rich's ideas =====================================================
1) Expandable parser. Whilst it is easy to add new functions it is a
non-trivial task to add a new operator. We've had a few requests about
this on the forum, I've written a page describing the process at
http://singsurf.org/djep/html/djep/AddingOperators.html
I've been looking at the runcc parser, this can build a parser at run
time, and seems relatively easy to create a parser. Conceivably JEP
could be built with a number of different parsers, each of which
implement an interface.
2) Specific parser improvements.
Allow f(option1=val1) so an equation with an equals sign can be parsed in.
Allow vectors/matrices addressable by m[1] gives first element of an array.
Allow ranges to be specified say x=-pi:pi
3) Speeding up evaluation. I've achieved considerable 10 fold speed
increases using the rpe and mrpe packages. These use a reverse polish
representation of the equation. Speed is mainly achieved by eliminating
object creation, and hand coding matrix operations for matrices up to 4
by 4. I'd like to role which into the main JEP code, but it would need a
major rewrite to achieve.
4) Currently JEP operates with a loose typing system, the values can be
Doubles, Complex, Strings,... I'd quite like to make versions of JEP
which is stricter on the values, for instance a version which operates
just on doubles, or just on complex numbers.
5) Using a stack is not strictly necessary for parsing values to
functions. They could just as easily be parsed an array of values
Object run(Object[] args)
or even if its known the function is a binary operator
Object run(Object left,Object right)
suitable interfaces say BinaryFunction could define these methods.
There would a speedup as result.
6) Better exception handling.
7) Thread safety. This is not something I've had any experience with but
is defiantly something both Nathan and I are keen to see.
The above imply quite a major rewrite. I'd like to allow nodes to have
mutable value objects attached to them and define a system of interfaces
to allow for BinaryFunctions etc.
As far as symbolic operations go the best simplification I've got is the
org.lsmp.djep.sjep package. This is still quite new and needs testing.
I'm sure there are much better strategies about, but I've not done much
research in the field.
== Further todos ====================================================
- add FunctionPlotter.sh
- do not throw ParseExceptions from function classes, but a different type instead
- upgrade JUnit to newest version
- redesign package structure org.nfunk -> com.singularsys...
ask Rich for permission to put everything under com.singularsys.
make an agreement that allows
- somehow get around having ParserDumpVisitor referencing Sun's COPYRIGHT file (which doesn't exist)
(e.g. don't use ParserDumpVisitor, upgrade to JavaCC 4...)
- add to license agreement that JUnit is included and that source
code is available from web site
- include common public license
- ensure EvaluatorVisitor reports multiple errors for one evaluation
(use list of errors rather than throwing exceptions)
- change Functions and Operators documentation. That table just has too
much empty space
- JUnit with ANT http://www-106.ibm.com/developerworks/library/j-ant/?dwzone=java
- comparison needs to be more flexible with complex type ((i-i) == 0)
- add to features, that it is "easy to integrate in your project"
- add max(), min(), avg() methods
- add example for multiple arguments to the documentation
- extend build.xml to automatically generate commercial package
- allow dumpvisitor to show values of function nodes and variables
- allow custom symbol tables (Map interface only in 1.2 - talk with dude)
- make case sensitivity optional
- think about adding a "static double getValue(String expr) throws Exception"
- add support for delimited identifiers (suggestion from Ralph Harnden)
- new example applet, show gray-scale image with function evaluated at
- check out caligula http://www.home.foni.net/~wkurz/caligula/caligula.htm
- complete applying new code convention to complex class
- update Parser.jjt and JEP for smooth configuration optioning
- optimize evaluation
- look at 330 design patterns and see whether some might be useful
- test error output (e.g. i == 2 -> type conflict)
- handle type conflicts in advance
- look at digital signing of jars
- protect jars/applets from running on other domains.
http://www.javaworld.com/javaworld/jw-12-1996/jw-12-int.property.html
- compare features with the french guy's site, and plan to match important capabilities
- add applet for displaying expression trees
- automaticize web site uploading/cvs
-- Mamala -----------------------------------------------------------
- use <apply></apply> instead (content MathML?)
- allow download from JEP web site?
== User Wish List ===================================================
- Mathematica link with J/Link by importing Expr expressions.
== Release Check List ===============================================
- Run all tests
- use "ant dist"
- Update download page
- Update license
- Download package and test
- add jep-x.xx-withexamples.jar to website folder
- Update documentation with new features
- Run spell check on changed pages
- Test web site in multiple browsers
- Upload new distribution file(s)
- Upload license pdf
- Upload web site
- Add CVS tag for version (e.g. v-3-0-0)
- Send notification emails
- Add notification messages
- Sourceforge
- Freshmeat
- JARS
- share*it,...
- comp.lang.java.announce
- Javalobby
- http://www.fawcette.com/javapro
- sites listed at http://www.javalobby.org/forums/thread.jspa?threadID=16001&tstart=0