Re: Parser bug: if missing ", " in list between records, the first is ignored, and no parser warnings are given.
Loïc Hoguin <[email protected]>
| Newsgroups | gmane.comp.lang.erlang.bugs |
|---|---|
| Organization | Nine Nines |
| Message-ID | <[email protected]> |
On 11/09/2014 12:40 PM, Roland Karlsson wrote: > > On Sat, 8 Nov 2014 09:02:08 +0100 > Mattias Waldau <[email protected]> wrote: > >> Yes, I can agree that >> >> #rec{a=2}#rec{b=3} >> >> is a matter of opinion. However, I completely fail to understand how >> >> #rec{a=2}#rec{a=3} >> >> can be a matter of opinion, since data in the code is LOST. > > Data is not lost. > The code creates a record rec with the field a being 2. > Then the code creates a copy of that record where the field now is 3. > The first record is instance not used though. But, as it has no name > that usually do not give a warning in Erlang, just like unused variables > with underscore names do not give a warning. > > But ... I can see why it might maybe be a warning there. > It IS a matter of opinion though IMHO. When I said it needs a warning earlier in the thread, I meant one you can set optionally, similar to +warn_export_all. Regardless of the contents of the record. You have to program in a very specific way to be annoyed by that kind of warning though. > You have to be aware of the following code though. > > (?MY_DEF_REC)#rec{a=3} > > Lets say the macro MY_DEF_REC creates a record rec with some > special default values. Lets say that one of the fields you have a > special default value for is a. Do you want a warning? And that would be one such way... though my heart would skip a beat seeing code like this. Most people simply do not write code that ends up as #rec{...}#rec{...}, and could very much benefit from a warning that avoids this error. Others can simply choose not to enable it. > /Roland > > > > > > > > >> There should be a warning. My sample below shows how catastropic the missing "," can be. >> >> /mattias >> >> On 07/11/2014 13:22, Roland Karlsson wrote: >>> Maybe we shall not discuss this for ever :) >>> It is a matter of opinion after all. >>> >>> But - it is the same IMHO. It is a matter of operators and the need >>> to set paranthesis when the precedents and right/left association is >>> not obvious. >>> >>> The rec example can be written thus >>> >>> (#rec{a=2})#rec{b=3} >>> >>> Then everything is clear. >>> >>> >>> /Roland >>> >>> >>> >>>> I'm not sure how that relates. This expression can be reasonably written >>>> on purpose. The same cannot be said for #rec{a=2}#rec{b=3}. >>>> >>>> On 11/07/2014 02:01 PM, Roland Karlsson wrote: >>>>> If there is a warning there, then all expressions including operators, >>>>> e.g. arithmetic, should have warnings. How about 10 + 1 rem 3 + 7. ? >>>>> Do you know the precedence of + and rem ? What is the result? >>>>> >>>>> /Roland >>>>> >>>>> >>>>> >>>>>> Warnings are ordinary Erlang code which is prone to errors. >>>>>> >>>>>> On 11/07/2014 01:46 PM, Roland Karlsson wrote: >>>>>>> No warning is needed methinks. It is just ordinary Erlang code. >>>>>>> It is equal to. >>>>>>> >>>>>>>> REC1 = #rec{b=3}. >>>>>>>> REC2 = REC1#rec{a=2}. >>>>>>> Nothing strange at all. >>>>>>> >>>>>>> >>>>>>> /Roland >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>>> It is legal but there probably should be a warning for this >>>>>>>> particular >>>>>>>> case. I cannot think of a valid reason to do #rec{a=2}#rec{b=3} when >>>>>>>> you >>>>>>>> can just do #rec{a=2, b=3}. >>>>>>>> >>>>>>>> On 11/07/2014 10:09 AM, Vlad Dumitrescu wrote: >>>>>>>>> Hi Mattias, >>>>>>>>> >>>>>>>>> This isn't a bug. The expression #rec{a=2}#rec{b=3} is legal, and is >>>>>>>>> the >>>>>>>>> same thing as (#rec{a=2})#rec{b=3} or #rec{a=2,b=3}. If the keys >>>>>>>>> overlap, then the last one "wins". >>>>>>>>> >>>>>>>>> best regards, >>>>>>>>> Vlad >>>>>>>>> >>>>>>>>> >>>>>>>>> On Thu, Nov 6, 2014 at 9:21 AM, Mattias Waldau >>>>>>>>> <[email protected] <mailto:[email protected]>> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>> This is the program >>>>>>>>> >>>>>>>>> -module('missing-comma-not-detected'). >>>>>>>>> >>>>>>>>> -export([data/1]). >>>>>>>>> >>>>>>>>> -compile(export_all). >>>>>>>>> >>>>>>>>> -record(shcnode, { >>>>>>>>> nodename :: any(), >>>>>>>>> y_axis :: number(), >>>>>>>>> children :: [any()], >>>>>>>>> article_number :: number(), >>>>>>>>> attribute_condition :: string()}). >>>>>>>>> >>>>>>>>> >>>>>>>>> data(1) -> >>>>>>>>> [ >>>>>>>>> #shcnode{nodename = start, y_axis = 0, children = >>>>>>>>> [d1285]}, >>>>>>>>> #shcnode{nodename = d1285, y_axis = 295, children = >>>>>>>>> [1939, >>>>>>>>> 1940]} >>>>>>>>> #shcnode{nodename = 1940, y_axis = 525, children = >>>>>>>>> [bm3203], >>>>>>>>> article_number = 14432861}, >>>>>>>>> #shcnode{nodename = 1939, y_axis = 530, children = >>>>>>>>> [bm3203], >>>>>>>>> article_number = 14432860}, >>>>>>>>> #shcnode{nodename = bm3203, y_axis = 915, children = []} >>>>>>>>> ]. >>>>>>>>> >>>>>>>>> >>>>>>>>> Note the missing "," after [1939, 1940]} >>>>>>>>> >>>>>>>>> Only 4 rows are detected >>>>>>>>> >>>>>>>>> length('missing-comma-not-detected':data(1)). >>>>>>>>> 4 >>>>>>>>> >>>>>>>>> --- >>>>>>>>> >>>>>>>>> If I add the comma, I get >>>>>>>>> >>>>>>>>> length('missing-comma-not-detected':data(1)). >>>>>>>>> 5 >>>>>>>>> >>>>>>>>> ---- >>>>>>>>> >>>>>>>>> I am using Erlang 17.3 on ubuntu. >>>>>>>>> >>>>>>>>> erlang:system_info(otp_release). >>>>>>>>> "17" >>>>>>>>> >>>>>>>>> 36> |erl -V >>>>>>>>> Eshell V6.2 (abort with ^G) >>>>>>>>> 1> | >>>>>>>>> >>>>>>>>> --- >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> >>>>>>>>> Mattias >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> erlang-bugs mailing list >>>>>>>>> [email protected] <mailto:[email protected]> >>>>>>>>> http://erlang.org/mailman/listinfo/erlang-bugs >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> erlang-bugs mailing list >>>>>>>>> [email protected] >>>>>>>>> http://erlang.org/mailman/listinfo/erlang-bugs >>>>>>>>> >>>>>>>> -- >>>>>>>> Loïc Hoguin >>>>>>>> http://ninenines.eu >>>>>>>> _______________________________________________ >>>>>>>> erlang-bugs mailing list >>>>>>>> [email protected] >>>>>>>> http://erlang.org/mailman/listinfo/erlang-bugs >>>>>>>> >>>>>>> >>>>>> -- >>>>>> Loïc Hoguin >>>>>> http://ninenines.eu >>>>>> >>>>> >>>> -- >>>> Loïc Hoguin >>>> http://ninenines.eu >>>> _______________________________________________ >>>> erlang-bugs mailing list >>>> [email protected] >>>> http://erlang.org/mailman/listinfo/erlang-bugs >>>> >>> >> >> _______________________________________________ >> erlang-bugs mailing list >> [email protected] >> http://erlang.org/mailman/listinfo/erlang-bugs > -- Loïc Hoguin http://ninenines.eu _______________________________________________ erlang-bugs mailing list [email protected] http://erlang.org/mailman/listinfo/erlang-bugs