422404 / actorlang Goto Github PK
View Code? Open in Web Editor NEWA small interpreted language for actor programming.
Home Page: https://actorlang.readthedocs.io/en/latest/
License: MIT License
A small interpreted language for actor programming.
Home Page: https://actorlang.readthedocs.io/en/latest/
License: MIT License
System properties would be a special kind of variables.
These variables would have qualified names using dots as separators as a convention.
They would allow to alter the system behavior or retrieve info about the system.
Example:
display @system.network.ipv4;
...
@system.events.logger = create Logger ("debug");
Add a PoisonPill literal value. When an actor retrieve a message with a PoisonPill
value from its mailbox, the actor must stop any further messages processing.
It might help to show appropriate errors in a language extension.
The extension would enable syntax highlighting and running scripts from the editor.
For such an extension, we would need an LSP compliant language server (we could build one with LSP4J).
Features:
See the relevant line in the workflow.
Logs should be outputed to stderr
.
Add an option to suppress log messages.
Add a file named NOTES.md that will be read by the "release" action.
The content of the file will be set as the release notes.
Add collections and built-in functions to manipulate them.
Example:
myList = newList();
listAdd(myList, 1337);
listRemove(myList, 1337);
if (listContains(myList, 42)) {
...
}
if (listEmpty(myList)) {
...
}
mySet = newSet();
...
myMap = newMap();
mapPut(myMap, "hello", 42);
mapGet(myMap, "hello");
mapRemove(myMap, "hello");
if (mapContains(myMap, "hello")) {
...
};
keys = mapKeys(myMap);
values = mapValues(myMap);
Add the ability to run a registry were remote actors would be exported by scripts.
Example:
frontend.actor:
$x The x value
$y The y value
---
ResultPrinter () [result] = {
display result;
shutdown
};
printer = create ResultPrinter ();
send [$x, $y, printer] to remote "Compute/Sum"
backend.actor:
fun sum(x, y) = x + y;
SumBackend () [x, y, callback] = {
send [sum(x, y)] to callback
};
backend = create SumBackend ();
bind backend to "Compute/Sum"
Run:
REGISTRY=127.0.0.1:8080
actorlang registry $REGISTRY &
actorlang run --registry $REGISTRY backend.actor &
actorlang run --registry $REGISTRY frontend.actor -x 20 -y 22
# Prints: 42
Add a way to iterate over the items of a collection.
Example:
for (a of newList(1, 2, 3)) {
display a
}
Multiple coverage reports are currently sent to Codecov, one for each module that contains tests. This is not optimal as tests in a module should be able to add coverage data to another one. The JaCoCo Report Aggregation Plugin could help with it.
The workflow quality-gates.yml is referencing action eskatos/gradle-command-action using references v1. However this reference is missing the commit 6ff2065a1233a621be482a67cf97261047133d35 which may contain fix to the some vulnerability.
The vulnerability fix that is missing by actions version could be related to:
(1) CVE fix
(2) upgrade of vulnerable dependency
(3) fix to secret leak and others.
Please consider to update the reference to the action.
Add a shutdown
statement that shuts down the current instance.
ReadTheDocs rebuilds it anyway so it is useless to commit the build output.
Log the position of the send
statement that triggered this error.
The send
statement position will have to be added to every messages sent by an actor.
It helps to give an idea of what this repo is about.
Add a way to implement the Reaper Pattern without introducing complex functionalities to the language.
It could be done by adding these functionalities to the system:
shutdown
statement which shutdown a running instancePoisonPill
literal value which kills an actor receiving itExample:
Reaper (Actors) [dead] = {
if (setContains(Actors, dead)) {
setRemove(Actors, dead)
}
if (setEmpty(Actors)) {
shutdown
}
};
MyActor () ["display", str] = {
display str;
send [PoisonPill] to self
};
MyActor () ["start"] = {
send ["display", "Hello, world!"] to self
};
actor = create MyActor ();
trackedActors = setNew();
setAdd(trackedActors, actor);
@system.events.reaper = create Reaper (trackedActors);
send ["start"] to actor
Add a way to pass arguments to a script.
We could introduce something like a parameter block that lists parameters and their usage.
The parameters usage would show up if the user requests the help of the script (e.g. with a --help
switch).
Example:
$retryCount The number of time to retry ...
$timeout The number of seconds before ...
---
Actor (RetryCount) ["hello", timeout] = {
...
};
myActor = create Actor ($retryCount);
send ["hello", $timeout] to myActor;
These libraries could be investigated:
class MyClass(private val loggerFactory: LoggerFactory) {
private val logger = loggerFactory.newLogger(this::class)
fun myMethod() {
logger.info("Hello from my method!")
}
}
Do as this comment says.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.