On 2016-10-07 at 17:35:04 -0400, Diab Jerius wrote: > [my apologies, forgot to send to list] > > > ---------- Forwarded message ---------- > From: Diab Jerius <[email protected]> > Date: Fri, Oct 7, 2016 at 3:52 PM > Subject: Re: [Pdl-general] Read only piddles? > To: Craig DeForest <[email protected]> > > > On Fri, Oct 7, 2016 at 1:00 PM, Craig DeForest > <[email protected]> wrote: > > I don’t think that there is at the moment. > > > > It might be possible to mark a PDL read-only to prevent modification of its > > contents, but modification as you describe involves a Perl-level change to > > the variable: putting a new value in the variable is not something that > > PDL controls. >
Perhaps you could look at using the mprotect() syscall on the PDL's data? You will likely have to allocate it yourself in C so that it is page-aligned. There is an example of how to do this at <http://eli.thegreenplace.net/2013/11/05/how-to-jit-an-introduction>. > That's what I feared. I would like to prevent an inadvertent > > $pdl *= 3; > > I started out with a PDL subclass and overriding as many core methods > and operator overloads that I could think of, but that's a chase with > no end. This way would be really tricky to do. It would possibly have to take into consideration the `inplace` flag and the signature of each function under the PDL namespace. I've found that PDL subclassing is very tricky to do in a way that restricts by certain properties. To do it right, we need a more principled approach to defining the functions as pure and impure functions and some sort of (contract? role-based?) mechanism to indicate the kinds of data that a particular operation can be applied on (like statistical levels of measurements). I'm still thinking about how to approach this --- it seems tricky to do while still remaining fast. Especially when simultaneously thinking about refactoring PDL! Scala and Haskell have done very interesting things in this area that we need to steal. ;-) Regards, - Zaki Mughal > > > > > You could make a Perl copy of the PDL and hand *that* off: > > > > $tmp = $my_pdl; > > untrusted($tmp); > > > > Unfortunately, the piddles may be large and the calls may be many. > I'm trying to avoid too much memory thrashing. > > > > > >> On Oct 7, 2016, at 10:27 AM, Diab Jerius <[email protected]> wrote: > >> > >> I've got an application where I need to maintain a functional > >> relationship between several piddles, but need to hand them over to > >> untrusted code which will destroy that relationship if the piddles are > >> modified. > >> > >> Is there any means of marking a piddle as read only? > >> > >> Thanks, > >> > >> Diab > >> > >> ------------------------------------------------------------------------------ > >> Check out the vibrant tech community on one of the world's most > >> engaging tech sites, SlashDot.org! http://sdm.link/slashdot > >> _______________________________________________ > >> pdl-general mailing list > >> [email protected] > >> https://lists.sourceforge.net/lists/listinfo/pdl-general > >> > > > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, SlashDot.org! http://sdm.link/slashdot > _______________________________________________ > pdl-general mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/pdl-general ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ pdl-general mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/pdl-general
