Hello,
I am enamored that “Go” sets forward a semi-deterministic system, and seems to embrace the concept of “REST” or in the past “Applicative languages.”
The essential idea is that all information required to create a result is passed on input, and no matter at what time results are meant to be identical.
However, there are functions in “Go” that, if used by a ‘deterministic’ function, can cause input to a function to not result in deterministic output. That is, for identical input, the result of a function is determined by “Go” usages and library functions.
I am trying to categorize these elements in “Go.”
The following are items I have noticed:
Globals
Time
Random number generation, though I do not understand random’s scope
Information from files (much the same as global memory)
Maps, that have randomized order
Local environmental values, such as MAC Address, operating system values, etc.
Naturally, any results from external applications that do not return identical output on identical input.
The concept of “Go” as I read it is to move more to a “RESTful” interface, in which output is based on input only, though naturally there are practical limitations. I would like to categorize functions and capabilities of the language that can yield non-deterministic output of functions on the same input, in order to understand a restricted or augmented “Go” that is fully “RESTful”.