FROM : Marcel Weiher
DATE : Thu Apr 07 16:55:51 2005
On 7 Apr 2005, at 14:11, Charlton Wilbur wrote:
>
> On Apr 7, 2005, at 5:59 AM, Marcel Weiher wrote:
>
>
>> Sure does!
>>
>> result = [employee valueForKey:@"name"];
>> vs.
>> result = [employee name];
>>
>> The second is:
>>
>> 1. Expressed directly in the target language (Occam's Razor,
>> anyone?)
>> 2. More compact
>> 3. Easier to read
>> 4. About an order of magnitude faster ( about 8 times, to be a
>> bit more precise )
>>
>> An order of magnitude here, an order of magnitude there, and soon
>> enough you're talking about real performance pigs...
>>
>
> If you wrote everything in C instead of Objective-C, you'd lose all
> the overhead of method dispatch.
Not really. In fact, if I wrote this in C, it would look like this:
objc_msgSend( employee, sel_getUid( "name" ) );
It would be just as fast/slow as using Objective-C message send
syntax (a bit slower, because the selector has to be looked up).
Do you see the similarity with "valueForKey:"? In both cases, what
you actually want to do (send the message "name") is not expressed
using the original programming language, but as a string argument.
One of the issues with this approach is that your programming
language doesn't get to check what you wrote at all, and significant
amounts of computation have to be shifted to runtime, even for bits
where everything is known at compile time.
Taking that approach (of embedding strings that carry your semantics)
to extremes, you end up with: [employee
interpret:programInNewProgrammingLanguage]. In fact, KVC *is* a
language, although a very impoverished one.
> How much longer does it take to dispatch a method call instead of
> just calling a function? If you wrote the whole thing in one long
> continuous stream of PowerPC assembly, it would be still faster,
> because you could hand-optimize the assembly and get it to run
> REALLY quickly!
Hmm...you did notice that performance was only 1 of the 4 points I
mentioned? My main point is about expressing intent clearly.
> Of course, this is not a sign that either is better -- programmers
> get significant benefits from using C instead of assembly, and from
> using Objective-C instead of C, and from using bindings instead of
> straight method calls.
While I agree that KVC and bindings can provide benefits, I am not
convinced that embedding a string-based mini-language is the best way
to obtain those benefits. It certainly has significant drawbacks.
> In the case of bindings (as well as in the two examples I gave),
> bindings are not a pure *replacement* for method calls,
Could you please use "message send"? Thanks!
> they're an *alternative* to it that makes some things a lot easier
> at the cost of performance. They're not meant to be a replacement
> for routine accessor functions (though you can certainly use them
> for that!)
Who said "name" was an accessor? Or a function? It is a message,
and objects provide their services via the messages they respond to.
They are not datastores that provide keyed access to the data
contained therein. One of the problems with KVC is that it
encourages the latter view, with dumb data-bearing objects
manipulated by external controllers etc. Good bye object-oriented
programming!
> but as a way of doing a particular sort of introspection that
> happens to be very useful for writing generic UI classes.
Well, why not use message-based introspection instead?
> The cases you'd use bindings in are *not* the cases where a simple
> accessor would be appropriate; they're the cases where using
> bindings instead of simple accessors allows one to eliminate 10
> lines of code here, 10 lines of code there.
My response was to "it doesn't get much easier than [valueForKey:/
setValueForKey:]". I said it does, not that there is *never* a use
for valueForKey:/setValueForKey:. Calm down.
Anyway, while I am one of the biggest fans of convenience (and saving
code) there is, it isn't always a good idea if what we intend to do
becomes obscured. See Richard Gabriel's comments on programming as
compression, and the dangers of compression.
Cheers,
Marcel
DATE : Thu Apr 07 16:55:51 2005
On 7 Apr 2005, at 14:11, Charlton Wilbur wrote:
>
> On Apr 7, 2005, at 5:59 AM, Marcel Weiher wrote:
>
>
>> Sure does!
>>
>> result = [employee valueForKey:@"name"];
>> vs.
>> result = [employee name];
>>
>> The second is:
>>
>> 1. Expressed directly in the target language (Occam's Razor,
>> anyone?)
>> 2. More compact
>> 3. Easier to read
>> 4. About an order of magnitude faster ( about 8 times, to be a
>> bit more precise )
>>
>> An order of magnitude here, an order of magnitude there, and soon
>> enough you're talking about real performance pigs...
>>
>
> If you wrote everything in C instead of Objective-C, you'd lose all
> the overhead of method dispatch.
Not really. In fact, if I wrote this in C, it would look like this:
objc_msgSend( employee, sel_getUid( "name" ) );
It would be just as fast/slow as using Objective-C message send
syntax (a bit slower, because the selector has to be looked up).
Do you see the similarity with "valueForKey:"? In both cases, what
you actually want to do (send the message "name") is not expressed
using the original programming language, but as a string argument.
One of the issues with this approach is that your programming
language doesn't get to check what you wrote at all, and significant
amounts of computation have to be shifted to runtime, even for bits
where everything is known at compile time.
Taking that approach (of embedding strings that carry your semantics)
to extremes, you end up with: [employee
interpret:programInNewProgrammingLanguage]. In fact, KVC *is* a
language, although a very impoverished one.
> How much longer does it take to dispatch a method call instead of
> just calling a function? If you wrote the whole thing in one long
> continuous stream of PowerPC assembly, it would be still faster,
> because you could hand-optimize the assembly and get it to run
> REALLY quickly!
Hmm...you did notice that performance was only 1 of the 4 points I
mentioned? My main point is about expressing intent clearly.
> Of course, this is not a sign that either is better -- programmers
> get significant benefits from using C instead of assembly, and from
> using Objective-C instead of C, and from using bindings instead of
> straight method calls.
While I agree that KVC and bindings can provide benefits, I am not
convinced that embedding a string-based mini-language is the best way
to obtain those benefits. It certainly has significant drawbacks.
> In the case of bindings (as well as in the two examples I gave),
> bindings are not a pure *replacement* for method calls,
Could you please use "message send"? Thanks!
> they're an *alternative* to it that makes some things a lot easier
> at the cost of performance. They're not meant to be a replacement
> for routine accessor functions (though you can certainly use them
> for that!)
Who said "name" was an accessor? Or a function? It is a message,
and objects provide their services via the messages they respond to.
They are not datastores that provide keyed access to the data
contained therein. One of the problems with KVC is that it
encourages the latter view, with dumb data-bearing objects
manipulated by external controllers etc. Good bye object-oriented
programming!
> but as a way of doing a particular sort of introspection that
> happens to be very useful for writing generic UI classes.
Well, why not use message-based introspection instead?
> The cases you'd use bindings in are *not* the cases where a simple
> accessor would be appropriate; they're the cases where using
> bindings instead of simple accessors allows one to eliminate 10
> lines of code here, 10 lines of code there.
My response was to "it doesn't get much easier than [valueForKey:/
setValueForKey:]". I said it does, not that there is *never* a use
for valueForKey:/setValueForKey:. Calm down.
Anyway, while I am one of the biggest fans of convenience (and saving
code) there is, it isn't always a good idea if what we intend to do
becomes obscured. See Richard Gabriel's comments on programming as
compression, and the dangers of compression.
Cheers,
Marcel
| Related mails | Author | Date |
|---|---|---|
| mmalcolm crawford | Apr 5, 17:33 | |
| Philip Mötteli | Apr 5, 23:49 | |
| Guy English | Apr 6, 00:29 | |
| Scott Stevenson | Apr 6, 01:14 | |
| Dustin Voss | Apr 6, 02:18 | |
| James Duncan David… | Apr 6, 02:27 | |
| Jake Macmullin | Apr 6, 02:31 | |
| John C. Randolph | Apr 6, 02:55 | |
| James Duncan David… | Apr 6, 03:01 | |
| Ondra Cada | Apr 6, 04:04 | |
| Will Mason | Apr 6, 04:48 | |
| Rogelio M.Serrano… | Apr 6, 06:05 | |
| Rogelio M.Serrano… | Apr 6, 06:06 | |
| mmalcolm crawford | Apr 6, 07:46 | |
| Paul Szego | Apr 6, 08:22 | |
| mmalcolm crawford | Apr 6, 09:52 | |
| ?????Andre? | Apr 6, 09:55 | |
| Ondra Cada | Apr 6, 12:21 | |
| oplus | Apr 6, 12:32 | |
| Mont Rothstein | Apr 6, 12:36 | |
| Philip Mötteli | Apr 6, 14:47 | |
| Scott Stevenson | Apr 6, 18:00 | |
| mmalcolm crawford | Apr 6, 18:39 | |
| Nat! | Apr 6, 22:35 | |
| mmalcolm crawford | Apr 6, 23:47 | |
| Timothy Reaves | Apr 7, 00:25 | |
| mmalcolm crawford | Apr 7, 00:50 | |
| Shawn Erickson | Apr 7, 01:05 | |
| James Duncan David… | Apr 7, 01:28 | |
| Todd Blanchard | Apr 7, 06:37 | |
| Todd Blanchard | Apr 7, 06:41 | |
| Scott Stevenson | Apr 7, 06:59 | |
| Philip Mötteli | Apr 7, 08:32 | |
| Marcel Weiher | Apr 7, 11:59 | |
| Charlton Wilbur | Apr 7, 15:11 | |
| Mike Ferris | Apr 7, 16:53 | |
| Marcel Weiher | Apr 7, 16:55 | |
| Marco Scheurer | Apr 7, 17:55 | |
| Marcel Weiher | Apr 7, 19:13 | |
| Scott Stevenson | Apr 7, 19:55 | |
| Marcel Weiher | Apr 7, 21:03 | |
| Mike R. Manzano | Apr 7, 21:21 | |
| Timothy Reaves | Apr 7, 22:03 | |
| Evan DiBiase | Apr 7, 22:28 | |
| Marcel Weiher | Apr 7, 22:35 | |
| mmalcolm crawford | Apr 7, 23:05 | |
| ttempel | Apr 8, 01:50 | |
| Paul Szego | Apr 8, 11:50 | |
| Johnny Deadman | Apr 8, 14:10 | |
| Philippe Mougin | Apr 8, 16:52 | |
| Shawn Erickson | Apr 8, 17:07 | |
| Shawn Erickson | Apr 8, 17:17 | |
| Ralph Scheuer | Apr 8, 17:28 | |
| Ralph Scheuer | Apr 8, 17:32 | |
| John Brownlow | Apr 8, 17:47 | |
| Charlton Wilbur | Apr 8, 18:34 | |
| Scott Stevenson | Apr 8, 18:43 | |
| Ralph Scheuer | Apr 8, 19:03 | |
| Philippe Mougin | Apr 8, 20:37 | |
| Scott Ellsworth | Apr 8, 21:46 | |
| Scott Ellsworth | Apr 8, 21:48 | |
| Evan DiBiase | Apr 8, 22:16 | |
| mmalcolm crawford | Apr 8, 22:30 | |
| mmalcolm crawford | Apr 8, 23:13 | |
| Marcel Weiher | Apr 9, 02:20 | |
| Marcel Weiher | Apr 9, 02:46 | |
| Scott Ellsworth | Apr 9, 09:39 | |
| Marcel Weiher | Apr 9, 09:44 | |
| Byron Ellis | Apr 9, 10:37 | |
| Marcel Weiher | Apr 9, 14:03 | |
| Charlton Wilbur | Apr 9, 16:01 | |
| ?????Andre? | Apr 9, 18:08 | |
| Scott Stevenson | Apr 9, 18:24 | |
| Scott Stevenson | Apr 9, 18:27 | |
| Marcel Weiher | Apr 10, 00:06 | |
| Marcel Weiher | Apr 10, 00:16 | |
| Marcel Weiher | Apr 10, 00:38 | |
| ?????Andre? | Apr 10, 01:03 | |
| Charlton Wilbur | Apr 10, 01:13 | |
| mmalcolm crawford | Apr 10, 01:53 | |
| Scott Stevenson | Apr 10, 01:58 | |
| Todd Blanchard | Apr 10, 08:32 | |
| mmalcolm crawford | Apr 10, 08:52 | |
| mmalcolm crawford | Apr 10, 09:25 | |
| PA | Apr 10, 12:08 | |
| mmalcolm crawford | Apr 30, 10:18 |






Cocoa mail archive

