Yes, I agree with you, but. While it is perfectly true that more open source components and killer apps, or least working apps, would definitely help, I think you fail to realise the negative impact things like messy libraries and blogs about it can have.<br>
<br>While I know that most of the libraries actually are quite good in spite of their APIs and that the erlang VM is very good and tested and robust it does not look like this for many people. Unless they take the time to study and test the system properly they may be scared off by what they perceive to be a sloppy and hastily put together system. Especially if they have read the same thing in some blogs.<br>
<br>Therefore I think it is definitely worth redoing and cleaning up many of the libraries.<br><br>Also we have against us that we don't run on the JVM, which I hold to be a real benefit of course. :-) Think of a world without last-call optimisation?<br>
<br>I am less worried about splitting the erlang community as I don't think that it will happen. It may be a major change but it will never be something that just pops out of the blue so I assume people will adjust and appreciate the improvements. One thing we have to do to help the community is to make a proper language spec and rationale so that people can really know what erlang is and how it is supposed to work. This is a necessary prerequisite for new implementations other than the BEAM, and if erlang is successful these will come.<br>
<br>While we are talking about change, I think a few syntax changes would be beneficial but I don't think they can ever be enough to appease the real syntax whiners. I separate those who complain about the syntax into whiners, those who whine about it not being like java, and those have actually tried it and come with serious criticism. This is not why I would like to make some changes.<br>
<br>Thomas Lindgren mentioned one reason why the APIs look like they do, no vetting. Another early reason is that we were concentrating on some aspects of the language, and implementing it, and often we just need a library so we hacked one together. And we still have them hanging around. An unfortunate and slightly depressing prerequisite to these reasons is that some didn't have the inclination or time to make a good API.<br>
<br>And I must admit I had a rather cavalier attitude to libraries before, if you need a library you write it yourself. Which probably didn't help much. :-)<br><br>I agree with Joe on how to proceed, although I think you have to release the new libraries earlier to the eager waiting public, you can't wait until you have redone the whole lost before releasing them. However you *do* need a small group to work on the guidelines and programming rules and do the initial new libraries, both as tests of the rules and as examples. The group should be small or else it is difficult to work out a clear concise set of rules and guidelines. As always the problem is not what not add but what to remove.<br>
<br>The funny thing is that I am probably the one who least cares if my stuff is ever used. Strange world.<br><br>That's about it for this time,<br><br>Robert<br><br><div class="gmail_quote">2008/11/17 Kenneth Lundin <span dir="ltr"><<a href="mailto:kenneth.lundin@gmail.com">kenneth.lundin@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">I agree that it is unfortunate that some of the library modules are<br>
not consistent with each other<br>
but I don't think this is a major problem for users of Erlang.<br>
<br>
I think it is a very bad idea to start discussing a new incompatible<br>
track of Erlang just because of this.<br>
<br>
The Erlang community is not big enough for this yet, what we need now<br>
is actions that stimulate the<br>
growth of the community.<br>
<br>
I definitely don't think the inconsistency in the tree, dict etc. APIs<br>
is one of the most important things in this.<br>
<br>
More important is to get more high quality reusable Open Source<br>
components and an easy way to find these.<br>
Also more important is to have more books and more "killer"<br>
applications built with Erlang. Applications that draw<br>
the attention to Erlang.<br>
<br>
When it comes to inconsistencies in libraries and language I think the<br>
best way is to prepare a suggestion on design rules for new API's<br>
both for collection ADT's and in general. Then this can be used as a<br>
basis for evolving stepwise into more consistent API's.<br>
<br>
There are ways to evolve without breaking compatibility new functions<br>
can easily be added and old ones can be deprecated.<br>
New modules can also easily be added etc.<br>
<br>
It is also very important to remember that backwards compatibility is<br>
one of the most appreciated characteristics of Erlang. It makes it<br>
possible for<br>
large and huge SW projects to shift to  a new major release of<br>
Erlang/OTP with minimal work. This is essential in order to<br>
get users to upgrade to the next release.<br>
<br>
/Kenneth Erlang/OTP, Ericsson<br>
<div><div></div><div class="Wj3C7c"><br>
<br>
On Sat, Nov 15, 2008 at 7:54 PM, damien morton <<a href="mailto:dmorton@bitfurnace.com">dmorton@bitfurnace.com</a>> wrote:<br>
> I don't suppose there's and Erlang 3000 project in the works?<br>
><br>
> The Python people set out to create Python 3000, throwing backwards<br>
> compatibility out the window in favour of fixing language and library<br>
> design errors.<br>
><br>
> I mentioned earlier the variety of ways that the Erlang libraries<br>
> signal returning a value or not. Some examples:<br>
><br>
> proplists:get_value(Key, List) -> undefined | Value<br>
><br>
> dict:find(Key, Dict) -> {ok, Value} | error<br>
><br>
> gb_tree:lookup(Key, Tree) -> {value, Val} | none<br>
><br>
> dets:lookup(Name, Key) -> [Object] | {error, Reason}<br>
><br>
> ets:lookup(Tab, Key) -> [Object]<br>
><br>
> All these operations on standard ADTs are roughly equivalent, and yet<br>
> they have different or conflicting naming conventions, different<br>
> return value protocols, and different orderings of their arguments.<br>
><br>
> While ets:lookup and dets:lookup return a tuple, one of whose members<br>
> is the key, gb_tree:lookup return the value of a {key,value} pair.<br>
><br>
> gb_tree:lookup, dict:find and proplists:get_value all perform the same<br>
> operation, and though the return value protocol is different in each<br>
> case, at least the arguments are the same.<br>
><br>
> The key asset for any well designed language or library is<br>
> learnability, which comes from regularity, i.e. having learned<br>
> something in one situation, one can apply that knowledge to similar<br>
> situation with a high probability of success.<br>
><br>
> Erlang already does a lot of things differently from other languages,<br>
> but when every single library module does things differently from the<br>
> others, well, that's a lot of heterogeneity for a novice to deal with.<br>
><br>
> I wasted an hour so so tonight trying to figure out a problem that<br>
> stemmed from proplists having a different argument ordering to ets - I<br>
> just instinctively assumed they had the same argument ordering, and<br>
> why shouldn't I?<br>
> _______________________________________________<br>
> erlang-questions mailing list<br>
> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> <a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
><br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br>