4 ms·
> Deterministic evaluation - Executing the same code twice will give the same results. What’s this all about? Don’t most languages?
by anothername12 2y ago
> Deterministic evaluation - Executing the same code twice will give the same results.
What’s this all about? Don’t most languages?
- lann 2y agoOne specific example: many languages use randomized seeds in builtin dict/map types, leading to randomized iteration order.
- chubot 2y agoYeah, also Starlark is embedded like Lua, and doesn't come with batteries included like Python So that means you can control the APIs, and say opendir() closedir() in Unix returns filenames in different orders. Depending on what the data structure in the kernel is So many programs in other languages aren't deterministic just because they use APIs that aren't deterministic
- phyrex 2y agoYou don't get access to randomness or time functions or anything that could change the output of a function with the same input
- zellyn 2y agoIt can be very valuable to know that if you put the same files in, you get _exactly_ byte-for-byte identical artifacts out of your build system. Even letting your language access the actual current date/time can break that. (IIRC, I don't believe Bazel actually has fully deterministic builds yet, though.)
- laurentlb 2y agoTry this in Python: id("ab") # not deterministic hash("ab") # not deterministic def foo(): pass str(foo) # not deterministic Another sneaky one is the `is` operator in Python, where the Python documentation says: > Due to automatic garbage-collection, free lists, and the dynamic nature of descriptors, you may notice seemingly unusual behaviour in certain uses of the `is` operator Related to that is the `__del__` method: when exactly is it called? It's quite easy to get non-deterministic code in Python and in many languages. And of course, there are lots of non-deterministic functions in the standard library (Starlark doesn't provide them).
- neuroelectron 2y agoApparently not. Wow. No wonder China is hacking into everything.