Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"actors" forward in readme #210

Open
goodboy opened this issue May 14, 2021 · 2 comments
Open

"actors" forward in readme #210

goodboy opened this issue May 14, 2021 · 2 comments
Assignees

Comments

@goodboy
Copy link
Owner

goodboy commented May 14, 2021

I think to prevent having to rehash/explain actor theory each time we get new onlookers there should be a quick rant in the readme under the hood section regarding what the literature, videos, and thus theory author's have to say about what constitutes being an actor model implementation.

This is obviously directly related to #18 which is of course for further involved discourse / research / interpretations of the theory.

The main issue I think we're finding is a lot of onlookers tend to have misconceptions about actor model theory mostly pertaining to this notion that actors are somehow realized as some kind of specific API or type system semantics; this is simply not true.

an "actor model" is a conceptual, computational model; it is specifically not strict about the limitations of an implementation of the system at hand. In fact, arguably most interpretations of the concepts which try to literally implement (usually with the same names) the distinguishing (abstract) elements from the model (eg. messages, ether, everything is an actor, strictly un-buffered channels, mailboxes) are simply misguided and not in line with original authors' intent.

Here are the true and minimal set of caveats:

  • the actor model came about specifically to cope with a controversial theory that proposes that unbounded non-determinism can exist in real systems.

    • the actor model is proposed as a solution to deal with UND
    • prior systems that didn't address this theoretical issue eventually did adjust their formalities to include UND as a property:

    These early models by Milner and Hoare both had the property of bounded nondeterminism. Modern, theoretical CSP ([Hoare 1985] and [Roscoe 2005]) explicitly provides unbounded nondeterminism.

  • the only absolute strict requirements for an implementation to be considered an "actor model" are that it must adhere to the 3 axioms:

    • An actor is a computational entity that, in response to a message it receives, can concurrently:

      • send a finite number of messages to other actors;
      • create a finite number of new actors;
      • designate the behavior to be used for the next message it receives.
    • if you don't adhere to these then you aren't an actor model
  • this can be verified explicitly by Hewitt saying it plain and simple at this point, in this video

  • concepts from the actor model are more often mapped onto existing systems which can address the issue of UND as opposed to taking the concepts and trying to implement subjective author-perceived semantics literally; this is not what the original author proposes.

Since tractor does in fact have the ability to cope with UND (as far as we can tell), and it can suffice the 3 axioms, there is no reason it is not an actor model. We're of course willing to be proven wrong.

My hope is we can quell confusion and misconceptions about all of this from the outset so that we can move on with adding more features to the project without getting caught up with superfluous "actor model concept forced semantics mappings" that don't fit with the idiomatics of python and trio style structured concurrency.

I will say this again, we are not trying to look like what you think an actor model is supposed to look like.
Why?
Maybe you didn't grok the argument presented in the paragraph above?

Assertion: most new onlookers likely have no clue why they think that "actor model" things should look a certain way in the first place; they haven't read the canon literature.

@goodboy
Copy link
Owner Author

goodboy commented May 14, 2021

This set of blog posts IMO further cements the above claim.

Python is not an actor programming language, thus trying to force actor types onto it doesn't necessarily accomplish anything. What's important is whether tractor as a runtime system adheres to the axioms and can demonstrate the necessary minimal functionality:

each actor can,

  • create a new actor -> accomplished through our Python process spawning system
  • send a message to an existing actor -> supported by our IPC and message transport system
  • designate a new behavior for the current actor -> realized as trio scheduled tasks (coroutines) which can be suspended and resumed depending on what message next arrives to the process over the transport layer

I'm fairly confident most advanced concurrency people can map the ideas / requirements from that post to functionality in tractor. If there is still ongoing disbelief we can possibly write up a thorough walk-through in the docs to present the cases explicitly.

goodboy added a commit that referenced this issue May 31, 2021
goodboy added a commit that referenced this issue Jun 14, 2021
@goodboy
Copy link
Owner Author

goodboy commented Jun 17, 2021

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant