]> git.llucax.com Git - personal/website.git/blob - source/blog/posts/2009/11/29-opdispatch.rst
Import personal website to git
[personal/website.git] / source / blog / posts / 2009 / 11 / 29-opdispatch.rst
1 Title: opDispatch
2 Tags: en, d, opdispatch, dynamic, patch
3
4 From time to time, people suggested features to make easier to add some dynamic
5 capabilities to D__. `One of the suggestions`__ was adding a way to have
6 dynamic members. This is specially useful for things like ORM__\ s or RPC__\ s,
7 so you can do something like::
8
9     auto rpc = new RPC;
10     rpc.foo(5);
11
12 __ http://www.digitalmars.com/d/
13 __ http://www.digitalmars.com/d/archives/digitalmars/D/Fully_dynamic_d_by_opDotExp_overloading_88145.html
14 __ http://en.wikipedia.org/wiki/Object-relational_mapping
15 __ http://en.wikipedia.org/wiki/Remote_procedure_call
16
17 And it get automatically translated to some sort of SQL__ query or RPC call,
18 using some kind of introspection at **runtime**. To enable this, you can
19 translate the former to something like::
20
21     obj.dispatch!("foo")(5);
22
23 __ http://en.wikipedia.org/wiki/Sql
24
25 There was even a patch__ for this feature, but Walter__ didn't payed much
26 attention and ignore this feature `until a couple of days ago`__, when he got
27 bored and `implement it himself`__, on its own way =P
28
29 __ http://d.puremagic.com/issues/show_bug.cgi?id=2868
30 __ http://www.walterbright.com/
31 __ http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=102375
32 __ http://www.dsource.org/projects/dmd/changeset/268
33
34 I think this is a very bad policy, because it discourages people to contribute
35 code. There is no much difference between suggesting a feature and implementing
36 it providing a patch, unless you have a very good personal relationship with
37 Walter. You almost never will have feedback on your patch, Walter prefers to
38 implement things himself instead of giving you feedback. This way it's very
39 hard for people wanting to contribute to learn about the code and on how Walter
40 wants patches to be done; and this is what discourages contributions.
41
42 I won't write again about what are the problems in the D development model,
43 I already `done that`__ without much success (except for Andrei__, who is
44 writing better commit messages now, thanks for that! =). I just wanted to point
45 out another thing that Walter don't get about open-source projects.
46
47 __ http://llucax.com.ar/blog/blog/post/6cac01e1
48 __ http://erdani.com/
49
50 Anyway, this post is about ``opDispatch()``, the new way of doing dynamic
51 dispatching. Walter proposed ``opDynamic()``, which was wrong, because it's not
52 really dynamic, it's completely static, but it enables dynamic dispatching with
53 a little extra work. Fortunately Michel Fortin suggested ``opDispatch()`` which
54 is a better name.
55
56 The thing is simple, if a method ``m()`` is not found, a call to
57 ``opDispatch!("m")()`` is tried. Since this is a template call, its
58 a compile-time feature, but you can easily do a dynamic lookup like this::
59
60     void opDispatch(string name)(int x)
61     {
62         this.dispatch(name, x);
63     }
64
65     void dispatch(string name, int x)
66     {
67         // dynamic lookup
68     }
69
70 I personally like this feature, we'll see how all this turns out.
71
72 .. vim: set et sw=4 sts=4 :