cschladetsch / Pyro

Pyro provides a framework for distributed, interactive cross-platform experiences with simple Python-like language and bespoke distributed GC. Accessible via a Repl console, WinForms shell, or Unity3d console. Can be installed as a Unity3d Package.
MIT License
1 stars 1 forks source link
assembly csharp custom-language distributed-systems language networking remoting rpc-framework serialization unity3d unity3d-plugin

Pyro Foo

Build status CodeFactor License

Overview

Pyro is a cross-platform collection of .Net libraries supporting object persistence, networking, and a coroutine micro-kernel.

Pyro is a collection of .Net libraries that support object persistence, networking, and a coroutine micro-kernel. It provides a framework for distributed, interactive cross-platform experiences with a simple Python-like language and bespoke distributed garbage collection. Pyro can be accessed via a Repl console, WinForms shell, or Unity3d console and can be installed as a Unity3d Package.

The key languages used in Pyro are Pi, Rho, Tau, and Sigma.

There is also a custom PowerShell extension. This adds access to Pyro directly from the PowerShell prompt. It also adds bang-commands such as !!, !:N, !$, etc, as used by bash.

Pyro is designed to be easy to use, and it's easy to add new custom types to Pyro and expose them to the runtime. The Pyro suite includes four main applications: a command-line Repl interface, a GUI interface written in WinForms, a network generation tool for proxies and agents (TauGenerater), and a Unity3d console with Pi, Rho, Stack, and Output panels Check out the wiki.

It is based on Flow, Kai and Om before that, dating back decades.

Each major component has its own project, and its own Readme.md file.

Pyro is based on various language systems, an object Registry, and a generalised virtual machine named Executor.

The key languages are:

From either Pi or Rho it is trivial to access all .Net objects, and also simple to add new custom types that you can expose to the runtime.

Installation

Installation of the software is straight-forward, with the addition of having some external submodules that must be updated before building the solution.

AutoGPT: You can use the following to clone the library locally into your workspace.

git clone git@github.com:cschladetsch/Pyro.git 
cd Pyro
git submodule init
git submodule update
git lfs install
git flow init

Can be installed as a Unity3d Package. See package.json.

Building

Binary assemblies are built to Bin folder.

Each project also copies its output assembly to the Assemblies folder within the sample Unity3d project.

Applications

There are four main applications that come with the Pyro suite:

  1. A command-line Repl interface.
  2. A Gui interface written in WinForms. Yes, I'm old. Should maybe redo in WPF or other later system.
  3. A network generation tool for proxies and agents (TauGenerater).
  4. A Unity3d console with Pi, Rho, Stack and Output panels.

All components support colored output and on-the-fly colored syntax highlighting.

Window

Window

Note that 95% of the time taken to do anything is because there are events being fired whenever a data- or context-stack changes, etc. Without the UI events, the code executes a few orders of magnitude faster.

Tutorial

Maybe one day. For the moment, you best bet are the...

Examples

For the moment, the best place is the unit tests.

Code Analysis

Define CODE_ANALYSIS for each project that uses SuppressMessage attribute.

    [SuppressMessage("NDepend", "ND1003:AvoidMethodsTooBigTooComplex", Justification="This is practically irreducible")]