C0 but Python. What could go wrong...
Py0 is an interpreted, dynamically-typed, language designed to remove complixities of python. Similar to what C0 does to C, Py0 literally removes every useful unsafe aspect of Python, in order to make it easier to use.
TODO
Simple variables can be declared as such, that is, the same as how variables are declared in python.
num = 10
str = "foo"Arrays are also supported with the same syntax as python.
arr = [1, 2, 3]To ensure simplicity, Py0 is dynamically typed, with three primitive types: int, float, and str.
int = 1
float = 2.0
str = "bar"
Comments are supported as such. Similar to python, there are no multiline comments.
# This is a commentSimilar to python, Py0 introduces control flow with syntax identical to python.
If, elif, and else statements are supported as such
index = 0
if index == 0:
print("zero")
elif index == 1:
print("one")
else:
print("other")Like python, variables are scoped within their blocks, which are defined by their level of indentation.
Next, loops can be implemented using for loops or while loops. While loops are identical to python, and accept a single condition.
index = 0
while index < 10:
index = index + 1
print(index) # 10For loops are closely similar to python, where the iterator must be an array.
for var in iterator:
print(var)To ensure code safety and correctness can be proved, contracts are introduced. In particular, preconditions, postconditions, and loop invariants can be direct implemented
Preconditions can be declared following a function decleration as such. If a precondition is not met, Py0 immediately exits execution.
requires bar is not None
def foo(bar):
# implementationSimilarily, postconditions can be implemented as follows. \res is used to denote the value that is returned from the function
ensures \res is not None
def baz():
var = None
var = "not none"
return varFinally, loop invariants can be declared both before for loops and while loops.
loop_invariant x >= 0
for x in range(10):
print(x)or
var = 1
loop_invariant var >= 1
while True:
var = var * 2For the sake of... writing good code, once a variable is declared, its type cannot be changed. Similar to C0, variables are immediately "tagged" with their respective type upon decleration.
Therefore, unlike python, this is not valid code.
qux = "str" # type is defined as str
quz = 1 # cannot assign into strAs a result, in order to prove safety, a function to check if a variable is defined to be a certain type, hastag, is provided.
foo_bar = "baz"
print(hastag(foo_bar, str)) # True
print(hastag(foo_bar, int)) # FalseTODO
