Architecture Council/Minutes May 15 2008
|Meeting Title:||Architecture Council meeting on Architectural Foundations for E4|
|Date & Time:|| Thursday May 15, 2008 at 1500 UTC / 0800 SFO / 1100 Ottawa / 1600 London / 1700 Berlin|
|Dial-in:|| (+1) 613.287.8000 (Ottawa and international) or|
866.362.7064 (toll-free North America)
- 1 Attendees
- 2 Agenda
- 2.1 Meeting Goals
- 2.2 Review and Sort Agenda Items
- 2.3 Architectural Foundations
- 2.3.1 Eclipse Application Model
- 2.3.2 Too Many Listeners
- 2.3.3 Becoming More Asynchronous
- 2.3.4 Role-based Access and Security
- 2.3.5 Macro Recording and Playback
- 2.3.6 Workspace, Resources, Content Types
- 2.3.7 Jobs and Scheduling Rules
- 2.3.8 Getting rid of singletons
- 2.3.9 Non-UI Scripting
- 2.3.10 Verboten: Spinning the event loop
- 2.3.11 Avoid Modal Dialogs
- 2.3.12 Build Granularity
- 2.3.13 Dependency Injection
- 2.3.14 Preference Leveling
- 2.3.15 Launch / Debug Enhancements
- 3 Next Meeting
- Invited attendees are all EAC members as well as interested architects who know Eclipse well and want to shape its future foundations
- Martin Oberhuber
- Boris Bokowski
- Kevin McGuire
- Dave Orme
- Michael Scharf
- Mik Kersten
- Attendees are welcome to edit the agenda on the Wiki. Place a +1 / -1 next to an item that you would like / would not like to discuss.
- While the meeting is ongoing and one hour after, the Wiki should not be edited except by a notes-taker to be designated during the meeting
- After initial notes have been posted, everybody is free to edit the Wiki for corrections
- The primary goal of this meeting is to collect topics for the upcoming E4/Summit, and gather initial opinions.
- Raise tough questions to be discussed at the Summit
Review and Sort Agenda Items
Eclipse Application Model
- +1 MartinO, BorisB, KevinM, MichaelS
- See E4/Eclipse Application Model
- Why are Workbench / PlatformUI / Platform not part of the initial Application Model? Because they are not services in the sense that there could be alternative implementations --BorisB
- What about SWT, Views, Widgets, Trees, Labels, ... JFace Dialogs, Fonts, Text, Editors... Perspectives... Databinding SWT is a library, not a service that could have a different implementation. The same is true (mostly) for JFace and data binding. --BorisB
- Content Types, Associations
- Workspace, Resources (related to Team Support)
- Launching Framework
- Core Variables / Launch String Substitution
- What about EFS (core.filesystem)
- What about Extension Registry (IExtensionRegistry), IExtensionTracker is not everything?
- What about Secure Preferences
- What about the rest of OSGi (NLS, Services, Bundle States / Activator / Classloader; Log; State Location)
- What about standard bundle layout (related to Provisioning / Update / Plugins, Products, Features)
The other services listed above seem relevant, I will try to add them to E4/Eclipse Application Model before the call. --BorisB
Too Many Listeners
- +1: MartinO, BorisB, KevinM, DaveO
Becoming More Asynchronous
- +1: MartinO, BorisB, MichaelS
- What parts of Eclipse are Thread-safe? Is thread-safety documented everywhere?
- Related to Jobs and Scheduling Rules issues, see below
- Modal Context Dialog; SWT Dispatch Thread; WorkspaceRunnables; Executor pattern
- Should there be other patterns for Concurrency than we know now (Jobs, Runnables, ISchedulingRule) Have a look at data binding's Realm class - it's a generalization of the 'UI thread' pattern: to have access to a resource belonging to a realm, you have to call it from within the realm, and the only way to get into the realm is by posting a runnable using Realm.asyncExec. This makes access to resources safe while avoiding deadlocks altogether, at the cost of more complex code if your operation needs to access resources from more than one realm. --BorisB
Role-based Access and Security
- +1: MartinO, KevinM, DaveO
- Role-based Access: Hide unavailable functionality for a user who has access to certain roles only, rather than just denying access
- Capabilities are a relatively coarse-granular means of access control, need something more fine granular
- Related to Preference Levelling, see below
- In RCP, this needs to integrate with firm-wide single sign-on services (SSO)
Macro Recording and Playback
- +1: MartinO, BorisB, DaveO
- Pervasive macro recording, see bug 8519 vs. Editor macro recording vs. Debugger macro recording
- Should everything be a command / handler / workspace operation?
- Or do we need a different kind of coupling / bus?
- This problem is possibly related to several others: --DaveO
- Too many listeners. A richer command bus makes it possible to have everybody listen to the command bus rather than having a hodgepodge of listener types.
- Non-UI scripting: If everything is a Command, then the set of Commands that mutate state (or some subset of them that can be made API) can become the set of verbs available in the scripting API. This scripting API can be made available trivially in many scripting languages (ie: using methodNotFound in JRuby). What remains is exposing a DOM for the scripting language to interrogate and for the commands to manipulate.
Workspace, Resources, Content Types
- +1: MartinO, KevinM, DaveO
- Content Types:
- Pattern Matching for content types rather than just file extensions + stream evaluation
- Case sensitive patterns for content types
- Project-specific content types
- Eclipse Projects
- Plumbing or user artifact?
- For many RCP apps, the notion of the project at the user level is itself a problem. We need to separate our need for them as a mechanism for hanging off builders etc, vs. when to surface as a first class user notion. -- KevinM
- Agreed. See 'Build Granularity' below for one proposal. --DaveO
- Project type/nature, adding/removing -- KevinM
- bug 35973 Physically nested projects
- Namespace Resolution for projects with same name in a single workspace
- Inclusion of files from anywhere (liked linked resource), plus exclusion of elements by pattern (exclude from resource tree rather than just hide) Maybe we should stop assuming that the files are in the same directory tree. Most people think of projects as "the set of things I am working on" not as a physical space on the drive. Linked resources should be the design norm. -- KevinM
- Full native support for symbolic links (better algorithms for detecting link cycles and avoiding OutOfMemoryError)
- Multiple projects in the same folder?
- Logical Project Hierarchy Preference Levelling (like Apache Maven) - inherit settings from parent project?
- Plug-in loading and listeners: how to participate dynamically without forcing plug-in loading --KevinM
- Plumbing or user artifact?
Jobs and Scheduling Rules
- +1: MartinO, MichaelS
- Many calls into (workspace, or other contributed) API require downstream locks via ISchedulingRule
- It's often not documented what rules / locks a call requires
- If the "master Job" that's responsible for an operation requires an ISchedulingRule itself (e.g. for guaranteed sequential execution), it cannot call API functions that require other ISchedulingRule locks (because it cannot acquire them while it runs -- locks must be known before the Job runs, but it's often not known what locks will be required)
- In some situations a job want to use rules that are not known before the job starts. It should be (deadlock) safe, if a job can acquire *one* rule at a time.
Getting rid of singletons
- +1: BorisB, KevinM
- Title says it all. Singletons are bad.
- +1 DaveO (see keyboard macros above)
- Loading a file into an Editor from the Commandline; other macros executed from commandline
Verboten: Spinning the event loop
- +1: BorisB
- I regularly see hard-to reproduce bugs that are caused because client code spins the event loop (e.g. by opening a blocking dialog). It would be good to have a set of rules that govern when it is ok to spin the event loop.
Avoid Modal Dialogs
- +1 MichaelS
- Too many dialogs are modal, like preferences or the new wizards which often make it impossible to look something up while you enter data into the dialog.
- +1: DaveO
Currently, the bits we build break down as:
- RCP SDK
- Eclipse Platform Project SDK
- Eclipse SDK | Other Ganymatic Builds
A lot of RCP applications don't need to be as generic as SWT or RCP. They want a generic container that looks and works like the Workbench. The Platform Project SDK would be ideal for this purpose, but the Platform Project SDK surfaces Build and Debug bits in the UI. I propose the following factoring:
- RCP SDK
- Workbench SDK (Does not include Resource Perspective)
- Resource SDK (Includes Resource Perspective)
- Eclipse Platform Project SDK (Adds debug and build bits we currently have or maybe this goes away?)
- Eclipse SDK.....
- +1: BorisB
- We currently have (installation, instance, project) levels, what about user level / role-level Preferences? What about multiple levels of nested projects (see below)?
I'd like to see this topic be the wider subject of preference management as they are already almost unmanageable for a user. For leveling we have user level ones stored outside the workspace, team based ones shared somehow, skinning level ones likely in a CSS style sheet. To reduce clutter we need a better policy on essential preferences v.s. "it's prudent that there is a key that can be set" level ones which perhaps should go elsewhere such as advanved name/value table. Finally if we're interested in role based then it needs to be a topic onto itself since it spans not just preferences but activities etc. -- KevinM.
Launch / Debug Enhancements
- Need a Launch Stepper to execute fine-grained operations, rather than monolithic Launches
- Need extendable / modifiable Launches
- Multicore Debug Workflow (Pin&Clone, Colored Contexts)
- E4/Summit in Ottawa May 22-23