triffid has quit [Remote host closed the connection]
Patternmaster has quit [Changing host]
Patternmaster has joined #commonlisp
aeth has joined #commonlisp
triffid has joined #commonlisp
deadmarshal_ has joined #commonlisp
vxe420 has joined #commonlisp
kaskal has joined #commonlisp
habamax has joined #commonlisp
jeosol has joined #commonlisp
yitzi has quit [Remote host closed the connection]
ronald_ has quit [Ping timeout: 246 seconds]
ronald_ has joined #commonlisp
triffid has quit [Remote host closed the connection]
speskk has quit [Read error: Connection reset by peer]
speskk has joined #commonlisp
azimut has quit [Ping timeout: 246 seconds]
ronald_ has quit [Ping timeout: 255 seconds]
waleee has quit [Ping timeout: 248 seconds]
notzmv has joined #commonlisp
mathrick has joined #commonlisp
yitzi has joined #commonlisp
zaymington has quit [Remote host closed the connection]
zaymington has joined #commonlisp
`Pixel_Outlaw has joined #commonlisp
fosskers has joined #commonlisp
yitzi has quit [Remote host closed the connection]
fosskers has quit [Remote host closed the connection]
yosef` has joined #commonlisp
bilegeek has joined #commonlisp
jeffrey has quit [Quit: Client quit]
ronald_ has joined #commonlisp
fosskers has joined #commonlisp
tyson2 has quit [Remote host closed the connection]
mehbark has joined #commonlisp
<beach>
doulos05: Many of us have come to the conclusion that it is not such a great idea to define specific constructors, even though Keene's book recommends them.
<fosskers>
beach: To clarify, you mean the `make-<structname>` functions that are auto-generated?
<beach>
No, I mean the make-<mumble> that you create your self and that do (make-instance '<mumble>...)
<beach>
*yourself
<beach>
... as doulos05 wrote before.
tertek_ has quit [Quit: %quit%]
tertek has joined #commonlisp
yosef` has quit [Quit: Client closed]
yosef` has joined #commonlisp
<fosskers>
Right, same thing just for structs/classes. What are the claimed benefits of custom constructors? Validation of input?
<beach>
I don't remember all the details. It's in Keene's book. Input validation I think is one aspect. Do you want me to look it up?
<beach>
Page 25...
wonko-the-sane has quit [Remote host closed the connection]
wonko-the-sane has joined #commonlisp
<beach>
We recommend that you define constructor functions to be used by the clients to make instances. A constructor is a tailored way to make an instance of a given class; its name usually describes the kind of instance it creates.
<beach>
A constructor provides a more abstract external interface than does make-instance, because its name describes its higher-level purpose (make a null lock) instead of its internal implementation (make an instance of the class null-lock).
<beach>
Another advante is that a constructor can have reqired arguments. In constrast, all arguments to make-instance except for the first are optional. We might prefer to require that users initialize thae name of a lock.
<beach>
*advantage. [there might be more mistakes]
mehbark has quit [Remote host closed the connection]
<aeth>
the nice thing about make-<foo> is that it hides what you're returning
<aeth>
could be anything
<aeth>
the not-so-nice thing is, yes, inheritance
<beach>
I also find that the class to instantiate is known only at run time.
<beach>
... is often known only at run time.
hayley has quit [Quit: ZNC 1.8.2+deb2build5 - https://znc.in]
<aeth>
to me, the main downside of make-<foo> is that it encourages people to not export their class names
<aeth>
which doesn't give you the option of make-instance, but it also doesn't give you the option of check-type
hayley has joined #commonlisp
<fosskers>
beach: thanks for checking that
NotThatRPG has joined #commonlisp
NotThatRPG has quit [Client Quit]
habamax has quit [Ping timeout: 250 seconds]
<beach>
Sure.
NicknameJohn has joined #commonlisp
fosskers has quit [Ping timeout: 255 seconds]
hayley has quit [Changing host]
hayley has joined #commonlisp
shka has joined #commonlisp
dinomug has quit [Remote host closed the connection]
habamax has joined #commonlisp
notzmv has quit [Ping timeout: 255 seconds]
dcb has quit [Ping timeout: 255 seconds]
anticomputer has quit [Remote host closed the connection]
anticomputer has joined #commonlisp
speskk has quit [Read error: Connection reset by peer]
`Pixel_Outlaw has quit [Quit: Leaving]
speskk has joined #commonlisp
bilegeek has quit [Quit: Leaving]
Lycurgus has joined #commonlisp
SAL9000 has quit [Server closed connection]
SAL9000 has joined #commonlisp
z4kz has quit [Server closed connection]
z4kz has joined #commonlisp
Brucio-61 has quit [Remote host closed the connection]
Brucio-61 has joined #commonlisp
zaymington has quit [Remote host closed the connection]
zaymington has joined #commonlisp
ronald_ has quit [Ping timeout: 255 seconds]
ronald_ has joined #commonlisp
pve has joined #commonlisp
Cymew has joined #commonlisp
rgherdt has joined #commonlisp
attila_lendvai has joined #commonlisp
igemnace has joined #commonlisp
notzmv has joined #commonlisp
bendersteed has joined #commonlisp
rtypo has joined #commonlisp
Lycurgus has quit [Ping timeout: 252 seconds]
Fare has quit [Ping timeout: 248 seconds]
overclucker has quit [Ping timeout: 240 seconds]
rgherdt_ has joined #commonlisp
fosskers has joined #commonlisp
sock has joined #commonlisp
rgherdt has quit [Ping timeout: 255 seconds]
dino_tutter has joined #commonlisp
overclucker has joined #commonlisp
random-jellyfish has joined #commonlisp
wonko-the-sane has quit [Quit: leaving]
LW has joined #commonlisp
habamax has quit [Quit: ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.1)]
azimut has joined #commonlisp
LW has quit [Client Quit]
Inline has quit [Quit: Leaving]
igemnace has quit [Read error: Connection reset by peer]
Inline has joined #commonlisp
habamax has joined #commonlisp
igemnace has joined #commonlisp
Inline has quit [Remote host closed the connection]
mgl has joined #commonlisp
Inline has joined #commonlisp
jon_atack has joined #commonlisp
Inline has quit [Remote host closed the connection]
jmercouris has quit [Server closed connection]
jmercouris has joined #commonlisp
<beach>
Hmm, the result of typing (get-setf-expansion '(values x y)) to the SBCL REPL is very confusing.
<beach>
Since the result has multiple values that are printed separately, the correspondence between variables in different values is not obvious at all.
jonatack has quit [Ping timeout: 250 seconds]
waleee has joined #commonlisp
luna-is-here has quit [Ping timeout: 255 seconds]
<splittist>
It's not as confusing as asking for the expansion of (VALUES #:NEW1 #:NEW1) (:
<splittist>
(the g-s- expansion, that is)
luna-is-here has joined #commonlisp
<beach>
I also tried (get-setf-expansion '(values (values x y) z)) which is also a bit more confusing.
fosskers has quit [Ping timeout: 255 seconds]
jello_pudding has quit [Ping timeout: 248 seconds]
anticomputer has quit [Remote host closed the connection]
anticomputer has joined #commonlisp
yosef` has quit [Ping timeout: 245 seconds]
jello_pudding has joined #commonlisp
<beach>
To see clearer, I wrapped the all in MULTIPLE-VALUE-LIST.
<beach>
*the call
pranavats has left #commonlisp [Error from remote client]
pranavats has joined #commonlisp
Inline has joined #commonlisp
notzmv has quit [Ping timeout: 245 seconds]
azimut has quit [Remote host closed the connection]
azimut has joined #commonlisp
random-nick has joined #commonlisp
viatatribal has quit [Quit: Leaving]
luna-is-here has quit [Ping timeout: 255 seconds]
dino_tutter has quit [Ping timeout: 255 seconds]
luna-is-here has joined #commonlisp
wonko-the-sane has joined #commonlisp
pranavats has left #commonlisp [Error from remote client]
mehbark has joined #commonlisp
waleee has quit [Ping timeout: 252 seconds]
waleee has joined #commonlisp
<mgl>
beach: And MVL helps because *PRINT-CIRCLE* is true?
mehbark has quit [Remote host closed the connection]
waleee has quit [Ping timeout: 252 seconds]
yitzi has joined #commonlisp
daox has joined #commonlisp
Cymew has quit [Read error: Connection reset by peer]
Cymew has joined #commonlisp
Inline has quit [Remote host closed the connection]
Inline has joined #commonlisp
<beach>
Yes.
sjl has quit [Quit: WeeChat 3.6]
sjl has joined #commonlisp
<mgl>
It may be reasonable behaviour for the REPL to print multiple values in a single logical group. No Lisp I tried does it though.
<beach>
You think so? How would READ handle them then?
notzmv has joined #commonlisp
zaymington has quit [Ping timeout: 252 seconds]
pranavats has joined #commonlisp
Inline has quit [Ping timeout: 252 seconds]
dino_tutter has joined #commonlisp
seanw has joined #commonlisp
<_death>
READ wouldn't handle the uninterned symbols (or unreadable output) well anyway.. but I think this particular case just needs better names for the symbols.. for some reason sbcl's implementation binds *gensym-counter* to 1 for each list of "new values"
rgherdt_ is now known as rgherdt
Lycurgus has joined #commonlisp
<flip214>
Can I get the FASL path from ASDF for an already-loaded system? Or the base directory of the FASLs? I need to know where libosicat.so gets built.
luna-is-here has quit [Ping timeout: 255 seconds]
EsoAlgo81 has quit [Server closed connection]
EsoAlgo81 has joined #commonlisp
luna-is-here has joined #commonlisp
tyson2 has joined #commonlisp
habamax has quit [Remote host closed the connection]
Inline has joined #commonlisp
dino_tutter has quit [Ping timeout: 246 seconds]
Lycurgus has quit [Quit: Tschüss]
<mgl>
beach: Good point. That probably rules it out.
seok has quit [Quit: Client closed]
seok has joined #commonlisp
chomwitt has joined #commonlisp
thuna` has joined #commonlisp
jmdaemon has quit [Ping timeout: 246 seconds]
kevingal has joined #commonlisp
seok has quit [Quit: Client closed]
seok has joined #commonlisp
yitzi has quit [Remote host closed the connection]
random-jellyfish has quit [Quit: Client closed]
jeosol has quit [Quit: Client closed]
NotThatRPG has joined #commonlisp
zagura has quit [Server closed connection]
zagura has joined #commonlisp
bjorkint0sh has joined #commonlisp
bjorkintosh has quit [Ping timeout: 240 seconds]
NotThatRPG has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
NotThatRPG has joined #commonlisp
NicknameJohn has quit [Ping timeout: 255 seconds]
dino_tutter has joined #commonlisp
NicknameJohn has joined #commonlisp
tyson2 has quit [Remote host closed the connection]
waleee has joined #commonlisp
overclucker has quit [Ping timeout: 245 seconds]
NicknameJohn has quit [Ping timeout: 255 seconds]
skin1 has joined #commonlisp
NotThatRPG has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
xmachina has quit [Server closed connection]
waleee has quit [Ping timeout: 255 seconds]
xmachina has joined #commonlisp
Cymew has quit [Ping timeout: 252 seconds]
waleee has joined #commonlisp
notzmv has quit [Ping timeout: 255 seconds]
overclucker has joined #commonlisp
zxcvz has joined #commonlisp
mgl has quit [Quit: Client closed]
dino_tutter has quit [Ping timeout: 245 seconds]
cage has joined #commonlisp
yitzi has joined #commonlisp
Lycurgus has joined #commonlisp
seok has quit [Quit: Client closed]
bitmapper has joined #commonlisp
seok has joined #commonlisp
igemnace has quit [Read error: Connection reset by peer]
waleee has quit [Ping timeout: 252 seconds]
yottabyte has joined #commonlisp
waleee has joined #commonlisp
NicknameJohn has joined #commonlisp
igemnace has joined #commonlisp
Pixel_Outlaw has joined #commonlisp
amb007 has quit [Ping timeout: 240 seconds]
ioa has quit [Server closed connection]
ioa has joined #commonlisp
amb007 has joined #commonlisp
NicknameJohn has quit [Ping timeout: 252 seconds]
dcb has joined #commonlisp
seok has quit [Quit: Client closed]
jeosol has joined #commonlisp
seok has joined #commonlisp
triffid has joined #commonlisp
Lycurgus has quit [Quit: Tschüss]
<jmercouris>
It seems to me that a big driver for adoption of languages is "C, but better"
<jmercouris>
consider Rust, consider Zig
<jmercouris>
great C interop + something they claim is better
<jmercouris>
in that same vein, why not do something like that with CL?
<beach>
Like what?
Inline has quit [Ping timeout: 255 seconds]
<beach>
Presenting Common Lisp as a better C, or proposing a "Common Lisp but better"?
zxcvz has quit [Quit: zxcvz]
daox has quit [Ping timeout: 245 seconds]
<Pixel_Outlaw>
"We want the speed of C/++ but are scared to death of memory management" is the current trend.
<edgar-rft>
we all know that only worse is better
<Pixel_Outlaw>
One thing I'd caution about is people dragging baggage from other languages and writing unlispy frameworks in CL because of it. I feel that happened in Clojure with the JVM refugees.
<Pixel_Outlaw>
Languages can become victims of popularity, but that's nothing new.
daox has joined #commonlisp
dcb has quit [Quit: MSN Messenger 4.0.4]
jon_atack has quit [Read error: Connection reset by peer]
jonatack has joined #commonlisp
<jmercouris>
just a thought that I had
<jmercouris>
I don't have any actionable ideas besides "Common Lisp as a better C"
<jmercouris>
could be an interesting article, presenting CL as a systems language
<jmercouris>
a lot of people misunderstand what CL is
NotThatRPG has joined #commonlisp
<bjorkint0sh>
go on, jmercouris. What are the misunderstood parts of CL?
notzmv has joined #commonlisp
daox has quit [Ping timeout: 245 seconds]
dcb has joined #commonlisp
<jmercouris>
bjorkint0sh: people think it is a functional only language, suitable for scripts
daox has joined #commonlisp
<bjorkint0sh>
They look at the reference manual and think it's a FP language instead of the multi-paradigm magnificent beast that it is?
daox has quit [Client Quit]
kevingal has quit [Ping timeout: 252 seconds]
NotThatRPG has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
<White_Flame>
IMO the only big advantage of C that you don't get in other languages is to load or mmap files and directly view those bytes as datastructures
<White_Flame>
in terms of practical applications
<White_Flame>
but I think that still probably falls in the category of optimization
<White_Flame>
and of course can be quite brittle
<jmercouris>
It isn't about *your* opinion, it is about the prevailing "wisdom" and opinion
<White_Flame>
and of course the biggest misunderstanding about lisp is that people think it's "LISP" ;)
NotThatRPG has joined #commonlisp
<bjorkint0sh>
well it started out as LISP didn't it? and then a tl;dr followed and the impression remained lists.
<White_Flame>
basically
waleee has quit [Ping timeout: 255 seconds]
amb007 has quit [Read error: Connection reset by peer]
amb007 has joined #commonlisp
Inline has joined #commonlisp
waleee has joined #commonlisp
tyson2 has joined #commonlisp
<Pixel_Outlaw>
The biggest misconception I commonly see around work is that it's "Slow because it's interpreted".
<Pixel_Outlaw>
Meanwhile SBCL spitting out ASM like it's nothing.
<Pixel_Outlaw>
They see languages like Python or Ruby and it gets thought of as something in that area. They also mistake it for being weakly typed.
<Pixel_Outlaw>
SO they assume it's a slow weakly typed langauge with "bad syntax".
<Pixel_Outlaw>
Now, Rust at el made the whole "systems language" a thing so unless something has a 1 pass compiler they write it off as slow.
<Pixel_Outlaw>
*et al
<Pixel_Outlaw>
When I gave my demo at work I made sure to demonstrate "disassemble" as well as some "time" tests so show them I was really redefining code which was as fast as it was expressive.
Inline has quit [Remote host closed the connection]
Inline has joined #commonlisp
<Pixel_Outlaw>
Well not a 1 pass compiler, maybe I used the wrong term there. But hopefully you get what I mean. The whole 1 shot compilation.
<Pixel_Outlaw>
For me the angle was "You think compilation is cool eh? How about always be compiling. At the functional level."
kevingal has joined #commonlisp
akonai has quit [Ping timeout: 244 seconds]
<fourier>
Biggest problem for me always was "if yoo leave, nobody would understand your code"
<fourier>
No language or ecosystem advantages could help it
<bjorkint0sh>
fourier, tell them it's self documenting.
<attila_lendvai>
fourier, that's always the case. you can just pick whether it's because of a niche language, or because of the unnecessarily bloated size of the codebase
<fourier>
Somehow the feel like massively templated "self-documented" c++ code written by a dedicated batch of core developers is better :(
wonko-the-sane has quit [Ping timeout: 246 seconds]
<fourier>
the=they
<Pixel_Outlaw>
heh that was the sell for COBOL. "The Self Documenting language!" (big pile of trash)
seok has quit [Quit: Client closed]
bitmapper has quit [Quit: Connection closed for inactivity]
seok has joined #commonlisp
<Pixel_Outlaw>
However, as CL supports documentation and docstrings it can be very self documenting. :)
<bjorkint0sh>
Pixel_Outlaw, oy! don't knock it till you exceed it's installed base :-)
<bjorkint0sh>
it worked!
<Pixel_Outlaw>
I managed an IBM COBOL/RPG shop. ;)
<bjorkint0sh>
there are very difficult works of fiction afterall.
<Pixel_Outlaw>
Insurance :)
<Pixel_Outlaw>
The important thing is that your developers are happy and producing good code and documentation I guess. That's what gets your products out.
<attila_lendvai>
Pixel_Outlaw, what makes a language self-documenting is properly named abstractions that capture the model and intent very closely. i.e. you never run out of language when you try to capture the abstractions that you manage to identify as a programmer. documentation then is only a bird's eye view, putting the source into context.
akonai has joined #commonlisp
<Pixel_Outlaw>
Yeah, SICP is a good case study of careful naming and binding actions to meaning rather than just reusing "the language" primitives without naming.
* attila_lendvai
goes AFK
seok has quit [Quit: Client closed]
seok has joined #commonlisp
igemnace has quit [Remote host closed the connection]
waleee has quit [Ping timeout: 252 seconds]
wonko-the-sane has joined #commonlisp
tyson2 has quit [Remote host closed the connection]
wonko-the-sane has quit [Quit: leaving]
<aeth>
White_Flame: So the only big advantage of C is the ability to sidestep security for performance and immediately execute arbitrary bytes because you can trust all of the input you're given? Doesn't really seem to work on (inter)networked machines.
<aeth>
But I'd also add very low RAM usage and very fast start time. Most alternative languages don't have one or both. And if you optimize for low RAM usage, you're probably replacing a fast compiler (like SBCL's) with a slow interpreter (like CLISP's)
cage has quit [Quit: rcirc on GNU Emacs 29.1]
<bjorkint0sh>
C: Computing like the PDP-7 has just come out.
son0p has quit [Quit: Bye]
<aeth>
To be fair, that was 1965 and they had a whole 18 bits back then... and even as late as 1994, computing had vastly expanded, but most computers were probably on 16-bit OSes, which is actually 2 fewer bits.
tyson2 has joined #commonlisp
<aeth>
Even 32-bits is kind of tight for something like CL (the impact of tagged fixnums matters way more when you remove a few bits from 32 bits instead of when you remove a few bits from 64...)
<aeth>
So decades of very weak hardware unless you paid a lot of money probably kept things on C and C++.
<ixelp>
A Horse's Ass Designed The Space Shuttle | Paper Source Online
<aeth>
On tagged fixnums, I mean, you're at best case dividing by 4 for the max (signed and with one bit tag) so that's 4294967295 vs 1073741823 and those are numbers you can actually expect to hit in day-to-day stuff sometimes. And that's best case... 32-bit SBCL doesn't use 1 tag bit on x86-32 (unlike SBCL on x86-64) and idk if any implementation does.
<aeth>
bjorkint0sh: Yeah, basically. We're all just using IBM PCs... even if we're using ARM instead of the 64-bit Intel/AMD architecture!
<aeth>
All the cool stuff in the 80s at a minimum required 32-bit computers and approximately nobody remembers them while almost everyone could've gotten a microcomputer.
NotThatRPG has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
thuna` has quit [Quit: out]
thuna` has joined #commonlisp
<bjorkint0sh>
worse is better. true for software, true for elected officials.
NotThatRPG has joined #commonlisp
<jcowan>
fourier, Pixel_Outlaw: I wrote a finger client for the PDP-10 once
seok has quit [Quit: Client closed]
<jcowan>
my manager insisted that I wrote it in Cobol because he had Cobol maintenance programmers but none for PDP-10 assembly language (the obvious option then).
seok has joined #commonlisp
<jcowan>
So I learned enough Cobol to write it, but I was petty enough to use a lot of Cobol's standard abbreviated keywords.
jeosol has quit [Quit: Client closed]
nimiux has quit [Server closed connection]
nimiux has joined #commonlisp
<bjorkint0sh>
jcowan, what OS was the PDP-10 running?
<jcowan>
TOPS-10
seok has quit [Quit: Client closed]
son0p has joined #commonlisp
pve has quit [Quit: leaving]
waleee has joined #commonlisp
waleee has quit [Ping timeout: 245 seconds]
kevingal has quit [Ping timeout: 255 seconds]
waleee has joined #commonlisp
viatatribal has joined #commonlisp
luna-is-here has quit []
luna-is-here has joined #commonlisp
tyson2 has quit [Remote host closed the connection]
dino_tutter has joined #commonlisp
dcb has quit [Ping timeout: 252 seconds]
dcb has joined #commonlisp
tyson2 has joined #commonlisp
jello_pudding has quit [Ping timeout: 245 seconds]
mehbark has joined #commonlisp
<Pixel_Outlaw>
jcowan, interesting... :)
<Pixel_Outlaw>
Yeah the english based math phrases suck, I recall some compute directive.
<Pixel_Outlaw>
ADD PAIN TO SUFFERING GIVING EMPLOYMENT. STOP. RUN.
<Pixel_Outlaw>
jcowan, did your place have the habit of creating entire columns of nothing but whitspace in the DB so you can shove an entire row into a PIC?
<jcowan>
No, it wasn't a Cobol shop as such, it was a university computing center.
<Pixel_Outlaw>
Ah. :) Yeah at my old gig they literally wrote whitespace columns so they could shove them into a PIC and have the fields populate. Very poor programmers.
<bjorkint0sh>
why wasn't lisp used for data processing? it's about as old as COBOL.
<Pixel_Outlaw>
Speed probably.
<jcowan>
We did hire a consultant at one time. He declared an array with 500 elements. Guess what the next 500 statements were.
<Pixel_Outlaw>
I WISH IBM had continued with Lisp. But they implemented a lot of languages and they all died as people kept purchasing the RPG and COBOL compilers.
<jcowan>
He was gone the next day
<Pixel_Outlaw>
:P
<jcowan>
IBM never had a Lisp product; their only Lisp never made it out of Yorktown Heights (= IBM research)
<aeth>
bjorkint0sh: Lisps work best with very advanced features such as autoindentation and automatic parenthesis management (where, at a very minimum, typing the character #\( also produces a #\) to close it)
<aeth>
(keeps it balanced)
<aeth>
the advanced feature called syntax highlighting also helps a lot to distinguish e.g. most built-in macros
<Pixel_Outlaw>
oh hell
<Pixel_Outlaw>
SEU doesn't have that.
lucasta has joined #commonlisp
<Pixel_Outlaw>
THat's the IBM text editor for midrange. It blows.
<aeth>
I remember when syntax highlighting was one of the distinguishing features that made XEmacs (RIP) better than GNU Emacs
<aeth>
XEmacs hasn't really been active in 15 years
random-nick has quit [Ping timeout: 245 seconds]
rtypo has quit [Quit: WeeChat 4.0.3]
attila_lendvai has quit [Ping timeout: 252 seconds]
jryans has quit [Server closed connection]
jryans has joined #commonlisp
rtypo has joined #commonlisp
dino_tutter has quit [Ping timeout: 245 seconds]
rtypo has quit [Ping timeout: 255 seconds]
jmdaemon has joined #commonlisp
waleee has quit [Ping timeout: 255 seconds]
NotThatRPG has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
habamax has joined #commonlisp
jmdaemon has quit [Ping timeout: 252 seconds]
jmdaemon has joined #commonlisp
<jcowan>
Syntax highlighting is fine if you don't write macros yourself, but people do.
<jcowan>
Personally I think parenthesis matching (not supplying) is the only really important feature (I just drop from ex-mode into vi-mode and bounce on the % key)