Description - vascogrilo/LDE GitHub Wiki

Towards a Live Development Environment

  • Work description: Integrated Development Environments (IDE) for statically typed languages are mature and capable of helping developers to be more productive in their work. On the other hand, dynamically typed languages have been growing in popularity and adoption but their tools still follow concepts from static languages, some of which may not be so appropriate and effective in these environments.
    As an example, applying static code inspection is not a viable solution for implementing code refactoring or auto-completion with dynamic typed languages. To solve this problem, we aim to research and develop the concept of Live Development Environment (LDE), where the development tool is created in the same language (or intermediate language) of the code it produces.
    Following the same values of the language itself, the LDE becomes part of the runtime environment that hosts the developed code. It allows programmers to benefit from the extreme reflectivity in dynamic languages, easing the process of creating, debugging, maintaining, and automatically documenting their code through dynamic code inspection and LDE extensibility.

  • Goals and expected results: 1. To develop a theoretical framework for the concept of LDEs, and to identify the appropriate infrastructure needed to bring the concept into modern programming languages. 2. To develop a functional prototype of an LDE on top of an existing VM (e.g. PyPy or Rubinius).

  • Innovative Aspects: By looking at both IDE and comparing the support for static against popular dynamic languages such as Ruby, Python or JavaScript, support for the later is rather weak. This is a direct implication of the attempt to apply design concepts that were created to solve problems in a static language context to dynamic languages; common IDE features like static code analysis in dynamically typed languages are possible to be applied but are unable to completely solve programmer’s basic needs like project-wide refactoring, auto-complete, advanced debugging techniques or advanced error detection.
    The LDE concept is lightly inspired by Squeak, a Smalltalk IDE. Smalltalk is a reflective, object-oriented, dynamically typed programming language that appeared in 1972. It is built directly on top of a Smalltalk Virtual Machine (VM) and provides a fully portable, self-hosted, development environment for the language. The environment itself is distributed as an image constructed from the source that is loaded by the VM. The environment contains the necessary tools to inspect it’s own code, as well as any code developed inside it.
    While Squeak only allows structural inspection of both the IDE and applications built with it, Hermion, an extension to it, introduces integration of dynamic information into the Squeak IDE by explicitly representing features, embedding run-time information into the source code, and providing query facilities covering dynamic information.
    The most innovating aspect of this dissertation is thus bringing all this functionalities from the Smalltalk world into modern programming languages, which were not designed with the same set of low-level features Smalltalk was, and as such are apparently barred to support the same concepts.

  • Temporary Work Plan: 1. Study existing IDEs that support development of dynamically typed language and understand their features, limitations and flaws 2. Study existing REPLs of dynamic languages, and understand the main differences to an LDE. 3. Design an extensible Live Development Environment on top of an existing VM (or even REPL). 4. Follow the previous design and implement a LDE with a minimal extensible core system; In parallel, the student should pursue the following: 1. In-depth study of how IDEs work and are organized; 2. Understand how Virtual Machines work and interact with both the operating system and the code they are interpreting; 3. Learn about good design and modularity software patterns that can improve this project.

  • Bibliography: 1. Martin Abadi, Luca Cardelli, Benjamin Pierce, and Gordon Plotkin. Dynamic typing in a statically typed language. ACM Trans. Program. Lang. Syst., 13:237–268, April 1991. 2. Linda Dailey Paulson. Developers shift to dynamic programming languages. Computer, 40(2):12 –15, feb. 2007. 3. David Ro ̈thlisberger, Orla Greevy, and Oscar Nierstrasz. Hermion — exploiting the dynamics of software, 2008. 4. Anthony I Wasserman and Peter A Pircher. A graphical, extensible integrated environment for software development. SIGPLAN Not., 22:131–142, January 1987. 5. Jerey S. Hammon. IDE Usage Trends. Technical report, Forrester, February 2008.