Re: future of scaffold
- From: Jeroen Zwartepoorte <jeroen xs4all nl>
- To: "Gustavo M." Giráldez <gustavo giraldez gmx net>
- Cc: Gnome Devtools list <gnome-devtools gnome org>
- Subject: Re: future of scaffold
- Date: 30 Dec 2003 09:34:25 +0100
Hi Gustavo,
This all sounds very good. I'm looking forward to your API proposal. I'm
curious as to how the dynamic interfaces will work.
I'll have specific comments once i see the API proposal :)
Jeroen
On Tue, 2003-12-30 at 04:31, Gustavo M. Giráldez wrote:
> Hi!
>
> (Warning: long mail)
>
> I want to have as many people involved in this discussion as possible,
> since that will bring new ideas and points of view to the table. That's
> why I've cc'ed the list. Please, anyone interested in hacking Scaffold,
> speak up, share your thoughts, so we can build a solid infrastructure
> for a great Gnome IDE.
>
> On Fri, 2003-12-26 at 11:16, Jeroen Zwartepoorte wrote:
> > Hey Gustavo,
> >
> > So i'd like to put some thoughts of mine about the future of scaffold
> > down here.
> >
> > The Mono guys are porting SharpDevelop to Gtk# atm. What they're doing
> > is changing the SWF (System.Windows.Forms) code to Gtk#. They're not
> > using gtksourceview. They'll likely use GdlDock in the GUI, but that's
> > about all it will have in common with Scaffold. So it looks like
> > Scaffold# is not very attractive to them. (i haven't done any work on it
> > lately anyway. Working on GdlDock mostly atm)
> >
> > Your comment about making python plugins work in scaffold started me
> > thinking. I'm thinking we can make a small core, written in C that uses
> > the new Action API in gtk 2.3 and have plugins around that written in
> > C/Python/C# etc. This would require some refactoring.
> >
> > The reason i'm in favor of something like this is that i'm still not
> > happy with our current architecture of having a DocumentManager
> > interface and an implementation of that in NotebookDocumentManager. It
> > really sucks when you have plugins depending on other plugins etc.
> > What's your opinion on this? Has it changed after reading the JBuilder
> > Opentools document? :) (/me hopes it has)
>
> I think using the Action API solves just a small part of the problem,
> i.e. the UI merging of the different plugins. It can also be used for
> plugins offering a visual artifact on which the user can perform
> actions, such as a file entry in the project view.
>
> I agree Scaffold's core should be as small as possible, and have most
> functional parts implemented as plugins. I think that's the spirit of
> the current implementation.
>
> A single plugin should be also as small as possible, and do one thing
> well. The problem is that plugins should interact with each other, to
> allow the user to accomplish more complicated tasks, and to be able to
> present more useful information.
>
> Personally, I don't care whether the plugins are written in C, C++,
> Python, C#, or any other language of choice. In fact, I'd like to have
> plugins written in as many languages as possible, and have each one talk
> to each other in a clean and simple way. If a plugin implements a
> service which could be used by other plugins to make the user experience
> better, it should be possible to export the service and be used from
> outside without much trouble. To accomplish that, we need to clearly
> define the interfaces which plugins will realize or use.
>
> As I see it, we have two alternatives: compile-time interfaces and
> runtime interfaces. For compile time interfaces, the plugin needs to
> know the interface when it's built, and for runtime interfaces, the
> methods and properties can be discovered during execution, using
> reflection mechanisms. Both have advantages and disadvantages, and I
> think are suitable for different uses. That's why I'll propose to use
> both:
>
> a) Have a set of predefined core interfaces (implemented using
> GInterface) for very basic IDE functionality: a source file (or
> document), the project, a build target, etc..
>
> b) A runtime system to discover extra functionality, so we don't need to
> change the core interfaces whenever we need to do communication between
> two plugins.
>
> The other piece of the puzzle, which is a service the shell should
> provide, is a mechanism to register and retrieve objects which implement
> the above interfaces. The current value storage system is a solution to
> this, but it'll probably need some changes and extensions. For example,
> I'd like to have the objects organized in a hierarchical fashion (note
> that the hierarchy is also a kind of interface). Another addition I'd
> like to see is a moniker-like resolution system so any plugin could
> claim a subpath of the hierarchy, and provide factory and/or directory
> services.
>
> > Is this doable though: if you have plugins written in different
> > languages, can you still depend on them easily without having to write
> > bindings for a plugin first? .Net gets around this by having a common
> > Intermediate Language. We don't have that in C...
>
> Well, we don't have an intermediate language, but we have the GObject
> runtime system, which I think is good enough for our purposes. As long
> as we have gobject bindings and we provide bindings for the core and
> shell interfaces, we can use almost any language.
>
> The idea is not to depend on a particular plugin at compile time, i.e.
> don't #include a plugin header from other. If you ever need to do that,
> that means you should instead use a runtime interface (a gobject
> property for example), or define a new/extend an existent core
> interface.
>
> Ok, so this was all very vague. My intention is to get the ball rolling
> and get more people involved in the design. I'll try to follow up
> shortly with a more concrete proposal of an API for the shell and a set
> of core interfaces, but I think I've outlined the basic functionality
> I'd like to see:
>
> - shell with service/object registering capabilites (to allow plugins to
> advertise themselves), ui merging and session managment (so plugins can
> save project independent data)
>
> - a moniker interface, for container-like plugins. E.g. the document
> manager could claim /Documents and create a new object exporting the
> document interface, whenever someone tries to access /Documents/foo.c.
>
> - a UI merging interface for plugin visual elements (even the shell
> could implement it), to allow plugins to add context actions and/or
> information to some UI elements from other plugins. A typical example:
> a version control plugin would want to add version information and
> operations (update, commit, etc.) to a source file in the project
> plugin, which is a row in a tree view widget.
>
> - a document interface, offering services such as save, get text, insert
> text, etc. and notifications of user changes.
>
> - a project interface, for example to allow other plugins to save
> project dependent data, enumerate targets and source files, get local
> configuration information, etc.. Some users of these services: a
> debugger, a packaging plugin, etc..
>
> - a build target interface, with methods such as build, clean, enumerate
> sources, add source, etc.. Maybe project and target interfaces could be
> combined.
>
> Thanks for reading this far. Please comment on this. Ideas, criticism,
> corrections, any kind of feedback is welcome (as long as it's
> constructive ;-)
>
> Btw Jeroen, the JBuilder Opentools documents did give me some ideas
> which are part of what I'm proposing. For anyone interested, here are
> the URLs:
>
> http://linuxberg.vc-graz.ac.at/mirror/jbuilder/techpubs/jbuilder9/opentools.pdf
> http://info.borland.com/techpubs/jbuilder/jbuilder9/opentools/ref/OpenToolsAPI/
>
> Regards,
> Gustavo
>
>
>
> _______________________________________________
> gnome-devtools mailing list
> gnome-devtools gnome org
> http://mail.gnome.org/mailman/listinfo/gnome-devtools
>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]