![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
The two other candidates for user scripts were python and Lua. Python code is a nightmare to sandbox properly, and the available Lua interpreters for python didn't give me the kind of control I wanted over the interpreter. In addition, Lua was a bit much for simple custom commands. So, I made my own interpreter.
There is a scripting language available for Rust called Rhai with a similar concept.
Also, I just kinda wanted to try making an interpreted language...
Check out the Links section above.
Scrolls may be installed through pip
:
Linux
python3 -m pip install scrolls-py
Windows
py -3 -m pip install scrolls-py
The module comes with a built-in interpreter that may be invoked by executing the module. (Note that the linux version will be used from now on.)
python3 -m scrolls FILE
Try running some of the examples:
python3 -m scrolls ./examples/arithmetic.scrl
If no file is specified, the interpreter will run in interactive mode:
python3 -m scrolls
Here are some sample programs showcasing the basic syntax of Scrolls. See the examples directory for more.
!def(divisible? a b) {
return $(eq? 0 $(% $a $b))
}
!for(n in $^(rangev 1 101)) {
!if($(divisible? $n 15)) {
print "FizzBuzz"
} !elif($(divisible? $n 3)) {
print "Fizz"
} !elif($(divisible? $n 5)) {
print "Buzz"
} !else {
print $n
}
}
Nth Fibonacci Number
print "This will calculate fib N where fib 0 = 0, fib 1 = 1"
print "Enter N."
input n
set output_msg "Fibonacci number" $n "is"
!if($(< $n 2)) {
print $^output_msg $n
stop
}
set fib_prev 0
set fib 1
set i 2
!while($(<= $i $n)) {
set tmp $fib_prev
set fib_prev $fib
set fib $(+ $tmp $fib)
set i $(+ $i 1)
}
print $^output_msg $fib
Syntax Quirks
# In scrolls everything is a string
"print" "Everything is a string:"
!"for"("operator" "in" "+" "-" "*" "/") {
"print" $($"operator" "5" "8")
}
String Escapes
print "\"test escapes\"\n\ttabbed\n\tlines\nunicode is supported: \u0398hello\u0398\n"
Scrolls may be embedded into any python program:
import scrolls
# Create an interpreter. Note that an interpreter created this
# way will not actually do anything. It's the responsibility of
# the user to configure with the desired language features.
interpreter = scrolls.Interpreter()
# Configure the interpreter with the base language.
# scrolls.base_config is provided to make this common task
# a bit easier.
scrolls.base_config.configure(interpreter)
# Configure with stdio commands like input, and print
interpreter.command_handlers.add(scrolls.StdIoCommandHandler())
# Run your script.
script = """
print "Please enter your name:"
input name
!repeat(4) {
print "Hello," $(cat $name "!")
}
"""
interpreter.run(script)
Multiple control calls without an explicit command separator will break parsing
in interactive mode. For example, the following wrongly identifies else
as a
command call:
>>> !if($false) { print "from if" } !else() { print "from else" }
error:
0 !if($false) { print "from if" } !else() { print "from else" }
^
line 0: Command_call 'else' not found.
A workaround for this is to enter them one line at a time:
>>> !if($false) { print "from if" }
>>> !else() { print "from else" }
from else
Or use a semicolon:
>>> !if($false) { print "from if" }; !else() { print "from else" }
from else
This bug does not affect the parsing of whole scripts.
FAQs
A customizable interpreted microlanguage designed to run untrusted code.
We found that scrolls-py demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.