Thank you.  My main point is that I've been wandering extensively around 
the node-verse for the past 6 weeks and this is the first time I've ever 
seen a definitive statement that try/catch is actually safe in that (or a 
similarly simple) context.  What you say always made intuitive sense to me, 
but it's a little daunting to run into the dire-sounding warning early on 
in my excursions into node.

On Friday, January 3, 2014 12:15:15 PM UTC-5, Forrest L Norvell wrote:
>
> The distinction is that JSON.parse is synchronous, and thus try-catch 
> works perfectly well with it. Also, as Isaac said months ago, try-catch 
> starts to get iffy when code in the try block has multiple control-flow 
> branches that could get skipped over by a throw. This way of using 
> try-catch is simple and therefore safe.
>
> It's unfortunate that a built-in JavaScript function that performs I/O 
> (deserialization / unmarshalling) doesn't follow node's I/O convention of 
> using a callback, but more because it's inconsistent (and therefore 
> confusing) than because it's dangerous. If you use JSON.parse the way you 
> describe, it's the best way I know of to deal with that potential error.
>
> F
>
> On Friday, January 3, 2014, Jason Shinn wrote:
>
>> I'm resurrecting this discussion because it's the most useful deep 
>> exploration at the top of Google's search results for why try-catch is 
>> unsafe per the warning in node's documentation.
>>
>> I've been bothered by a seeming disconnect between that warning, stated 
>> in absolute terms, and simple constructs like the following, which I see in 
>> examples all over the place:
>>
>> try {
>>   JSON.parse(mightNotBeValidJson);
>> }
>> catch (e) {
>>   //whoops, it wasn't, but this is the only way I could know that without 
>> using an entirely different parser that fails a little more gracefully
>>   //further, I can handle the fact that it wasn't valid JSON without 
>> nuking the current process from orbit, it's not the only way to be sure
>> }
>>
>> ... try/catch *can* be used in such situations without creating havoc, 
>> can it not?  I'm about 6 weeks into node, and I've mostly worked with that 
>> assumption, but have continued to be bothered by the prohibition laid out 
>> in the docs from trying to recover from such events.
>>
>> If my assumption is in fact correct, I think the statement that "it's 
>> almost never safe" is a little far-reaching, and much more accurate to say 
>> that it's very easy misuse, and is mostly appropriate when it contains code 
>> that is strictly synchronous and where the resources and dependencies used 
>> are well-known and simply managed.  That is to say, a limited but extensive 
>> subset of work done in node.  Beyond that, let people dig their own holes, 
>> this is programming, if we couldn't do anything dangerous it wouldn't be 
>> any fun :)
>>
>> On Saturday, April 6, 2013 1:53:11 PM UTC-4, Isaac Schlueter wrote:
>>>
>>> On Fri, Apr 5, 2013 at 11:09 AM, Nicolas Grilly 
>>> <[email protected]> wrote: 
>>> > Does it mean that this paragraph of Node.js documentation about 
>>> domains: 
>>> > 
>>> > "By the very nature of how throw works in JavaScript, there is almost 
>>> never 
>>> > any way to safely "pick up where you left off", without leaking 
>>> references, 
>>> > or creating some other sort of undefined brittle state." 
>>> > 
>>> > could be rewritten as is (without "in JavaScript"): 
>>> > 
>>> > "By the very nature of how throw works, there is almost never any way 
>>> to 
>>> > safely "pick up where you left off", without leaking references, or 
>>> creating 
>>> > some other sort of undefined brittle state." 
>>>
>>> Yeah, probably, but I don't want to get into a whole big thing about 
>>> how throws in Erlang or Haskell or Lisp are actually perfectly safe, 
>>> or can be made safe in Clojure or Scala, or if only JavaScript had 
>>> typed catches, we could do this or that.  Ugh.  Boring tedious useless 
>>> discussions, those are. 
>>>
>>> Node is for running JavaScript, so JavaScript's limitations are Node 
>>> program limitations.  *JavaScript* throws are fundamentally unsafe if 
>>> they jump over a branch in the execution-flow graph.  To the extent 
>>> that "language X" is like JavaScript, it will be similarly unsafe. 
>>> (Ruby and Python are both very similar to JavaScript - stateful, 
>>> imperative, syntaxy, semi-functional, garbage collected.) 
>>>
>>  -- 
>> -- 
>> Job Board: http://jobs.nodejs.org/
>> Posting guidelines: 
>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> You received this message because you are subscribed to the Google
>> Groups "nodejs" group.
>> To post to this group, send email to [email protected]
>> To unsubscribe from this group, send email to
>> [email protected]
>> For more options, visit this group at
>> http://groups.google.com/group/nodejs?hl=en?hl=en
>>  
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "nodejs" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to