Ilya Zakharevich on Thu, 11 Jan 2024 21:56:52 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Is it possible to implement closures in PARI? |
Currently, PARI supports anonymous subroutines memoizing values of lexical variables (at the moment of creation). Is it theoretically possible to implement¹⁾ closures instead? — In other words: are closures compatible with the PARI⸣s memory model? ¹⁾ I remember that when Larry Wall announced that Perl 5 supports closures, it took quite a lot of effort to make this “implementation” actually compatible with what is “a closure in CS⸣ terms”. This resulted in a test suite for “the expected semantic of closures”. In the early versions of Perl 5, this test suite was in a test file named like closures.t. (I’m pretty sure that it should still be present in newer versions of Perl 5 too.) Currently, the simplest test case (with RO access only, no referenced lexicals containing closures, and no (mutual) recursion) would emit: (12:30) gp > my(a=3, b()=print(a)); a++; b() 3 (with v2.15.4). — Of course, this is not how closures should behave… Thanks, Ilya P.S. In PARI⸣s case, the semantic may be further complicated by a (potential?) difference between write access to a variable, and write access to an array’s element…