Remember what Turing-complete means: it means 'equivalent to a Turing machine.' Have you ever written a Turing machine? Have you ever written assembler? Turing-completeness merely indicates that a certain class of problems are calculable; it says nothing about how easy it is to calculate them, how long it will take or how avoidable errors are. That's what I mean when I write 'powerful.'
If Turing-completeness were all that matters, why would we bother having more than one language? After all, a one-instruction-set-computer can calculate anything too; it just takes a Very Long Time.
But can't you write code that writes code in Perl and many other scripting languages too?
Yes, but it's not really the same thing. Yes, perl, python &c have eval or similar mechanism: they can build a string and then evaluate it. But Lisp is different.
Lisp source code is actually a raw parse tree made up of lists; the first item in each list is the function, and the remaining items are the arguments thereto (there are a very small number of 'special forms' which allow one to refer to a list as a list instead of a function call and so forth). E.g. (+ 1 2 3) calls #'+, which sums its arguments. Well, since the source code is a list of lists, it's very easy to write a function to take source and transform it into something else; this function is called a macro.
A macro can be used to create any sort of special form one wants; it's also a very useful way to perform work at compile time rather than at run time.
With VS.NET and the like, most of the features I want/need are there, right out of the box.
That's also true of emacs; almost all features are already there. My point was that if perchance a desired feature isn't already implemented, then it's normally pretty easy to do so for oneself. Now, reading the manual is necessary, but that shouldn't really be an issue.
And you really oughtn't put vi and emacs in the same sentence. One is a text editor; the other is something rather more.
As for playing music in the IDE, emacs already has this: EMMS is the emacs multimedia system. The version I have is less than 5K lines of code (including whitespace & comments--it's just the output of wc -l), which includes several non-essential bits; the core is less than 2KLOC.
Perhaps you didn't learn to use emacs effectively? I've been using it full-time for three or four years, but first played with it 14 years ago, and it's only now that I'm beginning to really grok and extend it. The emacs wiki is an invaluable resource. Remember, emacs is written in (a) Lisp, and Lisp is the most powerful of programming languages. If you want a feature emacs doesn't have, it can be added; there's no feature which can't be added. But most any feature one could want has already been added, by someone; all you have to do is find it and use it.
I'm constantly discovering new features in emacs which I'd never even thought of before. If you were just using it as a glorified Notepad, then you weren't using it to its full potential--not nearly.
emacs was an IDE before there were IDEs. With SLIME, I can type the beginning of a function name, then tab and it completes; it then displays a template with the functions arguments; M-. will take me to that function's definition--the exact same for macros. I don't think you fully realise what the phrase 'emacs is an extensible text editor' implies; it implies that emacs can do everything any other IDE can do--and it's been around long enough that it probably already does, since almost certainly someone else has wanted to do it.
Not that the Eclipse plugin really has any better features in the Emacs plugin, but Eclipse's integration with source control makes it worthwhile.
You do know that emacs integrates with source control as well, right? CVS, RCS & SCCS out of the box, but there are modes to support other systems too. C-x v v checks in a file; C-x v = diffs the current version against the checked-in version; C-x v d does a directory-editing version control mode and so forth.
The really great thing about emacs is that it does just about everything. The really bad thing is that one really has to read the entire manual, and the web sites, and the discussion groups, to know how to get it to do everything...
One of the major advantages (perhaps the major advantage) of Lisp notation is macros: the ability to write code which writes code at compile time (and, even better, doesn't write some code at compile time, thus performing optimisations which speed up run time). In mathematics there's no real benefit gained thereby: one can get the same effect with any notation in math--methinks this is part of why mathematicians are so fond of inventing operators.
There's no inherent reason to prefer (get x 'y) over (get 'y x); Lisp lets you use either, as you like. And with a macro it could be as simple as (get x y) or (get y x). Or, since Lisps almost always give one more freedom with symbol names than other languages, (-> x y) or (- y x).
Flamebait?!? No, it's the truth: embryonic stem cell research is not illegal in the USA; it's just that the federal government won't pay for it (certain of the state governments, most notably California, will). Mods are on crack, it seems.
If you are an embryonic stem-cell researcher, then you know that there is no ban. Repeat, for those outside the country: there is no ban on embryonic stem cell research; those who wish to kill human beings and extract their cells will not be stopped in this country, so long as those humans are very, very young. The federal government just won't pay for it.
Just for the record, the first variant of Code Red is of unknown origin but the earliest logs point to a California source. So if they were Chinese, they were Chinese-Americans...
Because, of course, it's beyond possibility for the Chinese to have agents working in the US:-)
But it really doesn't take all that long to get settled; it's that we think it does. I make a good sum of money, but don't think I could possibly support a wife and children--but this is nonsense, as I make more money than the vast majority of the population. I'm used to going out to eat a few times a week, to spending great sums of money on myself and so forth. In short, I'm selfish. But I'm working to fix that:-)
Like you, I feel in no way ready for the responsibility and commitment of having children--but really, I am no less ready than anyone else who's had kids. Having kids makes one ready, kind of liking driving a car makes one able to drive a car (they keep raising the age to drive, with no noticeable effects). The real thing is to just bite the bullet and settle down. Much easier said than done, though.
Re:The real 90s versus outdated 00s software
on
Java Is So 90s
·
· Score: 1
Plenty of folks have pointed out problems with Java-the-language as well; it's really not that great in several ways, and has some major misfeatures in others (big one: not everything is an object).
But you do raise a point which cannot be emphasised enough: Java is many things. There's Java-the-language, which is a better C++. There's Java-the-VM, which is nothing to write home about. And there's Java-the-library, which while not always well-designed is extremely full-featured. As far as I can tell, the real selling points are that Java-the-language does memory management for the programmer, and that Java-the-library saves him from writing some code.
But anyone who's played with more advanced languages really doesn't like Java-the-language. It's kinda sad.
Re:The real 90s versus outdated 00s software
on
Java Is So 90s
·
· Score: 1
I guess my big concern with LAMP is what the hell is the P? PHP? Python? Perl?
PostgreSQL. What--LAMP doesn't mean LISP, Araneida, eMacs & PostgreSQL?!?
Also, Kvas (the drink in episode 2) is not a "Russian soft drink". It's a non-alcoholic grain (sometimes veggie) fermented drink (and it is downright nasty).
Fermented -> alcoholic. Fermentation is the conversion of sugar into alcohol and carbon dioxide. Kvass is very low alcohol generally--although I've known Russian monks who brewed it with quite a kick...
Well, my web browser (Firefox) gives me emacs keys. But my other web browser actually lives in emacs--it's emacs-w3m:-)
What sort of compilation support does vim offer? I hadn't heard about that--I used to alwasy do:!make, which of course is nice enough but doesn't let one jump to errors while still continuing to compile.
C-x v = gives a diff; a quick hack with defadvice on vc-next-action would force a diff on each commit. A better solution would be for vc-next-action to show a diff before each commit. Should be pretty easy to whip up, actually.
But yeah, I can see how if ange-ftp or TRAMP (or NFS) doesn't do the job than needing to fire up and close emacs left and right would quickly get annoying. It's a fast startup compared to most GUI apps, but it's an ice age compared to vi. And as I noted, depending on the editing one does vi could be the superior solution in many instances anyway.
But for most of what I do, emacs is da bomb:-)
Re:MockLisp is to Lisp as JavaScript is to Java
on
The Future of Emacs
·
· Score: 1
But of course buffer-local variables are an asset in a text editor; it makes writing editing modes and such much easier. You really ought to read EMACS: The Extensible, Customizable Display Editor, which documents the reasons for some of the apparently odd design decisions (e.g. dynamic scope and such). It turns out that there are very good reasons for many of them.
For my part, I'd like to have an emacs rewritten in a modified Common Lisp. But that's just me. But elisp really isn't all that unlispy. It's not like Scheme, but Scheme has its own issues, and is hardly the end-all, be-all of Lisps.
Yeah, vi is a useful editor in many ways too. But I like being able to use the same keys in everything I do, from browsing the web to reading my email to using newsgroups to coding in Lisp or Python or C to editing my blog. And so far emacs is the only editor which is extensible enough for me to do that.
You're a bit of an unusual case, methinks: not too many people have gotten deeply into emacs only to return to vi. Heck, for me M-x compile was reason enough to stay. Well, and C-x v v (which prompts for a comment, then checks a file into CVS, RCS or SCCS version control, automatically picking the correct system).
The one thing that emacs really shines at is line-oriented editing, e.g. of config files. yy, dd, p & . are all wonderful commands--I wish emacs had something similar. It probably does of course, and I just don't know it:-)
Anyway, as a sysadmin I use vi for editing system files, but for just about everything else it's emacs.
Your point about slow start-up is accurate; OTOH, once one has an emacs session started up there's really no need to leave it or start another; my emacs sessions generally have uptimes measured in months.
You make an exceedingly good point, that perhaps the anger that would have come from deChristianising (how should one capitalise that?) the Chronicles of Narnia served to prevent any serious damage to the tale (although there is one bit which, I believe, undermines Lewis's work).
But I'm curious about your throwaway line 'Mel Gibson's underhanded "bash the left" campaign to publicise The Passion was, well, underhanded and divisive'; I'm pretty sure at the time that there was a lot of left-wing hand-wringing over how anti-Semitic the film might possibly be, even before anyone had seen it. Not that I'm defending that film--what I saw of it looked unlovely and areligious to me.
BoxOfficeMojo called LtW&tW 'Christian/Mormon.' I'm hoping that this means Christian or Mormon, not 'Type Christian, subtype Mormon.' 'Cause C.S. Lewis definitely wasn't writing anything for Mormons...
I detested The Last Battle too at that time of my life, for many of the same reasons as your daughter. I wanted more Narnia stories, and here they were, ended. But now that I'm older, I actually like it quite a bit. There's the anti-Aslan Shift and his dupes and puppets, just as there will someday be an Antichrist and his dupes and puppets. There are the people acquiescing in great evil (e.g. the murder of the dryads and the enslavement of the Talking Beasts) because they think it's Aslan's will and are too foolish to see that it couldn't be, just as there will be those who think they are doing God's Will when they do evil. There are the dwarves who fight both the Calormenes and their king, doing the Calormene's work, just as their will be those who turn their backs on both good and evil and thus achieve evil's ends. And in the end the world ends and the good receive their reward, just as someday our world will end and the good will receive their reward. There's even a bit which illustrates salvation for the 'good heathen,' the young Calormene soldier who had led a good life despite worshipping the evil Tash. And it illustrates a point of view a hold to, that Hell is not so much a place one is sent as a place one makes: the dwarves who are paradise but think they are in the stable-muck set me to thinking of folks who are in Heaven but hate it because they hate goodness, and thus make a Hell for themselves.
The problem with the story is that it's really not written for children, unlike the rest of them; it's the sort of thing one appreciates when older and more intellectual. The real pity is that there weren't more stories like The Horse and His Boy and The Silver Chair, which were good escapist fantasy for kids.
Aslan is the King over even the High King--the King of Kings, as it were. He is the son of the Emperor Over the Sea, as Christ is the Son of God. His sacrifice redeems Edmund's sin, as Christ's redeemed Adam's. The White Witch, of course, represents Satan and sin, and is initially attractive (as sin tends to be); it's only when Edmund turns to her that she is revealed as brutal (as with sin, we don't realise how terrible it is until we give ourselves over to it); Edmund's salvation is Aslan's doing, as above.
In the final book, The Last Battle, the world ends and Aslan sits in judgement over all who have ever lived in Narnia; the good go on into a paridise and the evil are swallowed up into shadow.
Now the parallels aren't exact, as in The Magician's Nephew it's Aslan who sings the world into existence, as opposed to Christ, Who is not the creator (rather, His Father is). That book, BTW, would be what comes closest to teach 'intelligent design,' as it portrays Aslan singing the world of Narnia into existence from a void, filling it with land, and then calling forth the talking beasts.
I presume you know that 'intelligent design' covers everything from young-earth creationism to God-the-watchmaker...
Re:Emacs vs Eclipse: A losing battle
on
The Future of Emacs
·
· Score: 3, Interesting
Actually, I think that you are missing the major advantage
that Eclipse has over Emacs, which is that it's written in Java.
That's an advantage?!? Most believe that it's a liability. Sure, as you point out, nowadays Lisp programmers (particularly elisp programmers) are fewer and further between, and hence libraries harder to find. But Lisp is almost universally acknowledged to be a superior language to Java, and offers features essential to writing a programmable text editor. And elisp really isn't that hard; it is different, but the learning curve is fairly shallow: one can easily go from customising variables to writing functions to customising keybindings to writing whole modes.
True, emacs is an acquired taste, but like most such it's worth the effort to acquire.
To go to a variable's instantiation, just use M-.; flyspell-mode provides underlining of misspelt words; neither of these takes hours to find, and in fact M-. is built into the various emacs code-editing modes.
'Bizarre, mnemonic-less keybindings'?!? C-s searches forward; C-r searches backward; C-x and then another key is used for filing commands: C-x C-f finds a file; C-x C-w writes a file under a different name; C-x C-s saves a file; M-u uppercases a word; M-l lowercases a word; M-c capitalises a word; C-n goes to the next line; C-p goes to the previous line; C-f moves the cursor forward and C-b backward; M-f & M-b moves backward by words; C-k kills to the end of the line; C-y yanks the current killed text into the current point (the point in the text where the cursor is). These all seem pretty mnemonic to me.
Now, these are not the same as those used by Apple almost a decade after emacs's birth, nor are they those used my Microsoft in imitation of Apple. But that's not the fault of emacs.
I will also admit that some of the keybindings aren't particularly mnemonic: C-u for a prefix argument, or M-q to wrap text. But then, neither are Command-W to close or Command-Z to undo...
And no other editor is nearly as extensible, flexible or useful for so many things as emacs. Until another catches up, I can't see switching. I've a suspicion, though, that ust as any language as powerful as Lisp is really Lisp, any editor as powerful as emacs would be emacs.
If Turing-completeness were all that matters, why would we bother having more than one language? After all, a one-instruction-set-computer can calculate anything too; it just takes a Very Long Time.
Yes, but it's not really the same thing. Yes, perl, python &c have eval or similar mechanism: they can build a string and then evaluate it. But Lisp is different.
Lisp source code is actually a raw parse tree made up of lists; the first item in each list is the function, and the remaining items are the arguments thereto (there are a very small number of 'special forms' which allow one to refer to a list as a list instead of a function call and so forth). E.g. (+ 1 2 3) calls #'+, which sums its arguments. Well, since the source code is a list of lists, it's very easy to write a function to take source and transform it into something else; this function is called a macro.
A macro can be used to create any sort of special form one wants; it's also a very useful way to perform work at compile time rather than at run time.
That's also true of emacs; almost all features are already there. My point was that if perchance a desired feature isn't already implemented, then it's normally pretty easy to do so for oneself. Now, reading the manual is necessary, but that shouldn't really be an issue.
And you really oughtn't put vi and emacs in the same sentence. One is a text editor; the other is something rather more.
As for playing music in the IDE, emacs already has this: EMMS is the emacs multimedia system. The version I have is less than 5K lines of code (including whitespace & comments--it's just the output of wc -l), which includes several non-essential bits; the core is less than 2KLOC.
I'm constantly discovering new features in emacs which I'd never even thought of before. If you were just using it as a glorified Notepad, then you weren't using it to its full potential--not nearly.
emacs was an IDE before there were IDEs. With SLIME, I can type the beginning of a function name, then tab and it completes; it then displays a template with the functions arguments; M-. will take me to that function's definition--the exact same for macros. I don't think you fully realise what the phrase 'emacs is an extensible text editor' implies; it implies that emacs can do everything any other IDE can do--and it's been around long enough that it probably already does, since almost certainly someone else has wanted to do it.
You do know that emacs integrates with source control as well, right? CVS, RCS & SCCS out of the box, but there are modes to support other systems too. C-x v v checks in a file; C-x v = diffs the current version against the checked-in version; C-x v d does a directory-editing version control mode and so forth.
The really great thing about emacs is that it does just about everything. The really bad thing is that one really has to read the entire manual, and the web sites, and the discussion groups, to know how to get it to do everything...
One of the major advantages (perhaps the major advantage) of Lisp notation is macros: the ability to write code which writes code at compile time (and, even better, doesn't write some code at compile time, thus performing optimisations which speed up run time). In mathematics there's no real benefit gained thereby: one can get the same effect with any notation in math--methinks this is part of why mathematicians are so fond of inventing operators.
There's no inherent reason to prefer (get x 'y) over (get 'y x); Lisp lets you use either, as you like. And with a macro it could be as simple as (get x y) or (get y x). Or, since Lisps almost always give one more freedom with symbol names than other languages, (-> x y) or (- y x).
Flamebait?!? No, it's the truth: embryonic stem cell research is not illegal in the USA; it's just that the federal government won't pay for it (certain of the state governments, most notably California, will). Mods are on crack, it seems.
If you are an embryonic stem-cell researcher, then you know that there is no ban. Repeat, for those outside the country: there is no ban on embryonic stem cell research; those who wish to kill human beings and extract their cells will not be stopped in this country, so long as those humans are very, very young. The federal government just won't pay for it.
Because, of course, it's beyond possibility for the Chinese to have agents working in the US:-)
Like you, I feel in no way ready for the responsibility and commitment of having children--but really, I am no less ready than anyone else who's had kids. Having kids makes one ready, kind of liking driving a car makes one able to drive a car (they keep raising the age to drive, with no noticeable effects). The real thing is to just bite the bullet and settle down. Much easier said than done, though.
But you do raise a point which cannot be emphasised enough: Java is many things. There's Java-the-language, which is a better C++. There's Java-the-VM, which is nothing to write home about. And there's Java-the-library, which while not always well-designed is extremely full-featured. As far as I can tell, the real selling points are that Java-the-language does memory management for the programmer, and that Java-the-library saves him from writing some code.
But anyone who's played with more advanced languages really doesn't like Java-the-language. It's kinda sad.
PostgreSQL. What--LAMP doesn't mean LISP, Araneida, eMacs & PostgreSQL?!?
Fermented -> alcoholic. Fermentation is the conversion of sugar into alcohol and carbon dioxide. Kvass is very low alcohol generally--although I've known Russian monks who brewed it with quite a kick...
What sort of compilation support does vim offer? I hadn't heard about that--I used to alwasy do :!make, which of course is nice enough but doesn't let one jump to errors while still continuing to compile.
C-x v = gives a diff; a quick hack with defadvice on vc-next-action would force a diff on each commit. A better solution would be for vc-next-action to show a diff before each commit. Should be pretty easy to whip up, actually.
But yeah, I can see how if ange-ftp or TRAMP (or NFS) doesn't do the job than needing to fire up and close emacs left and right would quickly get annoying. It's a fast startup compared to most GUI apps, but it's an ice age compared to vi. And as I noted, depending on the editing one does vi could be the superior solution in many instances anyway.
But for most of what I do, emacs is da bomb:-)
For my part, I'd like to have an emacs rewritten in a modified Common Lisp. But that's just me. But elisp really isn't all that unlispy. It's not like Scheme, but Scheme has its own issues, and is hardly the end-all, be-all of Lisps.
You're a bit of an unusual case, methinks: not too many people have gotten deeply into emacs only to return to vi. Heck, for me M-x compile was reason enough to stay. Well, and C-x v v (which prompts for a comment, then checks a file into CVS, RCS or SCCS version control, automatically picking the correct system).
The one thing that emacs really shines at is line-oriented editing, e.g. of config files. yy, dd, p & . are all wonderful commands--I wish emacs had something similar. It probably does of course, and I just don't know it:-)
Anyway, as a sysadmin I use vi for editing system files, but for just about everything else it's emacs.
Your point about slow start-up is accurate; OTOH, once one has an emacs session started up there's really no need to leave it or start another; my emacs sessions generally have uptimes measured in months.
But I'm curious about your throwaway line 'Mel Gibson's underhanded "bash the left" campaign to publicise The Passion was, well, underhanded and divisive'; I'm pretty sure at the time that there was a lot of left-wing hand-wringing over how anti-Semitic the film might possibly be, even before anyone had seen it. Not that I'm defending that film--what I saw of it looked unlovely and areligious to me.
BoxOfficeMojo called LtW&tW 'Christian/Mormon.' I'm hoping that this means Christian or Mormon, not 'Type Christian, subtype Mormon.' 'Cause C.S. Lewis definitely wasn't writing anything for Mormons...
The problem with the story is that it's really not written for children, unlike the rest of them; it's the sort of thing one appreciates when older and more intellectual. The real pity is that there weren't more stories like The Horse and His Boy and The Silver Chair, which were good escapist fantasy for kids.
In the final book, The Last Battle, the world ends and Aslan sits in judgement over all who have ever lived in Narnia; the good go on into a paridise and the evil are swallowed up into shadow.
Now the parallels aren't exact, as in The Magician's Nephew it's Aslan who sings the world into existence, as opposed to Christ, Who is not the creator (rather, His Father is). That book, BTW, would be what comes closest to teach 'intelligent design,' as it portrays Aslan singing the world of Narnia into existence from a void, filling it with land, and then calling forth the talking beasts.
I presume you know that 'intelligent design' covers everything from young-earth creationism to God-the-watchmaker...
That's an advantage?!? Most believe that it's a liability. Sure, as you point out, nowadays Lisp programmers (particularly elisp programmers) are fewer and further between, and hence libraries harder to find. But Lisp is almost universally acknowledged to be a superior language to Java, and offers features essential to writing a programmable text editor. And elisp really isn't that hard; it is different, but the learning curve is fairly shallow: one can easily go from customising variables to writing functions to customising keybindings to writing whole modes.
True, emacs is an acquired taste, but like most such it's worth the effort to acquire.
To go to a variable's instantiation, just use M-.; flyspell-mode provides underlining of misspelt words; neither of these takes hours to find, and in fact M-. is built into the various emacs code-editing modes.
Now, these are not the same as those used by Apple almost a decade after emacs's birth, nor are they those used my Microsoft in imitation of Apple. But that's not the fault of emacs.
I will also admit that some of the keybindings aren't particularly mnemonic: C-u for a prefix argument, or M-q to wrap text. But then, neither are Command-W to close or Command-Z to undo...
And no other editor is nearly as extensible, flexible or useful for so many things as emacs. Until another catches up, I can't see switching. I've a suspicion, though, that ust as any language as powerful as Lisp is really Lisp, any editor as powerful as emacs would be emacs.