Crema can restrict the computational complexity of the program to the minimum needed to improve security
"Computational complexity" is a technical term that is related to performance, but not security.
Crema can restrict the computational complexity of the program to the minimum needed to improve security
"Computational complexity" is a technical term that is related to performance, but not security.
Not the author, but I wrote another sub-Turing language. In my opinion, there's two useful properties: a) type inference -- you can infer the type of the whole program b) you can infer memory use and thus avoid the need for garbage collection or manual memory management. Both properties are very useful for performance, of course. :)
I would say that just because your memory use is deterministic, doesn't mean you don't get garbage. Garbage is just memory that isn't needed any more.
for example, in
let
a = f(x)
b = g(y)
in
a + b
If there is working memory used in the body of f(), it will be garbage when f() has finished executing, because it won't be referred to any more.
So it could be freed after f is executed and before g is executed, which may reduce the maximum amount of memory required by the program."The only type of loop supported by Crema is the foreach loop. This loop is used to sequentially iterate over each element of a list. Crema specifically does not support other common loops (such as while or for loops) so that Crema programs are forced to operate in sub-Turing Complete space. In other words, foreach loops always have a defined upper bound on the number of iterations possible during the loop's execution. This makes it impossible to write a loop that could execute for an arbitrary length of time."
Thanks for bringing it up, I was not aware of this: https://en.wikipedia.org/wiki/Total_functional_programming
Recently I had a need to design a small language for a constrained environment, and I spent a bit of time worrying about termination problem. Now I know where to look for more research.