Yes, raising exceptions may result in resource being leaked. Speaking of implementation, raising an exception means jumping from one stack location to another; and all the linear resources between these two locations are leaked.
On Thu, Jun 20, 2019 at 2:41 PM aditya siram <[email protected]> wrote: > Valgrind shows a memory leak: > > ==465== Memcheck, a memory error detector > ==465== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. > ==465== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info > ==465== Command: ./test > ==465== > exit(ATS): uncaught exception at run-time: > test.dats:MyException(1024) > ==465== > ==465== HEAP SUMMARY: > ==465== in use at exit: 40 bytes in 2 blocks > ==465== total heap usage: 2 allocs, 0 frees, 40 bytes allocated > ==465== > ==465== LEAK SUMMARY: > ==465== definitely lost: 24 bytes in 1 blocks > ==465== indirectly lost: 0 bytes in 0 blocks > ==465== possibly lost: 0 bytes in 0 blocks > ==465== still reachable: 16 bytes in 1 blocks > ==465== suppressed: 0 bytes in 0 blocks > ==465== Rerun with --leak-check=full to see details of leaked memory > ==465== > ==465== For counts of detected and suppressed errors, rerun with: -v > ==465== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) > > > > > On Thursday, June 20, 2019 at 1:37:49 PM UTC-5, aditya siram wrote: >> >> This program for instance compiles: >> >> exception MyException of (list_vt(int)) >> >> fun test(l : list_vt(int)): void = >> $raise MyException(l) >> >> implement main0(argc,argv) = >> test(list0_vt_cons(1,list0_vt_nil())) >> >> >> but results in: >> exit(ATS): uncaught exception at run-time: >> >> >> I expect that but would also have expected that the type system would >> require me to free 'l' at some point. >> >> >> On Thursday, June 20, 2019 at 12:35:14 PM UTC-5, aditya siram wrote: >>> >>> Hi, >>> That is closer but what I had in mind is what happens with an exception >>> carries a linear resource, so in that example, imagine the exception was on >>> the '~(x :: xs)' case and looked something like '$raise Exception(x)'. Here >>> 'x' of type 'a' must be consumed whenever the exception is handled. My >>> question is if the linear type system detects such cases. >>> >>> >>> On Thursday, June 20, 2019 at 12:19:09 PM UTC-5, Richard wrote: >>>> >>>> Hello Aditya, >>>> >>>> I know this is not identical but checkout this example, >>>> >>>> https://github.com/githwxi/atslangweb/blob/master/ats2-lang/doc/EXAMPLE/INTRO/sieve_llazy.dats#L53 >>>> >>>> The tilde tells the compiler to free the empty stream in this example. >>>> >>>> Is this similar to what you have in mind? >>>> >>>> -- > You received this message because you are subscribed to the Google Groups > "ats-lang-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/ats-lang-users. > To view this discussion on the web visit > https://groups.google.com/d/msgid/ats-lang-users/6ba9272d-424a-431f-b33e-482483653b23%40googlegroups.com > <https://groups.google.com/d/msgid/ats-lang-users/6ba9272d-424a-431f-b33e-482483653b23%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "ats-lang-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/ats-lang-users. To view this discussion on the web visit https://groups.google.com/d/msgid/ats-lang-users/CAPPSPLrwAXOuYO%2BC5JqJyguOdLsmQKr%3DF5%2B6wH0V8_YHh41VYg%40mail.gmail.com.
