RFC: std.json sucessor

via Digitalmars-d digitalmars-d at puremagic.com
Fri Aug 22 10:24:46 PDT 2014


On Friday, 22 August 2014 at 16:48:44 UTC, Sönke Ludwig wrote:
> Am 22.08.2014 18:15, schrieb "Marc Schütz" <schuetzm at gmx.net>":
>> Some thoughts about the API:
>>
>> 1) Instead of `parseJSONValue` and `lexJSON`, how about static 
>> methods
>> `JSON.parse` and `JSON.lex`, or even a module level functions
>> `std.data.json.parse` etc.? The "JSON" part of the name is 
>> redundant.
>
> For those functions it may be acceptable, although I really 
> dislike that style, because it makes the code harder to read 
> (what exactly does this parse?) and the functions are rarely 
> used, so that that typing that additional "JSON" should be no 
> issue at all. On the other hand, if you always type "JSON.lex" 
> it's more to type than just "lexJSON".

I'm not really concerned about the amount of typing, it just 
seemed a bit odd to have the redundant JSON in there, as we have 
module names for namespacing. Your argument about readability is 
true nevertheless. But...

>
> But for "[JSON]Value" it gets ugly really quick, because 
> "Value"s are such a common thing and quickly occur in multiple 
> kinds in the same source file.
>
>>
>> 2) Also, `parseJSONValue` and `parseJSONStream` probably don't 
>> need to
>> have different names. They can be distinguished by their 
>> parameter types.
>
> Actually they take exactly the same parameters and just differ 
> in their return value. It would be more descriptive to name 
> them parseAsJSONValue and parseAsJSONStream - or maybe 
> parseJSONAsValue or parseJSONToValue? The current naming is 
> somewhat modeled after std.conv's "to!T" and "parse!T".

... why not use exactly the same convention then? => 
`parse!JSONValue`

Would be nice to have a "pluggable" API where you just need to 
specify the type in a factory method to choose the input format. 
Then there could be `parse!BSON`, `parse!YAML`, with the same 
style as `parse!(int[])`.

I know this sound a bit like bike-shedding, but the API shouldn't 
stand by itself, but fit into the "big picture", especially as 
there will probably be other parsers (you already named the 
module std._data_.json).


More information about the Digitalmars-d mailing list