aboutsummaryrefslogtreecommitdiff
path: root/gfsm/gfsm/wishlist.txt
diff options
context:
space:
mode:
Diffstat (limited to 'gfsm/gfsm/wishlist.txt')
-rw-r--r--gfsm/gfsm/wishlist.txt44
1 files changed, 44 insertions, 0 deletions
diff --git a/gfsm/gfsm/wishlist.txt b/gfsm/gfsm/wishlist.txt
new file mode 100644
index 0000000..e42bf7e
--- /dev/null
+++ b/gfsm/gfsm/wishlist.txt
@@ -0,0 +1,44 @@
++ move gfsmArcList back to a native type, ditching GSList
+ - sorting, splicing, etc. is then tricky, but maybe we can use
+ temporaries for this
+ - would save us sizeof(void*) per arc: all the space lost by adding source state!
+
++ (style): clearer API/internals demarcation
+
++ allow (arbitrary?) automaton indices
+ - esp. (source_state,lower), (source_state,upper)
+ - load & save with automaton
+ - either:
+ (1) maintain indices over destructive operations, or
+ - generic hooks for destructive gfsmAutomaton API?
+ (2) maintain a "dirty" marker to note when index need update, or
+ (3) maintain a "smart list" of changed data and update on demand
+
++ get rid of "GArray fsm->states": it's just wasting space
+ (30 of 64 bits are unused: track these at compile time with -Wpadded)
+ - replace with (gfsmBitVector)s state_is_valid, state_is_final and
+ a dedicated arc-list array (we can still call that "states" for
+ backwards compatibility, esp. the fsm->states->len idiom)
+ * tagh from 148MB to 129MB: -13%
+
++ allow gfsmArcList to be an array
+ - better: allow *all* arcs for an automaton to be a single array
+
++ [DONE] source state tracking in gfsmArc
+ - obsoletes gfsmReverseArcIndex
+ - adds sizeof(gfsmStateId) bytes per arc (tagh from 148MB to 184MB: +24%)
+
++ Basic types
+ - configure option for gfsmLabelId to fit a pointer
+ * tricky to handle without a union or other explicit label API
+ * without source tracking: tagh from 148MB to 184MB: +24%
+ * with source tracking : tagh from 184MB to 220MB: +20%
+ - configure option for 64-bit gfsmStateId (also 64-bit gfsmLabelId?)
+ * breaks binary compatibility: add header flag?
+
++ store alphabet with fsm
+ - tricky with user alphabets: loadable modules?
+
++ loadable modules for user-defined alphabets & semirings
+ - libgmodule ?
+ - look at Micha's tomata2 code for ideas