-
Notifications
You must be signed in to change notification settings - Fork 99
ExpressionEvaluator Todo List
Coding Seb edited this page Mar 3, 2021
·
39 revisions
ExpressionEvaluator can already do some fun things, but it could do more. Here is just a small list of ideas and todo stuff (maybe some will never be done, But it's a place to keep track of ideas). It's a kind of not dated roadmap.
- Customization of the script evaluation part
- Manage Tuples
- Add
nameof
keyword - Subscribe to event
- Manage
switch case
- Speed up evaluations
- Caching things and consider using expression tree or other intermediate format. (See)
-
Caching Properties delegates (Do not improve perfs significantly)
- Better variables management
- Declare struct and valuetypes without new keyword
- Scope variables to code blocks (add an option for retrocompatibility)
- Line and (position) in script exceptions
- More self explained exceptions
- Add standard syntax for method declaration (for now see issue #72 Declare methods in scripts)
- Create
Func<>
orAction<>
- Return a
Func<>
or anAction<>
- Validate code before evaluate (Hard to do without evaluating things)
-
Manageref
method args (see #83) -
Managein
method args (see #83) -
Manageout
method args (see #83) -
Manageparams
methods args (see #83) -
Add aContext
object in addition toVariables
Dictionary to allow direct access to it's methods, fields and properties -
ManageList<>.ForEach
-
Transform an internal lambda toAction<>
orFunc<>
when needed (To allow writingList<>.ForEach(x => {})
) -
Typed variables (In version 1.4.3.0 See Declare and init variables in scripts -
Generic types inference (Optimistic way to inferate. Only looking backward for generics in the stack) -
Add an optionalvar
keyword for variables init. (Better for copy paste with C# code) -
Manage structs assignation -
Option to force integer eval as double -
Manage numbers decimal separator and functions arguments separators -
Managesizeof
keyword -
Binary numbers -
Hexadecimal numbers -
++
and--
as prefix operators -
Dictionary initializers -
Collection initializers -
Objects initializers -
throw
andtry catch
exception -
ManageExpendoObject
-
Manage calling of Action and Func delegates -
Manage++
and--
for indexing -
Manage assignation to indexer -
Managedo while
-
Properties set assignation -
Manageforeach
-
Managecontinue
keyword -
Managebreak
keyword -
Manage blocks in lambda body -
Managereturn
keyword -
Manage comments//
and/* */
-
ManageEvaluate<type>(calc)
-
Manage chars -
On the fly properties and methods evaluation -
Manage Generic functions and types with<>
-
Manage?:
operator -
Managenew
Keyword -
Manage multi line mode with;? and
= -
Manage blocks likeif for while
...
Optimization and/or doing things better
- Speed up evaluations
-
Manage inline namespaces faster -
Option for caching namespace resolution -
Option for caching type resolution - [Kept as this] Manage object creation faster (Activator.CreateInstance finally not so slow comparing to others strategy)
-
More customization
-
Custom operators (see #27 and Advanced Customization and Hacking)-
On the fly operators -
Operators Dictionary easy customisation -
Add a way to allow aliases for existing operators likeOr, And
-
Add a way to add some custom operators and corresponding implementations -
Flexible length of the operators -
Types : multiple operands vs Single operands (Maybe start with only 2 operands operators) -
Take care of operators precedences (priorities)
-
-
Add generic types inVariableEvaluationEventArg
andFunctionEvaluationEventArg
for on the fly evaluations (A list of types when using<>
) -
On the fly static methods and/or property -
Better onthe fly events priorities management with other evaluations (By adding 2 Pre events See #35) -
On the fly parsing (event with current expression,ref parsing position and the stack)
Will not (or can not) be done for now
-
Find a way to manage extensions methods without the need to declaring the static type and without beeing too slow(snippet to add all extensions class provided here)
- Getting Started
- Variables and Functions
- Operators and Keywords
- C# Types Management
- ExpandoObject
- Code Comments Management
- Advanced Customization and Hacking
- Caching
-
Options
- CultureInfoForNumberParsing
- OptionCaseSensitiveEvaluationActive
- OptionVariablesPersistenceCustomComparer
- OptionFluidPrefixingActive
- OptionForceIntegerNumbersEvaluationsAsDoubleByDefault
- OptionNumberParsingDecimalSeparator
- OptionNumberParsingThousandSeparator
- OptionFunctionArgumentsSeparator
- OptionInitializersSeparator
- OptionInlineNamespacesEvaluationRule
- OptionNewFunctionEvaluationActive
- OptionNewKeywordEvaluationActive
- OptionStaticMethodsCallActive
- OptionStaticProperiesGetActive
- OptionInstanceMethodsCallActive
- OptionInstanceProperiesGetActive
- OptionIndexingActive
- OptionStringEvaluationActive
- OptionCharEvaluationActive
- OptionEvaluateFunctionActive
- OptionVariableAssignationActive
- OptionPropertyOrFieldSetActive
- OptionIndexingAssignationActive
- OptionScriptEvaluateFunctionActive
- OptionOnNoReturnKeywordFoundInScriptAction
- OptionScriptNeedSemicolonAtTheEndOfLastExpression
- OptionAllowNonPublicMembersAccess
- Todo List