An interpreted statically typed multi paradigm general purpose programming language designed for cross platform applications.
Project description
R# - RSX
An interpreted statically typed multi paradigm general purpose programming language designed for cross platform applications.
RSX Logo
RSX Icon
Requirements
- Python 3.10 or higher
Getting Started
How to install
Windows (Compiles RSX source files and places them in C:\RSX, also installs the RSX python library)
.\install.bat
Linux (Compiles RSX source files and installs the RSX python library)
./install.sh
Difference between rsxpy and rsx
- rsx only works on Windows
- rsxpy requires python but rsx doesn't
How to [run/build] a RSX program
[rsxpy/rsx] main.rsx [run/build]
How to [run/build] a RSX bytecode
[rsxpy/rsx] main.rsxc [run/build]
How to make a RSX library with python
Using RSX Tools
from rsxpy.tools import *
create_library("library")
@create_function("VOID", {"message": "STRING"})
def log(environment):
print(environment["args"]["message"], flush = True)
library = pack_library()
Using RSXLib
from rsxpy import rsxlib
rsxlib.begin()
def log(message: str) -> None:
print(environment["args"]["message"], flush = True)
rsxlib.end()
How to make a RSX library with RSX header files
library.rsxh
include "rsxio" : *;
void log(string message) {
std::rout(message + std::endl());
}
main.rsx
include "library.rsxh";
int main(string[] args) {
library::log("Hello, World!");
}
How to add an include folder
[rsxpy/rsx] main.rsx run -Imy-include-folder
Command line arguments
- -I[dir]
- -rmI[dir]
- -timeit=[true/false]
- -gettok=[true/false]
- -getast=[true/false]
- -bytecode=[true/false]
- -noconsole=[true/false]
- -console=[true/false]
- run
- build
Examples
Hello, World!
include "rsxio" : *;
// using namespace std;
int main(string[] args) {
std::rout("Hello, World!" + std::endl());
return 0;
}
Builder
include "rsxbuild", "rsxsys", "rsxio" : *;
int main(string[] args) {
std::rout("file name > ");
std::build_program(
std::rin(),
{std::getdir() + "/include/"},
true, std::getdir() + "/icon.ico"
); return 0;
}
Web Server
include "rsxsocket", "rsxio" : *;
int main(string[] args) {
auto server = std::socket(std::AF_INET, std::SOCK_STREAM);
std::bind(server, "localhost", 5656);
std::listen(server);
string index = "HTTP/1.1 200 OK\n\n<p>Hello, World!</p>";
while (true) {
auto connection = std::accept(server);
string response = std::recv(connection, 1024);
std::rout(response + std::endl());
std::send(connection, index);
std::close(connection);
}
return 0;
}
Raylib
include "rsxraylib" : *;
int main(string[] args) {
InitWindow(1200, 600, "R#");
// SetTargetFPS(60);
while (!WindowShouldClose()) {
BeginDrawing();
ClearBackground(RAYWHITE);
DrawFPS(10, 10);
EndDrawing();
}
CloseWindow();
return 0;
}
3D Projection Using Raylib
include "rsxio", "rsxraylib" : *;
float[] project_vertices(float[] vertices, float[] position, float focal_length) {
float[(int) (vertices.length() / 3 * 2)] projected_vertices;
int index = 0;
for (int i = 0; i < vertices.length(); i += 3) {
if ((focal_length + (vertices[i + 2] + position[2])) == 0 || (focal_length * (vertices[i] + position[0])) == 0 || (focal_length * (vertices[i + 1] + position[1])) == 0)
continue;
float x_projected = (focal_length * (vertices[i] + position[0])) / (focal_length + (vertices[i + 2] + position[2]));
float y_projected = (focal_length * (vertices[i + 1] + position[1])) / (focal_length + (vertices[i + 2] + position[2]));
projected_vertices[index++] = x_projected; projected_vertices[index++] = y_projected;
}
return projected_vertices;
}
float[] scale_vertices(float[] vertices, float scale) {
float[vertices.length()] new;
for (int i = 0; i < vertices.length(); i++) {
new[i] = vertices[i] * scale;
}
return new;
}
int main() {
const int width = 1200, height = 600;
InitWindow(width, height, "RSX");
SetTargetFPS(60);
float[] vertices = scale_vertices({
-0.5f, -0.5f, 0.0f,
-0.5f, 0.5f, 0.0f,
0.5f, 0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
-0.5f, -0.5f, -0.5f,
-0.5f, 0.5f, -0.5f,
0.5f, 0.5f, -0.5f,
0.5f, -0.5f, -0.5f,
}, 100);
int[] indices = {
0, 1,
1, 2,
2, 3,
3, 0,
4, 5,
5, 6,
6, 7,
7, 4,
0, 4,
1, 5,
2, 6,
3, 7
};
int[] offset = {width / 2, height / 2};
float[] position = {0.0f, 0.0f, 0.0f};
float speed = 0.0f;
float focal_length = 100.0f;
while (!WindowShouldClose()) {
BeginDrawing();
ClearBackground(BLACK);
DrawText((string) GetFPS() + " FPS", 10, 10, 20, RAYWHITE);
float[] projected_vertices = project_vertices(vertices, position, focal_length);
if (IsKeyDown(KEY_W)) position[2] -= speed;
if (IsKeyDown(KEY_S)) position[2] += speed;
if (IsKeyDown(KEY_A)) position[0] += speed;
if (IsKeyDown(KEY_D)) position[0] -= speed;
if (IsKeyDown(KEY_SPACE)) position[1] += speed;
if (IsKeyDown(KEY_LEFT_SHIFT)) position[1] -= speed;
if (IsKeyDown(KEY_LEFT_CONTROL)) speed = 3.0f;
else speed = 2.0f;
for (int i = 0; i < projected_vertices.length(); i += 2)
DrawCircle(projected_vertices[i] + offset[0], projected_vertices[i + 1] + offset[1], 5, RAYWHITE);
for (int i = 0; i < indices.length(); i += 2) {
if (projected_vertices.length() >= indices[i] * 2) {
DrawLine(projected_vertices[indices[i] * 2] + offset[0], projected_vertices[indices[i] * 2 + 1] + offset[1],
projected_vertices[indices[i + 1] * 2] + offset[0], projected_vertices[indices[i + 1] * 2 + 1] + offset[1], RAYWHITE);
}
}
EndDrawing();
}
CloseWindow();
return 0;
}
The RSX Package Manager: Raid
A package manager for RSX
Raid Logo
How to install
Raid comes with RSX no need to install anything
Difference between raidpy and raid
- raid only works on Windows
- raidpy requires python but raid doesn't
How to create a new Raid project
[raidpy/raid] new console my_console_project
How to [run/build] a Raid project
[raidpy/raid] [run/build] my_console_project
Libraries
- rsxbuild
- rsxthread
- rsxio
- rsxf
- rsxgui
- rsxmath
- rsxmixer
- rsxrand
- rsxraylib
- rsxstr
- rsxstd
- rsxsys
- rsxterm
- rsxtime
- rsxos
- rsxsocket
- rsxsdl2
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
rsxpy-0.1.1.tar.gz
(225.7 kB
view details)
File details
Details for the file rsxpy-0.1.1.tar.gz
.
File metadata
- Download URL: rsxpy-0.1.1.tar.gz
- Upload date:
- Size: 225.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 79411f3af3a122aeaab8e760be34c58ceff6f0ace1e668cff769d5e514ea7211 |
|
MD5 | 11cfa0c40633dc0e8725009f238200ef |
|
BLAKE2b-256 | a9c23c541cc81b038e13e44303944aa613d60613854a5d1715840d82597fbb52 |