Mailing List Archive
tlug.jp Mailing List tlug archive tlug Mailing List Archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]Re: [tlug] Alternatives to sed + awk
- Date: Wed, 9 Mar 2011 21:47:56 +0100
- From: Josh Glover <jmglov@example.com>
- Subject: Re: [tlug] Alternatives to sed + awk
- References: <AANLkTim_-D9CFYC8TNp33ni85zB+QBA7jV=BpLN=4SbZ@example.com> <4D6F8D94.9040109@example.com> <87ei6nl906.fsf@example.com> <AANLkTimk1z41fSvQQmU+7fE-1Krd_kuo3_z-1SYD5rW6@example.com> <87ipvskik1.fsf@example.com> <AANLkTi=_6DoBt+xfQVOwM6KyKrxxgA_Ec9bhp751f15y@example.com> <8762rsjkdx.fsf@example.com>
On 9 March 2011 18:04, Stephen J. Turnbull <stephen@example.com> wrote: > Josh Glover writes: > > > class String > > def bar; reverse end > > end > > > > my_string = 'foo' > > my_string.instance_eval { def baz; reverse } > > > > puts 'Ruby is insane' if foo.bar.baz == foo > > I think that's actually more ugly than naughty. For sure. It was a contrived example to show that Ruby gives you some powerful meta-programming tools; using them responsively is up to you. > So *that* kind of "power" *subtracts* from expressiveness. One use of Ruby's power tools that certainly adds to expressiveness is defining a domain-specific language without needing a parser. Lisp is also good for that, in fact most non-trivial Lisp systems are built of one or more DSLs woven together (at least according to Paul Graham and "The Scheme Programming Language"--I have no experience writing production Lisp). > Adding methods to instances seems philosophically pointless. It is quite useful for unit testing, when you don't add methods but modify them. :) > If you want to provide an operation on an instance, it seems to me > that you either want to systematically create more similar instances, > in which case you should subclass (or monkey-patch the class), or > you don't, in which case use an ordinary function. Or a lambda. :) As far as I can recall, I think the only times I've used instance_eval to add something to a specific object was to aid in debugging. More experienced Ruby hackers like Zev and Kevin/Alain might know of other good uses. instance_eval itself is a wonderful thing, though. My example of defining a method on a single instance is probably getting in the way of understanding it: instance_eval takes a block and executes the code inside it in an object-local binding (i.e. self is the object on which you called instance_eval). So you can do stuff like this: def test_crappy_class crap = CrappyClass.new assert_equal 0, crap.instance_eval{@example.com crap.increment assert_equal 1, crap.instance_eval{@example.com end class_eval does the same thing, but on a class object. Rails uses class_eval to provide accessors for model objects automatically based on a database table layout, in some way that is roughly equivalent to this: tables.each do |table| columns = columns_for table columns.each do |column| table.to_class.class_eval "def #{column}; @#{column} end; def #{column}=(val); @#{column} = val end" end end end > Interesting. Except Emacs isn't written in C, it's written in Lisp -- > and the amount of Lisp that is written in Lisp, not C, increases in > every version. I would suspect that neither is FireFox written in > C++, not at the level that most of the add-ons target. Right, Firefox is basically an application platform now. Except for the C core, most of it is XUL and Javascript. > The comment that Graham doesn't mention C is on target, but that's not > surprising. He doesn't mention assembler, either. These aren't > languages in the sense that Graham means. Yeah, Graham was talking about something else to be sure. But it was odd that in talking about languages that have survived for a long time (and are likely to survive genetically much longer), C did not come up. Lisp certainly is a marvel, but so is C. :) > It's not really obvious to me that any of the programs that Adamson > mentions are actually written in C, anyway. They're written in "Xt" or > "GTK+" or "wxWidgets" or whatever. That is an interesting view. I can't say that I disagree, which may actually be a strength of C. One wouldn't be able--IMO--to say the same about a program written in Java, regardless of which widget framework you were developing on. The Java-ness is just so pervasive... *shudder* ;) > This is especially true of Lisp, where pretty much every large program > is written in a language which shares the very basic "an expression is > a list starting with a function and followed by expressions" syntax, > but most expressions are functions with very specific requirements on > the arguments, thus looking a lot like syntax. Yup. Lisp is really nice for letting you build what you need without imposing many syntactic restrictions on you; it lets you impose them on yourself. ;) > > As does Paul Graham: > > http://www.paulgraham.com/hundred.html > > avg.html is probably more to the point. :-) Heh heh. -- Cheers, Josh
- Follow-Ups:
- Re: [tlug] Alternatives to sed + awk
- From: Stephen J. Turnbull
- Re: [tlug] Alternatives to sed + awk
- From: Simon Cozens
- References:
- [tlug] Alternatives to sed + awk
- From: Nguyen Vu Hung
- Re: [tlug] Alternatives to sed + awk
- From: Alexander Danilov
- Re: [tlug] Alternatives to sed + awk
- From: Stephen J. Turnbull
- Re: [tlug] Alternatives to sed + awk
- From: Alexander Danilov
- Re: [tlug] Alternatives to sed + awk
- From: Stephen J. Turnbull
- Re: [tlug] Alternatives to sed + awk
- From: Josh Glover
- Re: [tlug] Alternatives to sed + awk
- From: Stephen J. Turnbull
Home | Main Index | Thread Index
- Prev by Date: Re: [tlug] Alternatives to sed + awk
- Next by Date: [tlug] Assembly Language v C and Embedded Development (was Re: Alternatives to sed + awk)
- Previous by thread: Re: [tlug] Alternatives to sed + awk
- Next by thread: Re: [tlug] Alternatives to sed + awk
- Index(es):
Home Page Mailing List Linux and Japan TLUG Members Links