70 likes | 77 Views
This article discusses the challenges and potential solutions for commercializing Soar, including reducing entry barriers and improving low-level reuse in software development. It also explores the importance of layered abstraction and the potential directions for reimplementation and componentization of Soar.
E N D
Thinking… …inside the box Commercializing Soar: Software Engineering Perspective Randolph M. Jones
Commercialization Issues • The primary concern for commercialization is the ability to build and maintain the systems we want quickly and cheaply • Other general requirements • The systems run as efficiently as possible • The systems are robust and bug-free • Other Soar-specific requirements • We want developers to be able to use Soar easily when Soar is the right tool to use • Provide a smooth transition path from non-Soar solutions to Soar solutions • Remove or reduce the barriers to entry to Soar programmers
The Software Life Cycle • Because of barriers to entry, Soar’s advantages are most pronounced for large applications that exploit Soar’s strengths • Relational knowledge base, knowledge-based decision making • Pattern matching, associative retrieval • Significant situation interpretation and representation • Intricate belief representation • Complex (hierarchical) goal structures and least-commitment execution • Explanation-based learning • Re-entrant, interrupt-driven decision making • These advantages imply that the (current) best commercial uses of Soar will be for relatively large systems • The primary costs for large, long-lived systems are in development and maintenance • There are proven software engineering methods for reducing these costs
Lessons from Computer Science • A primary solution approach to these types of problems is layered levels of abstraction • E.g., hardware, virtual machine, high-level language, libraries • Each layer is designed to foster reuse at that level • Component-oriented virtual/hardware layer • High-level language that captures common idioms and patterns • Formal interfaces for high-level components • Ultimately, specification at each level needs to be developer-friendly, not machine-friendly • Efficiency and robustness are issues, but should be handled by the compiler and virtual machine
Obstacles to Low-Level Reuse in Soar • The current programming primitives in Soar are very close to the low-level architecture • Programming is akin to programming in assembly language • You can write reusable modules in assembly language, but nobody does it any more • Many current Soar “behavior libraries” rely on the goal stack • The goal stack is a limited resource • Two integrated libraries must contend for the resource • Architecture-level interface to libraries • Higher-level interface increased generality more reuse • Because there is no formal design level, there can be little design-level reuse • Crippled low-level functionality for common functions • Counting, sets, structure copying, data chunking, accumulation of historical information • Solutions will necessarily be idiosyncratic • A higher-level language with well-defined semantics will allow the current best (or alternative) implementation to be used uniformly
Reducing Entry Barriers • How can we reduce the learning curve for Soar, or make it less important? • Change low-level language syntax • Provide a higher level language • Allow procedural access to Soar data structures (e.g., object-oriented access to working memory) • This could also provide a smooth migration path from procedural systems to Soar systems, as well as the potential for easily integrated hybrid systems • JESS and CLIPS have done similar things • Provide an easily extensible library of components for cognitive and non-cognitive tasks
Potential Directions • Reimplement and “componentize” Soar • Allows smooth migration path for software engineers • Allows easier integration, extension, experimentation • Allows application-specific configuration of reasoning engine • Allows easier insertion of common low-level functions • Allows easier, rational choices for hybrid systems • Build/prototype your own subsystems and components • Reimplement appropriate pieces in Soar • Make Soar’s production syntax into a modern and comprehensible (to engineers) language • Strong typing • Syntactic encapsulation • This can be a pre-processor or compiler, so Soar remains backwards compatible • Develop high-level languages and tools • Must be informed by (and will inform) lower-level changes • Should exploit the defining programming paradigm differences • Re-entrant, event-driven, relational pattern-oriented, least commitment