Opened 11 years ago
Closed 10 years ago
#2136 closed feature request (done)
Create a scripting environment
Reported by: | jkarder | Owned by: | abeham |
---|---|---|---|
Priority: | high | Milestone: | HeuristicLab 3.3.10 |
Component: | Scripting | Version: | 3.3.9 |
Keywords: | Cc: |
Description
A scripting environment should be created to provide rapid prototyping features.
Change History (40)
comment:1 Changed 11 years ago by jkarder
- Status changed from new to accepted
comment:2 Changed 11 years ago by jkarder
comment:3 Changed 11 years ago by jkarder
r10332: added prototype of a scripting environment
comment:4 Changed 11 years ago by jkarder
- refactored HLScriptGeneration to separate outputs from different running HL scripts.
- added persistence support for HLScripts and fixed cloning
- added code completion for all types in the currently loaded assemblies
- merged trunk changes
comment:5 Changed 11 years ago by jkarder
r10359: merged HLScript branch back to trunk
comment:6 Changed 11 years ago by jkarder
- Owner changed from jkarder to abeham
- Status changed from accepted to reviewing
comment:7 Changed 11 years ago by mkommend
Some issues which I found during testing:
- Build configurations, especially paths, are not set correctly
- Consider renaming the projects / classes (e.g., HeuristicLab.Scripting, HeuristicLabScript)
- IMHO the complete source code should always be visible, instead of hiding some parts.
- I would prefer to have a real C# script with a static void main entry point, which could also be executed in other development environments. Another benefit would be that the error line numbers would automatically match the displayed line numbers.
- Exceptions should additionally be shown in an error dialog. If one does not view the log, the person has no clue that an exception was thrown.
comment:8 Changed 11 years ago by abeham
- Owner changed from abeham to architects
- Status changed from reviewing to assigned
comment:9 Changed 11 years ago by abeham
r10391: fixed build configuration, output path and added ignore properties
comment:10 Changed 11 years ago by jkarder
- renamed some HLScript files
- fixed a bug where variables could be renamed while a script was running
- the complete source code is now always visible
- removed "show generated code" feature
comment:11 Changed 11 years ago by abeham
- Owner changed from architects to jkarder
- Version changed from branch to 3.3.9
Results of yesterday's meeting:
- Change plugin to HeuristicLab.Scripting and HeuristicLab.Scripting.Views and adapt the objects (also rename the trac component)
- Put an extra Compile Button and register F6 as a shortcut
- Put the output window first and error list second
- Automatically change tabs: when compiling -> errors, when running -> output
- When an exception is thrown it should be viewed using the PluginInfrastructure
- Remove the namespace declaration in the script
- Names in the VariableStore have to conform to C# property names
- Contains(string) method to check if a variable is present in the VariableStore
- Split the start page vertically and group samples and scripts on the right hand side
- After implementing the changes mkommend will do the code review
comment:12 Changed 11 years ago by abeham
swagner suggested to add the ability to split the script into multiple scripts. Instead of having a Code property that returns only a single string, it should be able to store a collection. The view could be enhanced to include a DockPanel and open each code in a separate docking windows inside that panel as well as to include buttons to add or remove new windows.
comment:13 Changed 11 years ago by jkarder
r10506: applied some of the changes suggested in comment:11:ticket:2136
- change namespaces to HeuristicLab.Scripting.*
- added extra compile button and registered F6 as a shortcut
- changed the order of the output window and the error list
- tabs (output window and error list) are selected automatically
- thrown exceptions are shown using the PluginInfrastructure
- removed namespace declaration in the script
- names in the VariableStore are now conform to C# property names
comment:14 Changed 11 years ago by jkarder
- Status changed from assigned to accepted
comment:15 Changed 11 years ago by jkarder
r10474: using RandomEnumerable.SampleProportional in BiasedMultiVRPOperators.
comment:16 Changed 11 years ago by jkarder
r10510: renamed folders of HeuristicLab.Scripting and HeuristicLab.HLScript.Views
comment:17 Changed 11 years ago by jkarder
r10511: added Contains(string) method to check if a variable is present in the VariableStore
comment:18 Changed 11 years ago by jkarder
- the Variables class now implements IEnumerable<T>
- added Keys and Values properties to the Variables class
comment:19 Changed 11 years ago by abeham
- Made Variables class public (could be used in other scripts as well)
- Renamed ItemName to "C# Script"
comment:20 Changed 11 years ago by abeham
- Fixed drag-drop behavior in VariableStoreView
- Added additional information to Script and changed setting name and description
I noticed that if multiple items are to be dragged they're combined into a List<object> and should of course be expanded again. This does not work currently.
comment:21 Changed 11 years ago by jkarder
r10642: fixed automatic selection of tabs (output window and error list)
comment:22 Changed 11 years ago by abeham
The tool tip for the run/stop button needs to reflect the state of the button.
comment:23 Changed 11 years ago by abeham
I would propose to change the type of compiledScript to dynamic. It would allow to compile anything into the running environment, not just scripts. I've attached a patch for this change.
Edit: The patch has become obsolete with the separation of Script and CSharpScript
comment:24 Changed 11 years ago by jkarder
- fixed tool tips
- added Clear() method to remove all variables present in the VariableStore
- the script cannot be compiled and started with the shortcuts anymore if it is already running
comment:25 Changed 11 years ago by jkarder
- Owner changed from jkarder to mkommend
- Status changed from accepted to reviewing
comment:26 Changed 11 years ago by abeham
- Owner changed from mkommend to abeham
- Status changed from reviewing to assigned
comment:27 Changed 11 years ago by abeham
- Status changed from assigned to accepted
comment:28 Changed 11 years ago by abeham
I wanted to change a couple of things to make it easier to embed scripting in other parts of HeuristicLab.
- Split Script into Script and CSharpScript
- Split ScriptView into ScriptView and CSharpScriptView
comment:29 Changed 11 years ago by abeham
r10747: fixed anchor in ScriptView
comment:30 Changed 11 years ago by abeham
r10761: fixed a bug when switching views
comment:31 Changed 11 years ago by abeham
- Owner changed from abeham to mkommend
- Priority changed from medium to high
- Status changed from accepted to reviewing
I would ask you to do a review of this feature so that we can release this.
comment:32 follow-up: ↓ 36 Changed 11 years ago by mkommend
- Owner changed from mkommend to abeham
- Status changed from reviewing to assigned
Review comments
Script.cs
- Remove virtual modifier from the properties that are not overriden
- CompilationUnitCode is never used (except cloning)
- Default ctor should not call virtual properties and misses its base ctor call
CSharpScript
- Make CompiledScript and ScriptThread property private.
- DeregisterScriptEvents should be called before the CompiledScript is set to null, because otherwise it has no effect (line 111).
- Check in the compile method if multiple classes derived from CSharpScriptBase are defined, because this would lead to an undefined behavior. You could use Single instead of First for example.
- Why is reflection used to call the execute method of CSharpScriptBase in CSharpScript.Execute? Wouldn't it be easier to call CompiledScript.Execute(VariableStore); (line 127) and get rid of the reflection code.
CSharpScriptBase
- Choose a more appropriate name for the usb variable (e.g., script, scriptBase,...).
- Is it necessary that vars is of type dynamic? Couldn't I type vars statically to Variables?
ScriptView
- Comment in line 151 is wrong. According to MSDN is resizes the column to the header width.
CSharpScriptView
- OnContentChanged duplicates code from its base class.
- The same holds for SetEnabledStateOfControls.
comment:33 Changed 11 years ago by abeham
- Owner changed from abeham to jkarder
please implement the review comments
comment:34 Changed 11 years ago by jkarder
- Status changed from assigned to accepted
comment:35 Changed 11 years ago by jkarder
r10857: implemented review comments from mkommend in comment:32:ticket:2136
comment:36 in reply to: ↑ 32 Changed 11 years ago by jkarder
Replying to mkommend:
- Is it necessary that vars is of type dynamic? Couldn't I type vars statically to Variables?
Yes, vars has to be of type dynamic because otherwise its dynamic runtime behavior (invocation of DynamicObject.TryGetMember() etc.) would not work.
comment:37 Changed 11 years ago by jkarder
- Owner changed from jkarder to mkommend
- Status changed from accepted to reviewing
comment:38 Changed 11 years ago by jkarder
r10865: fixed compilation error output in console
comment:39 Changed 10 years ago by mkommend
- Owner changed from mkommend to abeham
- Status changed from reviewing to readytorelease
r10331: created branch