Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Monto: A Disintegrated Development Environment

61f8010a7249d7ec93e197e96999fe6c?s=47 Tony Sloane
September 29, 2014

Monto: A Disintegrated Development Environment

Talk from Software Language Engineering Conference (SLE 2014).


Tony Sloane

September 29, 2014


  1. Monto: A Disintegrated Development Environment Anthony M. Sloane Matthew Roberts

    Scott Buckley Shaun Muscat Programming Languages Research Group Department of Computing Macquarie University Anthony.Sloane@mq.edu.au @inkytonik 1 / 10
  2. Motivation and Approach Inspired by Difficulty of integrating new functionality

    into established IDEs Editor-based approaches to language-specific support Work on tool/component integration: e.g., ToolBus, Linda Disintegrated Development Environments Simplify, simplify, simplify Separate components as much as possible Simple JSON messages sent using ZeroMQ 2 / 10
  3. Monto Architecture Broker Sources Sinks Servers version version product product

    version User change display 3 2 4 5 3 1 6 interact 3 / 10
  4. Demo 1: Command-line Usage Source: command-line notification of file contents

    Servers: reverse file contents; calculate length of file Sink: print product Broker reversed file contents file contents User reverse.py file contents send.py file print.py reversed file contents file length print length.py file length 4 / 10
  5. Demo 2a: Wrapping Existing Commands (cloc) Source: whole file Server:

    wrapped cloc command to calculate size Sink: display cloc output in editor view Broker cloc output file contents User wrap cloc file contents change file editor editor cloc output show output in editor 5 / 10
  6. Demo 2b: Wrapping Existing Commands (hoogle) Source: selection of type

    in Haskell file Server: wrapped Hoogle command to search APIs Sink: display Hoogle output in editor view Broker hoogle output type User wrap hoogle type select type in editor editor editor hoogle output show output in editor 6 / 10
  7. Demo 3: Interfacing With Existing Code Source: MiniJava program in

    editor Server: Scala interface to existing MiniJava compiler Sink: display compiler AST, errors and output in editor Broker AST, errors, output program User MiniJava compiler program edit MiniJava program editor editor show AST, errors, output in editor AST, errors, output 7 / 10
  8. A Lightweight Approach: Environment Builder’s View Language Lines Startup Python

    146 Broker Python 32 Source Python 17 Server Python 34 Sink Python 10 Common Python 9 wrap.py Python 62 Server Scala 35 Kiama compiler wrapper Scala 43 8 / 10
  9. A Lightweight Approach: Environment Extender’s View Role Language Lines send.py

    Source Python 57 reverse.py Server Python 4 print.py Sink Python 5 Sublime Text plugin Source + Sink Python 309 cloc Server Perl 8014* Hoogle Server Haskell 5270* MiniJava Server Scala 12 Compiler Scala 2132* * existing code 9 / 10
  10. Summary Status A simple framework provides easy integration of tools

    and code Performance is good enough for interactive use Proof-of-concept applications are already useful Modes of interaction not shown in the demo are possible (e.g., append to view, replace selection, context-menu/completion) Work in progress Network-based servers Source-to-product origin tracking Project-based processing (e.g., build servers) Graphical sinks to display HTML or SVG products Interactive applications: debugging, REPLs Packaging so that others can use it and can contribute 10 / 10