Skip to content
Borislav Iordanov edited this page Oct 22, 2015 · 1 revision

#summary Overview of Seco

Seco is a software scripting, prototyping environment for the Java platform. Seco can be used as a shell to the Java platform using your favorite scripting language. Common uses are experimentation with a new library, prototyping of pretty much any type of functionality, debugging existing code, writing test scripts etc. Today, many scripting languages, old and new, have been implemented for Java. This proliferation of language implementations and the growing interest towards dynamically typed languages calls for a corresponding programming tool.

Traditional programming environments fall in two broad categories: # Scripting shells / interactive environments where a programmer types in expressions and gets back responses and # IDEs with the big machinery for managing large projects, and the classic compile-run-debug cycle.

Seco draws inspiration from the experience accumulated from both those categories and sits somewhere in between them.

Feature Summary

  • An infinite zoomable 2D canvas is at the basis of the Seco user interface. It allows you to arrange components any way you wish, place them in nested containers (themselves zoomable) and navigate what amounts to a two dimensional map of components.
  • Mathematica inspired scripting notebooks form the basic scripting shell UI. This is a very friendly approach to scripting, much more convenient than the conventional input-output shell.
  • JSR 223 compliant: scripting is supported for any dynamic language endowed with a JSR 223 binding.
  • Prebundled languages: it is possible to add support for any JVM based language using the Seco API. We've already implemented support for the languages shown above. The main build only includes BeanShell, and Jscheme in order to reduce the size of the download. The others may be downloaded and installed separately from http://code.google.com/p/seco/downloads/list. All languages supported are syntax highlighted, and many offer code completion capabilities as well.
  • Define evaluation contexts each having a separate class path and associate a notebook with an evaluation context. This is similar to a "project" in a standard IDE, except that the purpose here is interactive evaluation instead of compilation and then execution. It is also similar to a binding environment in conventional dynamic shells, except that bindings are managed by Seco and shared amongst the currently installed scripting languages.
  • HTML editing support within scripting notebooks allows you to interleave documentation/exposition, scripts and their outputs, including interactive UI components, in a single narrative flow.
  • Use of HyperGraphDB to save the current environment state. A HyperGraphDB instance is created as a permanent storage for the environment and much of the runtime state is automatically persisted in the form of hypergraph atoms. This instance is naturally accessible from the scripts and can be used as a backing storage.
  • Real-time collaboration is available through chat system where HyperGraphDB atoms can be communicated between peers, including scripting notebooks, individual scripting cells and UI components.

Long-Term Vision

We are hoping to grow Seco into a full-blown, "next generation", collaborative software development tool with a distributed peer-to-peer backbone based on HyperGraphDB. Nearly all "live systems", where the compile time vs. runtime distinction is eliminated, are based on a single language running on a specialized VM. The constraints imposed by the JVM make it hard (and perhaps impossible) to implement a truly "live system", but we chose to focus on immediate, practical utility as well. And the Java ecosystem has that. We are hoping that a practical, day-to-day collaboration at a finer level of granularity than current software practices will lead to an evolutionary computing performed at a time scale better suited for us programmers and computer users.

Clone this wiki locally