2004-02-07 09:53:02 UTC
> How would LuxAsm be different from a customized front end on Eclipse?
Right, I've not used Eclipse so I'm going by their website information here...looking at that then, yes, there's certainly a kind of "similarity of purpose" on the modular IDE front...in fact, it's nice to know that one of my usual "mad ideas" - as I was actually unaware of Eclipse - is already shown to be a good idea that works...
First, though, Eclipse plug-ins are written in Java and XML...to switch to this would be a radical departure from the original concepts, such as LuxAsm being written in LuxAsm itself and being completely assembly based...this would change the nature of the project completely and, therefore, simply I'm not sure if it's what everyone here signed up for...
Second, LuxAsm is - to sound a bit like Rene here - "specific"...the grounding in a similar "modular" architecture to Eclipse isn't the purpose of the project but simply a case of creating good, solid, flexible foundations on which to base things...
For example, the LuxAsm components don't merely "integrate" with the IDE but integrate _with each other_...as an example of what I mean, there was an idea I had that there would be a "project tree" module, responsible for presenting the file hierarchy and controlling the module, which actually is really just a "front-end" onto MAKE...now, the main actual LuxAsm components are designed to work together...and for something like MAKE, the "project tree" module can actually communicate directly with the "LuxAsm assembler" module and ask it to parse the files in the project tree, looking for "include" statements so that it can generate a reliable list of "dependencies" and then these can be added to the project tree view...so, you would add a file to your project and the "project tree" module would then call on the "assembler" module to quickly parse the file and return its dependencies, which are then automatically added to the project tree view...to the user, they simply drag and drog a file into the project tree and - "as if by magic" - the include files and auto-dependencies are automatically attached onto the file (_reliable_ information too, as it is the _assembler_ which has located this information so what it says is accurate because it is the actual tool that will be assembling these files...rather than having the "prject tree" module attempt its own quick parsing for "include" statements...which would either be a complete duplication of the assembler's parsing code to be accurate or would only do some "text search" for the word "include" and could risk being inaccurate as, say, though is contrived as it would be easy to avoid in practice, the word "include" is actually inside a comment and isn't a real include...or, as perhaps a better example, with some "IncludeOnce" functionality (HLA has this, for example), it can _know_ accurately that the include file was already included once before)...
Another example is that the text editor could communicate with the assembler also in order to also ask it to only parse the file, returning information about the source code that can be used by the text editor to provide _fine-grained_ and _accurate_ syntax-highlighting...most syntax highlighters tend to simply parse a file looking for keywords and operators and such...this, again, either duplicates the assembler's parser completely to be accurate or risks incorrectly parsing the file and colouring things the wrong colour...
Further, simply glancing over a source file means that most of these syntax highlighters aren't fine-grained enough...for instance, all "user identifiers" are a single colour...but if we're getting accurate information from the assembler's parser itself then we can colour much more precise categories like "function", "macro", "data type", "class", "instance", "data variable", etc. and can colour these separately...this is a level of functionality not usually found elsewhere because they don't use such _deep_ integration between components...
The ultimate intention with LuxAsm is just such "deep integration"...the "modular" approach is NOT really to separate these things functionally at all - we want them not only integrated but I'd say "deeply integrated" - but is there to provide a flexible framework for development and extension...in other words, when they are "modules", I can be working on one, Daniel on another, C on another, Frank refining the text editor to handle integration with C's new module, etc....
We're not "competing" with Eclipse; It's a general-purpose tool integration suite thingy...that is not our primary intention at all...we are going for, in spirit, something like Rene's RosAsm in so far as a "deeply integrated" suite of tools (actually, more so than RosAsm, I'd say) for, _specifically_, development of assembly language applications on Linux / X-Windows...
The use of a "framework" is a _developmental_ thing...it's a good solid set of _foundations_ to work off that is automatically thinking in terms of "piecemeal" / "future expansion" / "ready for version 2" / etc....it also opens up the possibility to, yes, add third-party tools and create "filters" for accessing NASM...and, likely, at first, using NASM and MAKE and other third-party tools is a way to get things up and running fast (just "borrowing" NASM until LuxAsm's own assembler is coded :)...if, indeed, we do develop a NASM "filter" simply to act as a "placeholder" for the LuxAsm assembler (or MAKE for our own "project tree" stuff or GDB for our own debugger and so forth) then we might as well keep those lying around for users to use, if they really want...but they probably _won't_ want to in general because the LuxAsm components will be "deeply integrated" to bring things like the two examples I gave above: accurate drag and drop auto-dependency, accurate fine-grained syntax highlighting...
This was one thing that Rene was correct in thinking towards but I don't feel properly exploited in his RosAsm sufficiently (if I'm harsh, I could be pressed to say "at all" ;)...when tools are very "deeply integrated", there are levels of functionality and features possible that simply plugging an assembler into some generic IDE _can't_ match...
On this point (and probably _only_ this point ;), we are supportive of Rene's "specific" concept...so, indeed, we're NOT some "generic" Java plug-in passing XML to a general-purpose IDE...that stuff is, of course, utterly admirable and has its purpose...but the intention here is "specific" and "deeply integrated" so that the features provided to the programmer using LuxAsm are literally "made to measure"...amongst the nonsense Rene spouts, this was a diamond in the mud...
It's a decision some don't want to take, as we can hear from all the talk of "portability" and Java and XML; But, for example, when you choose to program in ASM, you have implicitly made just such a "specific" decision: "I am _sacrificing_ portability to other CPUs in order to be able to _specifically_ tailor my code to exploit this CPU to its maximum capabilities"...
There is, of course, NOTHING wrong with "portability" in the slightest (I'll, indeed, be using some of the work on X-Windows here to help Randy introduce some more "portability" to his HLA package :)...but what we're talking about is _making a decision_...a firm decision...indeed, imagine me banging my fist on the table as I say it: "this program is for Linux...I don't care about Sun Sparcs, I don't want to do this for Windows"...and once you've made that firm decision, many things are, indeed, _extraneous_ and _unnecessary_...do we need to be "portable" to a washing machine? Nope...do we need to use a "portability" library here? Nope...introducing these things, therefore, will add a _redundancy_ to the program...it's jumping through "portability hoops" to gain flexibility to work on an iMac but we actually have no intention of being on that platform so going through big-endian -> little-endian -> big-endian translations would be a pure waste of time for our program...making the firm decision - as, implicitly, the choice of using ASM is already - is completely 100% a "trade-off"...but the interesting thing here is that we're making that trade-off in favour of performance as far as possible, not the usual "portability is an unquestionable god" non-decision...
If only Rene phrased it that well, eh? People might actually listen to him...in this regard - although, it is _doing again_, not "porting" - LuxAsm was and is "descended" from RosAsm...the way I like to phrase this is: "we're doing what Rene should have done in the first place"...
So, how is it different from writing some portable plug-ins for Eclipse? This, I'm sure, will be an unsatisfactory answer to many but the difference is _attitude_, so to speak...Rene might call it "philosophy" but I find that slightly pretenious, to be honest...
It might seem odd - Rene doesn't understand it - to base "specific" and "deeply integrated" on top of "modular"...but, well, this is a _practical_ thing mostly...development will be very flexible under such a system...but, also, there is still "specific" thinking behind this...X-Windows itself is client / server, ELF has dynamic linking, GUIs are event-driven, you can "mix and match" your toolkits and window managers, etc....so, we are _matching our environment_ as it happens to be and that is "specific"...yet, unlike Rene, it's still perfectly loose for the user to _choose_ "specific" or not, as they need...Rene never quite understood this but firm decisions don't require fascist police states to enforce them...the correctness of your decision is its own enforcer...
That's a weird answer, isn't it? But, strangely, this is the answer...it just seems odd because, usually, people make their decisions in the opposite direction: "make it portable", "don't tie it down", etc....but if you _can_ or _want_ to tie it down then you're choosing this specifically (e.g. "I want to be entirely 'ethical' and 'open-source' that my efforts are directed soley at Linux and UNIX", as LuxAsm itself is choosing to do...but, over on Win32, someone might choose "90+% of home users are PCs running Windows...that's sufficient market for what I want...let me tailor this program, therefore, specifically to that market and cater directly to it", as many computer games and things also choose...to say "okay, this is an X-box game" and then code it for the X-box specifically...yes, of course, you could be "generic" instead..."portable" source code...but this carries an implicit _sacrifice_ to make it work...neither decision - despite a lot of hype about "portability" or, conversely, Rene insisting that nothing should ever be "generic" at all - is actually "right" automatically...what is "correct" depends entirely on the application and its needs...
And the fundamental concept here is - in a way many things don't do, mandating XML this or Java that - that the decision is _left open_...because, truthfully, some academic in some "ivory tower" dictating "never use GOTO!", "assembly is dead!", "all applications should be in Java and XML to be portable!", etc. is NOT qualified to make these decisions...they are not, so to speak, working at the coalface...they should, therefore, be _left open_ to the developer to choose...of course, one decision _has_ been chosen with LuxAsm already: it's an assembler...but that's not a philosophical thing in that case, it's just that we're all ASM coders and want to write and promote ASM on Linux and X-Windows...
"Specifically generic" or "generically specific", take your pick...I already know that Rene nor our "ivory tower" academic would make this decision because they'd choose their "everything should be specific!" or "everything should be generic!" extreme opinions...but I would say, if you're such an "extremeist" - whatever the topic - you're simply wrong...some situation will NOT be appropriate to your fixed decision...
Rene won't recognise it but this the non-insane version of what he was basically trying to express and achieve with RosAsm...LuxAsm, as I say, is doing what Rene wanted to do but doing it _properly_ ;)