logoalt Hacker News

anothername1212/09/20245 repliesview on HN

> Deterministic evaluation - Executing the same code twice will give the same results.

What’s this all about? Don’t most languages?


Replies

laurentlb12/09/2024

Try 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).

phyrex12/09/2024

You don't get access to randomness or time functions or anything that could change the output of a function with the same input

lann12/09/2024

One specific example: many languages use randomized seeds in builtin dict/map types, leading to randomized iteration order.

show 1 reply
zellyn12/09/2024

It 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.)

neuroelectron12/09/2024

Apparently not. Wow. No wonder China is hacking into everything.