digitalmars.D - etc.curl: Review ends today
- David Nadlinger (104/104) Aug 31 2011 I forgot to specify a timezone in the announcement, so depending on your...
- dsimcha (12/17) Aug 31 2011 The std.parallelism review process kind of ended up the same way, by
- Jonathan M Davis (11/22) Sep 01 2011 Considering the massive changes that are likely to be required for the m...
- jdrewsen (8/18) Sep 01 2011 I have done a lot of the changes but there are still quite some work
- David Nadlinger (4/8) Sep 01 2011 The pleasure was all mine. ;)
- Jacob Carlborg (4/22) Sep 01 2011 BTW, shouldn't etc.curl be std.net.curl now when we have a std.net packa...
- Damian Ziemba (8/35) Sep 01 2011 In general splitting Phobos into subpackages would be great idea.
- Jacob Carlborg (5/40) Sep 01 2011 I agree that std.datetime should be splitted into several modules living...
- Don (2/17) Sep 04 2011
- David Nadlinger (3/6) Sep 04 2011 etc/gamma.d is still in Git master.
I forgot to specify a timezone in the announcement, so depending on your location the code review period for the etc.curl module by Jonas Drewsen has either already ended, or is going to end later today: Thanks to everybody who took the time to review the library; no matter how the vote will turn out, your suggestions will have helped a large amount on the way to a comprehensive URL transfer library for the D standard library. Let me try to quickly summarize the discussion, ignoring comments about smaller implementation details and stylistic issues: - Concerns were raised that the removal of the libcurl built-in progress callback implementation (on the libcurl TODO list, and mentioned in the »possible improvements« section in etc.curl) might affect the etc.curl API, but this was merely a misunderstanding. - The library doesn't provide URL encoding/decoding functionality, but we have std.uri for that. - A convenience interface for just getting the contents of an URL without manually specifying the protocol (file://, http://, …) either as a byte array/string or a range of chunks/lines would be a welcome addition, as this covers the common use cases of just needing to download some file. - When using Http/Ftp/Smtp to create a request, it should be allowed to omit the scheme part of the URL. - The names of the static convenience functions for the Http verbs and their …Async() variants do not reflect that they actually prepare request which are not immediately executed. Combined with the fact that the returned struct types bear »Result« in their name and, more importantly, that D allows to call static methods using the dot syntax on an instance, this makes it easy to run into a trap by writing something like »auto client = Http("google.com/search"); … add headers, etc. … client.post();«. - The type of several fields/parameters is not optimal: only string for IP addresses, int instead of ushort for ports, double for the number of bytes in the progress callback. This comes from mirroring the Curl API, but can be changed. - Properties like verbose, dataTimeout, … only have setters, getters are missing due to a libcurl limitation. Providing read access would require keeping shadow copies of all the values, so it will not be added. - Proxy support (CURLOPT_PROXY, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE) is currently missing from the library. - The API doesn't use any of the »advanced« attributes like safe/trusted, pure, nothrow, … - The async request implementation casts mutable buffer slices to immutable and back again to be able to pass them via std.concurrency. While currently safe in practice, it was argued that this relies on undefined behavior, since writing to data cast from immutable would be disallowed regardless of the »original« mutability. The spec can be interpreted in two different ways here, and the resulting discussion did not lead to a clear conclusion. Using »shared« seems like a cleaner solution, but isn't possible due to issue 6585. [1] - Line length should be limited to about 80 characters, and shorter lines are to be greatly preferred for doc examples. We need to add a guideline for the latter to the D style guide. - Documentation for mixin templates members not being generated (bug 648 [2]) is an unsolved problem, and it affects the library documentation quite badly for the (Async)Result structs. Furthermore, the members of several structs (Http, Ftp, nested (Async)Result structs) are not indented, which is probably a DDoc bug. - The documentation should use cross-references, and additionally provide link to some (probably external) glossary for uncommon terms like TCP_NODELAY/Nagle's algorithm. - The examples need to be improved: Simple things should be shown first, they should be as concise as possible (using auto, not duplicating the protocol type used, …), a RESTful service query example would be nice. Some of the examples contain buffer overflows bugs. A separate article covering several advanced use cases in-depth would be a good idea. - Finally, it is not quite clear what the best place for this library is. Currently, it resides in the »etc« package because it depends on an external C library, but this decision has been questioned: To begin with, it is not clear what the »etc« package is for in the first place. The Phobos documentation index [3] only has »Modules in etc are not standard D modules. They are here because they are experimental, or for some other reason are not quite suitable for std, although they are still useful«. Besides an implementation of the Gamma function, the package currently contains translated C headers for zlib and sqlite, so there is precedent for the aforementioned position that etc is the appropriate place for modules depending on external libraries. On the other hand, it has been compellingly argued that communicating over e.g. HTTP is a very common task nowadays, and Phobos should provide an out of the box solution for this. Andrei, among others, proposed to move the curl module to the »std« package. This would also mean including a libcurl binary with the DMD/Phobos download for Windows (on the other platforms, it is commonly available as a system-wide installation). Concerns have been raised that this would unduly increase the download size for users of other platforms (by < ~1 MB), which could be mitigated by splitting the DMD download into a source package and several binary packages for the various platforms (as suggested several times before). Another alternative would be to just provide a link to a binary in the documentation instead of redistributing it. Jonas, do you already have a revised version ready that could immediately be voted upon? I recognize that quite a large number of suggestions was raised, but as there are quite a few other components currently waiting in the review queue, we want to make sure not to introduce any avoidable delays while working through that list. If not, I would propose to postpone the voting phase and start the review for another component, e.g. David Simcha's std.regionallocator, now. After Jonas had enough time to finish a version he considers fit for inclusion into Phobos, I would suggest a short (one week) combined review/vote period to decide on inclusion with the standard library. David [1] http://d.puremagic.com/issues/show_bug.cgi?id=6585 [1] http://d.puremagic.com/issues/show_bug.cgi?id=648 [2] http://d-programming-language.org/phobos/index.html
Aug 31 2011
On 9/1/2011 12:43 AM, David Nadlinger wrote:If not, I would propose to postpone the voting phase and start the review for another component, e.g. David Simcha's std.regionallocator, now. After Jonas had enough time to finish a version he considers fit for inclusion into Phobos, I would suggest a short (one week) combined review/vote period to decide on inclusion with the standard library.The std.parallelism review process kind of ended up the same way, by accident/evolution instead of design. I think this is a good modification to our review process: A 2-3 week initial review, then instead of an immediate vote the review manager may postpone the vote until after the next review queue item. This should happen if major changes are suggested and gives the author time to make changes. Then, have a one-week combined final review/vote as you suggest. One of the things that I found frustrating in the std.parallelism review process was that a lot of (very good) suggestions came in late in the review process when I felt like I had to rush to get them implemented in time for the vote. The more we can mitigate this, the better.
Aug 31 2011
On Thursday, September 01, 2011 06:43:46 David Nadlinger wrote:Jonas, do you already have a revised version ready that could immediately be voted upon? I recognize that quite a large number of suggestions was raised, but as there are quite a few other components currently waiting in the review queue, we want to make sure not to introduce any avoidable delays while working through that list. If not, I would propose to postpone the voting phase and start the review for another component, e.g. David Simcha's std.regionallocator, now. After Jonas had enough time to finish a version he considers fit for inclusion into Phobos, I would suggest a short (one week) combined review/vote period to decide on inclusion with the standard library.Considering the massive changes that are likely to be required for the module based on the review, I think that it's clearly going to require another review phase prior to a vote, and it may be that we'll want a shorter review period for the second review, but I would point out that it's not necessarily a good idea to try and push a vote too quickly if enough changes have to be made. It's better IMHO to have multiple review periods as the issues with the module are sorted out rather than forcing a vote before the module is really ready for it. But we'll obviously have to see where the module stands when it's reviewed next before we decide whether it's ready for voting or not. - Jonathan M Davis
Sep 01 2011
Den 01-09-2011 06:43, David Nadlinger skrev: [snip]Jonas, do you already have a revised version ready that could immediately be voted upon? I recognize that quite a large number of suggestions was raised, but as there are quite a few other components currently waiting in the review queue, we want to make sure not to introduce any avoidable delays while working through that list.I have done a lot of the changes but there are still quite some work left to do. Please go on with another review and I'll get back when I'm ready for a next round.If not, I would propose to postpone the voting phase and start the review for another component, e.g. David Simcha's std.regionallocator, now. After Jonas had enough time to finish a version he considers fit for inclusion into Phobos, I would suggest a short (one week) combined review/vote period to decide on inclusion with the standard library.Sounds good to me. Thanks for running this review. /Jonas
Sep 01 2011
On 9/1/11 6:28 PM, jdrewsen wrote:I have done a lot of the changes but there are still quite some work left to do. Please go on with another review and I'll get back when I'm ready for a next round.Okay, waiting for a ping from you then.Thanks for running this review.The pleasure was all mine. ;) David
Sep 01 2011
On 2011-09-01 18:28, jdrewsen wrote:Den 01-09-2011 06:43, David Nadlinger skrev: [snip]BTW, shouldn't etc.curl be std.net.curl now when we have a std.net package. -- /Jacob CarlborgJonas, do you already have a revised version ready that could immediately be voted upon? I recognize that quite a large number of suggestions was raised, but as there are quite a few other components currently waiting in the review queue, we want to make sure not to introduce any avoidable delays while working through that list.I have done a lot of the changes but there are still quite some work left to do. Please go on with another review and I'll get back when I'm ready for a next round.If not, I would propose to postpone the voting phase and start the review for another component, e.g. David Simcha's std.regionallocator, now. After Jonas had enough time to finish a version he considers fit for inclusion into Phobos, I would suggest a short (one week) combined review/vote period to decide on inclusion with the standard library.Sounds good to me. Thanks for running this review. /Jonas
Sep 01 2011
On Thu, 01 Sep 2011 20:00:46 +0200, Jacob Carlborg wrote:On 2011-09-01 18:28, jdrewsen wrote:In general splitting Phobos into subpackages would be great idea. Now everything goes to root, if somebody implements more digest mechanisms we will have in root, std.md5, std.sha256, std.sha1, std.whirpool etc etc, std.digest.X looks way much better. Same goes with std.datetime, it really could be splitted into std.date.time, std.date.UTC etc etc :-D Sorry for off-topic :-pDen 01-09-2011 06:43, David Nadlinger skrev: [snip]BTW, shouldn't etc.curl be std.net.curl now when we have a std.net package.Jonas, do you already have a revised version ready that could immediately be voted upon? I recognize that quite a large number of suggestions was raised, but as there are quite a few other components currently waiting in the review queue, we want to make sure not to introduce any avoidable delays while working through that list.I have done a lot of the changes but there are still quite some work left to do. Please go on with another review and I'll get back when I'm ready for a next round.If not, I would propose to postpone the voting phase and start the review for another component, e.g. David Simcha's std.regionallocator, now. After Jonas had enough time to finish a version he considers fit for inclusion into Phobos, I would suggest a short (one week) combined review/vote period to decide on inclusion with the standard library.Sounds good to me. Thanks for running this review. /Jonas
Sep 01 2011
On 2011-09-02 00:23, Damian Ziemba wrote:On Thu, 01 Sep 2011 20:00:46 +0200, Jacob Carlborg wrote:I agree that std.datetime should be splitted into several modules living in a new sub package. -- /Jacob CarlborgOn 2011-09-01 18:28, jdrewsen wrote:In general splitting Phobos into subpackages would be great idea. Now everything goes to root, if somebody implements more digest mechanisms we will have in root, std.md5, std.sha256, std.sha1, std.whirpool etc etc, std.digest.X looks way much better. Same goes with std.datetime, it really could be splitted into std.date.time, std.date.UTC etc etc :-D Sorry for off-topic :-pDen 01-09-2011 06:43, David Nadlinger skrev: [snip]BTW, shouldn't etc.curl be std.net.curl now when we have a std.net package.Jonas, do you already have a revised version ready that could immediately be voted upon? I recognize that quite a large number of suggestions was raised, but as there are quite a few other components currently waiting in the review queue, we want to make sure not to introduce any avoidable delays while working through that list.I have done a lot of the changes but there are still quite some work left to do. Please go on with another review and I'll get back when I'm ready for a next round.If not, I would propose to postpone the voting phase and start the review for another component, e.g. David Simcha's std.regionallocator, now. After Jonas had enough time to finish a version he considers fit for inclusion into Phobos, I would suggest a short (one week) combined review/vote period to decide on inclusion with the standard library.Sounds good to me. Thanks for running this review. /Jonas
Sep 01 2011
On 01.09.2011 06:43, David Nadlinger wrote:I forgot to specify a timezone in the announcement, so depending on your location the code review period for the etc.curl module by Jonas Drewsen has either already ended, or is going to end later today:- Finally, it is not quite clear what the best place for this library is. Currently, it resides in the »etc« package because it depends on an external C library, but this decision has been questioned: To begin with, it is not clear what the »etc« package is for in the first place. The Phobos documentation index [3] only has »Modules in etc are not standard D modules. They are here because they are experimental, or for some other reason are not quite suitable for std, although they are still useful«. Besides an implementation of the Gamma function,That's been gone for years. It was removed in DMD 2.027.the package currently contains translated C headers for zlib and sqlite, so there is precedent for the aforementioned position that etc is the appropriate place for modules depending on external libraries.
Sep 04 2011
On 9/4/11 9:09 PM, Don wrote:On 01.09.2011 06:43, David Nadlinger wrote:etc/gamma.d is still in Git master. DavidBesides an implementation of the Gamma function,That's been gone for years. It was removed in DMD 2.027.
Sep 04 2011