blob: 24a71e99d782d1e15c49c88a05a5c0b927fe2564 [file] [log] [blame]
<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include($App->getProjectCommon()); # All on the same line to unclutter the user's desktop'
$pageTitle = "Eclipse Monkey Proposal";
$pageKeywords = "Eclipse Monkey Scripting";
$pageAuthor = "James E. Ervin";
ob_start();
?>
<?php
include_once($_SERVER['DOCUMENT_ROOT'] . "/projects/fragments/proposal-page-header.php");
generate_header("Eclipse Monkey");
?>
<div id="maincontent">
<div id="midcolumn">
<b id="u6-.0">Eclipse Monkey Proposal</b>
<br id="g.lu0">
<h2 id="u6-.9">Introduction</h2>
<p id="u6-.12">The Eclipse Monkey is a proposed open source
project under the <a id="u6-.11" href="http://www.eclipse.org/technology/">Eclipse
Technology Project</a> to be split from the&nbsp;<a title="Eclipse Dash Project" href="http://www.eclipse.org/dash/" id="crhh">Eclipse Dash Project</a> and to be based on the existing <a title="Groovy Monkey Project" href="http://groovy.codehaus.org/Groovy+Monkey" id="dgm5">Groovy Monkey Project</a>.&nbsp; This proposal is in the Project Proposal Phase (as defined in the
<a id="u6-.13" href="http://www.eclipse.org/projects/dev_process/">
Eclipse Development Process document</a>) and is written to declare its intent
and scope. This proposal is written to solicit additional participation and
input from the Eclipse community. You are invited to comment on and/or join the
project. Please send all feedback to the <a id="u6-.14" href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.eclipse-monkey">http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.eclipse-monkey</a> newsgroup.&nbsp;
</p><h2 id="u6-.15">Background</h2>
Eclipse provides a flexible and extensible framework for third party tool integration, but the only way currently to extend its functionality is through the context of a bundle/plugin component.&nbsp; The primary issue is that creation of a fragment or bundle can be heavyweight and forces the user to utilize Eclipse's self-hosting feature.&nbsp; There must be a simpler, lighter and easier way for a power user/developer to extend/modify the current Eclipse workbench.&nbsp; In particular, there is no defined way to script from within Eclipse.&nbsp; This is what the new Eclipse Monkey seeks to address.&nbsp; A simpler and catchier synopsis would be to say that the new Eclipse Monkey is aiming to give the Eclipse power user the power of&nbsp;<a title="Emacs" href="http://www.gnu.org/software/emacs/" id="s_-c">Emacs</a> without the LISP.<br id="ttdr0">
<h2 id="u6-.16">Description</h2>
<p id="u6-.17" align="left">The new Eclipse Monkey seeks to address the following three scenarios:</p><ol id="hota0"><li id="hota1">Eclipse Task Automation and Scripting<br id="cwmc0"></li><li id="hota2">Eclipse API Exploration<br id="zen30"></li><li id="hota2">Rapid Prototyping and Quick Development of new Eclipse Plugins.<br id="zen31"></li></ol><br id="blwt0">Eclipse Monkey Lifecycle View: From script to full blown plugin<br id="blwt1">A user starts with a script that does something useful.&nbsp; Eclipse Monkey provides easy ways to access it, modify it, to run it and to share it with others.&nbsp; After some time, multiple scripts are written with functions that can be reused.&nbsp; Library scripts are then written, simplifying the other scripts and providing for reuse.&nbsp; After some more time, it is noticed that some of these library scripts are very useful and to take advantage of static typing/Java tooling those library scripts become DOM (Domain Object Model) objects deployed in a plugin.&nbsp; Eventually the DOM plugin could become the basis of a fully functional Eclipse plugin, with UI elements, extension points, etc...<br id="blwt2"><br id="zxrk0">Eclipse Monkey seeks to make it as simple as possible to use to as large a potential audience as possible, it attempts this by the following:<br id="jpl_0"><ol id="jpl_1"><li id="jpl_2">To be as language agnostic as possible.&nbsp; If a JVM language has a BSFEngine implementation and can utilize the classloader passed into it, it can be used.&nbsp; The Eclipse Monkey tool should not force a user into a new language to begin working.&nbsp; Scripts written in one language should be able to invoke others written in another language.<br id="k7x70"></li><li id="jpl_2">An editor with hippie completion and (to the degree possible) code completion.</li><li id="jpl_3">An outline view to show the user how the script is configured and what is available for use (DOMs/bundles/java packages).<br id="z10f0"></li><li id="jpl_3">A DOM that enables a user to invoke another monkey script, in the workspace, via a URL or generated and fed as a string input.</li><li id="jpl_3">A DOM that allows a script writer to take an existing plugin project and hot-load it into the current existing Eclipse workbench instance.</li><li id="jpl_3">A console DOM that allows a script writer access to something like stdout for feedback.<br id="x0wa0"></li><li id="jpl_3">Language specific DOMs that enable Eclipse Monkey to leverage existing libraries for the user (ex. <a title="GroovySWT" href="http://groovy.codehaus.org/GroovySWT" id="ktsv">GroovySWT</a> or JRuby <a title="Glimmer" href="http://rubyforge.org/projects/glimmer/" id="kk:7">Glimmer</a>).</li><li id="jpl_3">Additional metadata keywords that enable filesystem jars, filesystem folders, workspace jars, workspace folders, workspace projects or existing workbench bundles to be added to a script's classpath at runtime.</li><li id="jpl_3">Add in shell support through use of Eclipse Monkey metadata as a template and the BSF support for consoles.<br id="r9en0"></li></ol><br id="e58e0"><p id="u6-.17" align="left"><b id="g9w50">Proposed Changes<br id="g9w51"></b></p><p id="u6-.17" align="left">The new Eclipse Monkey tool will be based on the existing Eclipse Monkey's use of a metadata header (with additional keywords), but will be extended to use the <a title="Apache Bean Scripting Framework" href="http://jakarta.apache.org/bsf/index.html" id="uebv">Apache Bean Scripting Framework</a> and the Eclipse Jobs API.&nbsp; <br id="n..40"></p><p id="u6-.17" align="left"><br id="fst90"></p><ul id="sms10"><li id="sms11">Additional/Modified Metadata Keywords<br id="cg.b0"></li></ul><div id="sms12" style="margin-left: 40px;"><br id="oof80">DOM:<br id="jggs0">The new Eclipse Monkey will modify this keyword to allow the user to specify the local variable name for the script, overriding the name defined in the extension point.&nbsp; This will address potential variable name conflicts and give the DOM user/developer more freedom in choosing variable names.&nbsp; Eclipse Monkey will also provide support by marking potential conflicts and offering quick fixes to address them.<br id="oof81"><br id="jggs1">Exec-Mode:<br id="t8y30">This is a keyword that works in conjunction with the new Job keyword.&nbsp; Exec-Mode allows the script writer to tell Eclipse whether to run the script as a foreground or background job.&nbsp; The net effect is to determine if there should be a modal progress dialog shown to the user when the script is running or if it should be in the Eclipse progress view when running.<br id="t8y31"><br id="w0pr0">Include:<br id="czch0">The Include keyword allows script writers to add class folders or jars from the workspace or filesystem directly to the classloader defined for the script.&nbsp; For instance this allows script writers to leverage 3rd party libraries or java binaries in output folders directly.&nbsp; The Include keyword is vital for allowing scripts to be used in prototyping.<br id="czch1"><br id="cg.b1">Include-Bundle:<br id="bk-c0">The Include-Bundle keyword allows script writers to add bundle classloaders directly to the classloader of a script at runtime.&nbsp; Eclipse Monkey will use the OSGi runtime to acquire the target bundle's classloader and then allow the script's classloader to delegate to it at runtime.&nbsp; The net effect is to allow a script to be written such that if it were Java code directly embedded in one or more bundles.&nbsp; The Include-Bundle keyword is vital to enable Eclipse Monkey's goals of task automation, Eclipse API exploration and rapid prototyping.<br id="w0pr1"><br id="n..41">Include-Project:<br id="jggs2">The Include-Project keyword allows script writers to add Java workspace projects directly to the classloader of a script at runtime.&nbsp; Eclipse Monkey will use the JDT to interrogate the project for its resolved classpath and pass that information onto the classloader of the script at runtime.&nbsp; This feature will not be enabled for Eclipse RCP apps that are lacking both the Eclipse Platform and JDT.&nbsp; Future enhancements could allow for Eclipse Monkey to be able to determine if a project is a plugin and then be able to load the bundle via the bundlerDOM, run the script and then unload the bundle after its completion.<br id="s6_l0"><br id="n..42">Job:<br id="u8370">The Job keyword allows script writers to specify the kind of Eclipse job that the script is to run in.&nbsp; Current valid values are Job, WorkspaceJob, UIJob and default (empty string) maps to Job.<br id="jggs3"><br id="n..43">LANG:<br id="jggs4">The LANG keyword allows script writers to specify the language the script body is to be written in.&nbsp; Current valid values are Beanshell, Groovy, Ruby and default (empty string) maps to Groovy.<br id="rbb90"><br id="n..44">Menu:<br id="w0pr2">The Menu keyword allows script writers to specify the pulldown path to access the script via the monkey menu.<br id="a1dq0"><br id="n..45">Script-Path:<br id="a1dq1">The full path of the script in the workspace.<br id="k_x60"><br id="sms13"></div><ul id="z0ku0"><li id="z0ku1">Apache Bean Scripting Framework</li></ul><div id="z0ku2" style="margin-left: 40px;">The Apache Bean Scripting Framework enables the use of any JVM (Java Virtual Machine) Language that has a compatible BSFEngine implementation.&nbsp; As of right now the existing Groovy Monkey project allows scripts to be written in either <a title="Beanshell" href="http://www.beanshell.org/" id="y74e">Beanshell</a>,&nbsp;<a title="Groovy" href="http://groovy.codehaus.org" id="o8h2">Groovy</a>, or <a title="Ruby" href="http://jruby.codehaus.org/" id="nhdb">Ruby</a>.&nbsp; The first release of the newly constituted Eclipse Monkey will target the aforementioned languages but also will target <a title="ECMAScript" href="http://www.mozilla.org/rhino/" id="n95f">ECMAScript</a>(JavaScript) and <a title="Python" href="http://www.jython.org/Project/index.html" id="x_gg">Python</a>.<br id="e58e2"></div><br id="gl1u0"><ul id="gl1u1"><li id="gl1u2">Eclipse Jobs API:</li></ul><div id="icyz0" style="margin-left: 40px;">An Eclipse monkey script will be run within the context of an existing Eclipse Job.&nbsp; <br id="icyz1"></div><h3 id="u6-.37">Relationship with other Eclipse Projects</h3>Eclipse Monkey is meant to enable scripting on the entire range of Eclipse platforms.&nbsp; A core plugin should allow for scripting on a base Equinox OSGi container (+org.eclipse.core.runtime/resources) based application.&nbsp; A core and core UI plugin should allow development of Monkey scripts on Eclipse RCP platforms.&nbsp; Finally, full editor support and features should be allowed for Eclipse platforms that contain the JDT.&nbsp; As more and more of the full Eclipse SDK is available, more functionality would be available from Eclipse Monkey.<br id="c9xs0"><h2 id="u6-.40">Organization</h2>
<p id="u6-.41" align="left">We propose this project should
be undertaken as a Technology project rather than as part of the
Eclipse Platform. Being a Technology project gives it room to
experiment without disruption to other Eclipse Platform development
work.</p>
<p id="u6-.42" align="left">Finally, since Technology sub-projects
are not meant to be ongoing, we foresee three possible evolutionary
paths for the subproject:<br id="u6-.43">
<br id="u6-.44">
1. The project is merged back into the mainline Eclipse Platform top-level project.<br id="u6-.45">
2. The project is moved to a permanent state as a Tools Platform project.<br id="u6-.46">
3. The technology proves to be insufficient for Eclipse and the work is set aside.<br id="u6-.47">
<br id="u6-.48">
These paths are not mutually exclusive. Some combination of some or all
of these paths may be the result of the work done in this project.&nbsp;</p>
<h3 id="u6-.49" align="left">Proposed initial committers</h3>
<ul id="dhvw0"><li id="dhvw1">James E. Ervin, Independent Software Engineer</li><li id="dhvw2">Others welcome<br id="dhvw3"></li></ul>
<h3 id="u6-.57" align="left">Interested parties</h3><h3 id="u6-.61" align="left">Code Contributions</h3>
<p id="u6-.62" align="left">James E. Ervin is offering Groovy Monkey as an initial codebase
(see <a title="http://sourceforge.net/projects/groovy-monkey" href="http://sourceforge.net/projects/groovy-monkey" id="e4vw">http://sourceforge.net/projects/groovy-monkey</a>).</p><h2 id="u6-.65">Tentative Plan</h2>
<p id="u6-.66" align="left">Development with Groovy Monkey is on-going, if given the green-light, work will cease on that project and the first version of the new Eclipse Monkey would follow relatively quickly.&nbsp; Given the number of potential languages to use as input and the potential number of features, releases should occur on a regular six week schedule.<br id="x3y50">
</p>
</div>
</div>
</div>
</p>
</div>
</div>
<?php
$html = ob_get_contents();
ob_end_clean();
# Generate the web page
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>