In article <47a154ae$0$4950$4c368faf / roadrunner.com>, phlip2005 @gmail.com says... > Jerry Coffin wrote: > > > Strangely, C had actually implemented a relatively complete assert > > facility around the time it became possible to do so in Lisp. > > Even the oldest C could do stringerization, with a trick: > > #define assert(foo) if(!(foo)) fprintf(STDERR, "\ > foo > \ failed"); I don't think the _very_ oldest C could handle this. If you ever feel like looking, Dennis Ritchie has a museum on his web site that includes some early C compilers. These include some versions so old some of the _very_ basic parts of the language were still in flux (e.g. on that doesn't support 'struct' at all). OTOH, but the mid-70's, things had settled down quite a bit -- in particular, memory was no longer quite so constrained, so he could implement a more complete language without simply overflowing the memory available on the (only) Unix machine at the time. > Someone check my syntax, but that would reflect 'whatever' if you failed > assert(whatever). However, this could not _reliably_ reflect argument > values. Even C++, with <iostream>, cannot reliably reflect both arguments > and values, for an assertion that's healthy to type. True -- I didn't mean to imply that its original assert was identical or equivalent to what you've written; quite the contrary, C (and C++) have make any sort of reflection quite difficult at best. OTOH, what they provided 30 years ago (or so) still seems to be better than what Ruby does by default... > So C++ made up for this by letting me put a breakpoint into the > assertion, so it would break directly into the calling code. I could TDD > in the debugger quite effectively like that. > > What my assertion gives for a Ruby project, without a debugger, is all > the "watch points" that a debugger would have provided: > > assert_{ reflect_string(statement) == statement } --> false - > should pass > statement --> "lambda{|*a| p( a ) }" > reflect_string(statement) --> "lambda{|*a| p(a) }". > > Yes, Lisp probably did, too, that before I was born! Without knowing how old you are, that's harder to guess. Then again, even if I did know your exact age, it could be hard to answer. Most languages draw a clear line between the compiler/interpreter/whatever and your code. Lisp doesn't; it allows you to play directly with the implementation quite easily, and it's generally considered quite reasonable for ordinary code to use things that would be completely hidden and inaccessible in most other languages. As such, it's usually difficult to say anything like "nobody did X before day Y", with respect to Lisp. -- Later, Jerry. The universe is a figment of its own imagination.