Skip to content

Drop-in for ⍎ to execute arbitrary APL code safely

License

Notifications You must be signed in to change notification settings

abrudz/dyalog-safe-exec

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Safe Execute Logo

Safe Execute for Dyalog APL

Drop-in for to execute arbitrary APL code safely

Load with ⎕FIX 'file://path/Safe.dyalog' then execute an expression with for example Safe.Exec '⍳10'.

Expressions are executed in a new empty namespace with ⎕IO←1 and ⎕ML←1, but you can also supply a namespace ref in the optional left argument, and the expression will then be executed there.

The left argument may also contain a number indicating a timeout for expressions. If no such number is given, 10 (seconds) will be used.

If an error occcurs in the expression, it will be re-signalled from Safe.Exec but with error number incremented by 200. E.g. a DOMAIN ERROR which is normally error number (⎕EN) 11 will be signalled as 211.

The following errors may also be signalled:

6 (VALUE ERROR) if the expression is shy or has no result

10 (EXPRESSION TIME LIMIT EXCEEDED) if the expression timed out

11 (NOT PERMITTED) if the expression attempted to use a restricted feature.

Example usage

      ns←⎕NS ⍬
      ns.A←10
      ns Safe.Exec '⍳A'
1 2 3 4 5 6 7 8 9 10

For a more advanced example preserving a state and handling errors, see Example.dyalog.

Logo

By dzaima and Wezl.

About

Drop-in for ⍎ to execute arbitrary APL code safely

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Languages