While we're at it: Didn't the Windows API, back in the days of "cooperative multitasking" include a function "keepWindowsAlive()"? Worked pretty well so far.
Clearly separated from the base system it is. Sure, it is still possible that my Apache and my mod_frobnicate won't play together, the ports are basically out of reach from a QA standpoint. But the kernel and the basic userland tools, basically the POSIX stuff and them some, can be expected to work fine together. Even with "imported" stuff actually developed elsewhere,like GCC or BIND, you get more safety, simply because the separation makes the whole much more manageable.
Something similar: It would be nice if the package management system would remember what I only installed as a dependency of something else, and would remove it when I deinstall the other package (after asking me, of course).
For example, if a kernel developer makes a change that affects a utility then they normally just go ahead and make the change to the utility as well.
This innocent little sentence sums up one of the most important reasons to prefer BSD over GNU/Linux (or make that RedHat/GNU/Linux, SuSE/GNU/Linux...). It is really nice to have a coordinated group responsible for a complete, working system, instead of a distributor that merely duct-tapes together unrelated, each on their own incomplete, parts.
There's little point standardising on rpm (because thats what the LSB says) or any other package management system unless packages are named consistently.
I'd say that is a specific problem of RPM (or the way it's used in practice). It could simple look for an executable perl$PERLVERSION in $PATH, or even test the output of perl --version or something.
On the other hand, you'd better know when to stop with this, or you'll end up reinventing autoconf...
I guess it is rather important that actually creating the packages is easy, so that I as a mere user am likely to not have to bypass the package management system when I happen to want to use some oddball software, or a newer version than my distro/OS includes.
That is one of the reasons for me to like *BSD so much: Writing a port is not much harder than saying where you got the sources from and what files it does install (and that part can be automated, even), so it actually saves work keeping a nice, clean system. It may be just me, but I never bothered to build my own RPMs or DEBs when I was using Linux.
"Gone are the days"? WTF? Browsers have never been closer to spec conformance than today. (Well, possibly except WorldWideWeb.app, being written by TBL together with the first HTML spec).
Sure, it is still amazing that there is no Browser fully conforming to HTML 4 or CSS 2, both being W3C recs for years, but to what kind of "standard" would Netscape 4 possibly conform?
and the usual geek attitude of "if we implement it, it will be better". Nothing could be further from the truth, of course.
The OpenOffice people, the Mozilla people, the KDE people, the GIMP people, etc would probably beg to differ.
Unfortunatly, all but the Mozilla guys would be wrong, and even them would only be right in the eyes of users that consider "has useful features" a more worthwhile development goal than "comes preinstalled anyway", which are depressingly few.
Looks interesting, however there are some things that bother me:
It seems to require some failing tests that are to be fixed before you can create a development branch. How does this mix with refactoring? Do you have to invent a test for "This piece of code should be more elegant", or what?
Is it possible to integrate the mandatory testing with an existing testing framework like one of the xUnits? Writing a shell script for each test case seems to be stupid.
How about IDE integration? An Emacs mode?
In general, what if I don't like something about the process it wants to enforce? Is it flexible enough to be adapted to local policy? Is it really a good idea to couple revision management and workflow? (It surely is not the "Unix way", which it like to integrate well with)
Metaclasses (meaning classes whos instances are in turn classes) are, naturally, templates.
How so? I'd say the only natural thing would be if they were, well, classes.
Higher order functions can be implemented using templates (see boost::function [boost.org].
Sure, boost is cool. However, it still feels nicer to have a language that is well prepared to pass closures around freely.
BTW, even in Java people use poor man's HOFs, namely in form of anonymous inner classes. Hardly elegant, IMHO.
Macroses are external to the language, use cpp at will.
The C preprocessor is indeed external to the language, but it doesn't have to be that way. Think Lisp macros, or CamlP4 for Objective Caml, where you deal with language elements structurally, not just modify text.
I use it too, actually. (And played around with Poseidon, a commercial derivation with a free-as-in-beer "community edition"). Most parts of it are great. However, either their model editor is crap, or I am too damn stupid to use it properly. For example, I haven't been able to move an Actor in a Use Case diagram without the associations getting messed up in surprising and hard to fix ways. Those are details, but it's still annoying.
That said, I don't use the latest version, so it might be better now.
I don't have experience with visio, but I thought it was based on rational technology.
No, Microsoft bought it from a company called "Visio Corp.", formerly "Shareware Corp." that developed it from scratch. It isn't too similar to anything Rational, actually.
Yes, but can Visio generate C++ from your UML, let you modify the C++, then import it back into the UML editor with all your changes intact?
Dunno about C++, but the Visio version in Visual Studio.NET Enterprise Architect does roundtrip engineering at least for database models (which is, of course, way easier). I doubt that we'll have to wait too long for full roundtrip engineering for C#, maybe for more or even all.NET languages.
There seems to be a lot of money to make in this market, and new and cool products pop up frequently. Microsoft won't just let the other guys have all the fun.
Yes, where it makes sense. Just as in the proprietary world.
I guess the lack of UML-documented free software projects is not due to it not being neccessary, but to the lack of free UML tools. ArgoUML is quite a cool project, but unfortunatly it's a major PITA to actually draw models with it. Of course, there are several other UML tools at sourceforge, but, as usual, most of them are still unusable, and will always be.
Um, it's perfectly OK to write an OS in Lisp. Remember Genera, or the other LispM OSes?
Those operating systems were written in Lisp to about the same extent that, for example, Linux is written in C, that is, about everything except some assembler parts was Lisp. And it all was at the control of the user, at runtime. You could debug and browse the OS sources, modify them on the fly (no rebooting just because you changed something about the filesystem implementation or other trivialities), etc. Pretty impressive environments, even from todays point of view.
You can even still buy Genera for Alphas, but it's not exactly cheap, and finding a Symbolics representative may prove harder than someone selling WinXP copies...
But anyway, I'm not saying anything new in here, it's just that people wont get it, or that they'll forget.
Sad, but true... It is really amazing to see what Lisp or Smalltalk users had years ago, and how only parts of this show up in recent "innovative" languages and tools. Sometimes I think that the history of computing should be made an obligatory part of CS education.
But hey, should I care if my competitors still use half-assed languages and keep hiring 'Java-style' programmers?
Quote Richard Gabriel, "our competitors will be spending all their time trying to figure
out that it's really possible we're doing what we're doing, because
they will be thinking in terms of customization at compile time or
link time, not at runtime." (Although I don't agree with every aspect of his rant.)
It's not written in any version of C. It's written in GCC.
While we're at it: Didn't the Windows API, back in the days of "cooperative multitasking" include a function "keepWindowsAlive()"? Worked pretty well so far.
On Error GoTo Hell
Or in general
GoTo ConsideredHarmful
GNU has a whole page with (more or less) funny variable names
Something similar: It would be nice if the package management system would remember what I only installed as a dependency of something else, and would remove it when I deinstall the other package (after asking me, of course).
But what will be number 2 in the decades until it's ready?
On the other hand, you'd better know when to stop with this, or you'll end up reinventing autoconf...
That is one of the reasons for me to like *BSD so much: Writing a port is not much harder than saying where you got the sources from and what files it does install (and that part can be automated, even), so it actually saves work keeping a nice, clean system. It may be just me, but I never bothered to build my own RPMs or DEBs when I was using Linux.
Sure, it is still amazing that there is no Browser fully conforming to HTML 4 or CSS 2, both being W3C recs for years, but to what kind of "standard" would Netscape 4 possibly conform?
With wich of the 193 meanings of "static" in C++ would you expect it to be consistent?
BTW, even in Java people use poor man's HOFs, namely in form of anonymous inner classes. Hardly elegant, IMHO.
The C preprocessor is indeed external to the language, but it doesn't have to be that way. Think Lisp macros, or CamlP4 for Objective Caml, where you deal with language elements structurally, not just modify text.Why do you think they call it a "release candidate"?
- Metaclasses
- Higher Order Functions
- Multiple Inheritance
- Multimethods
- Integration of primitive types and classes
- Makros
- A GUI library that is not dog slow (Swing) or bothers you with memory management (SWT)
- A Free implementation. Maybe a standard would help, too.
Feel free to complete...Maybe w3m would be a better choice, it also deals with tables (and even frames, but that doesn't seem to matter here).
That said, I don't use the latest version, so it might be better now.
There seems to be a lot of money to make in this market, and new and cool products pop up frequently. Microsoft won't just let the other guys have all the fun.
I guess the lack of UML-documented free software projects is not due to it not being neccessary, but to the lack of free UML tools. ArgoUML is quite a cool project, but unfortunatly it's a major PITA to actually draw models with it. Of course, there are several other UML tools at sourceforge, but, as usual, most of them are still unusable, and will always be.
I always felt that Brainfuck was pretty similar to Visual Basic: Both are simple to learn, but it's hard to do something iteresting with them.
Those operating systems were written in Lisp to about the same extent that, for example, Linux is written in C, that is, about everything except some assembler parts was Lisp. And it all was at the control of the user, at runtime. You could debug and browse the OS sources, modify them on the fly (no rebooting just because you changed something about the filesystem implementation or other trivialities), etc. Pretty impressive environments, even from todays point of view.
You can even still buy Genera for Alphas, but it's not exactly cheap, and finding a Symbolics representative may prove harder than someone selling WinXP copies...
Sad, but true... It is really amazing to see what Lisp or Smalltalk users had years ago, and how only parts of this show up in recent "innovative" languages and tools. Sometimes I think that the history of computing should be made an obligatory part of CS education. Quote Richard Gabriel, "our competitors will be spending all their time trying to figure out that it's really possible we're doing what we're doing, because they will be thinking in terms of customization at compile time or link time, not at runtime." (Although I don't agree with every aspect of his rant.)