The Script# compiler can optionally be used with the Script# Framework that provides a more productive application development platform for larger, and more complex applications.
A Better Scripting Approach
The fundamental goal was to improve the state of the art in scripting. This goes way beyond the usual things that come to mind at first thought: compile-time checking, and intellisense or statement completion. I do think these are super-useful, and would be valuable in and of themselves. As we worked on Atlas we were also thinking of a great tools experience, and we explored different approaches and technologies for achieving this. Script# is a prototype of one such exploration. It attempts to address some programming environment requirements:
- A clean language with the natural constructs. Today with script, you can go a long ways in simulating OOP (classes, interfaces, inheritance etc.), but the simulations are thrown at the face of the developer. Various C# constructs such as properties, events, and syntax for defining inheritance go a long way in making the code readable. Similarly modifier keywords like public vs. protected vs. internal, sealed vs. virtual etc. help define a better object model. All of this can be brought into the scripting world.
- Easier refactoring and exploration. Script development could benefit immensely from the refactoring, and class browsing support already present in the IDE and in tools such as .NET Reflector. Both lend themselves to having a more manageable code base over time.
- Ability to generate documentation. Again doc-comments from C# and the existing infrastructure could be leveraged here.
A Rich Scripting Framework
- An OOP-based type system for better encapsulation of data and logic, that supports applications and components written in C#.
- A base class library that both extends built-in script objects as well as adds new classes that allows one to carry forward a reasonable part of their managed code programming experience.
- Higher level abstractions such as networking, UI controls, etc. enabling focus on application-level logic rather than at raw nuts and bolts of scripting