VenusScript

A dynamic, easy, highly customizable scripting language.

License

License

GroupId

GroupId

com.github.bloodshura
ArtifactId

ArtifactId

venusscript
Last Version

Last Version

1.3.0
Release Date

Release Date

Type

Type

jar
Description

Description

VenusScript
A dynamic, easy, highly customizable scripting language.
Project URL

Project URL

https://github.com/BloodShura/VenusScript
Source Code Management

Source Code Management

https://github.com/BloodShura/VenusScript/tree/master

Download venusscript

How to add to project

<!-- https://jarcasting.com/artifacts/com.github.bloodshura/venusscript/ -->
<dependency>
    <groupId>com.github.bloodshura</groupId>
    <artifactId>venusscript</artifactId>
    <version>1.3.0</version>
</dependency>
// https://jarcasting.com/artifacts/com.github.bloodshura/venusscript/
implementation 'com.github.bloodshura:venusscript:1.3.0'
// https://jarcasting.com/artifacts/com.github.bloodshura/venusscript/
implementation ("com.github.bloodshura:venusscript:1.3.0")
'com.github.bloodshura:venusscript:jar:1.3.0'
<dependency org="com.github.bloodshura" name="venusscript" rev="1.3.0">
  <artifact name="venusscript" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.github.bloodshura', module='venusscript', version='1.3.0')
)
libraryDependencies += "com.github.bloodshura" % "venusscript" % "1.3.0"
[com.github.bloodshura/venusscript "1.3.0"]

Dependencies

compile (3)

Group / Artifact Type Version
com.github.bloodshura : ignitium-core jar 0.1.0
com.github.bloodshura : ignitium-crypto jar 0.1.0
com.github.bloodshura : sparkium-desktop jar 0.1.0

test (1)

Group / Artifact Type Version
junit : junit jar 4.12

Project Modules

There are no modules declared in this project.

VenusScript

Welcome to the official GitHub repository of the dynamic, injectable, scripting language VenusScript. See the examples directory to get a closer look in how the language works.

using std

ver = "1.3.0"
println("Hi from VenusScript! Version = " + ver)

def sum(int a, int b) {
    return a + b
}

newestSum = 0

async {
    for i in (1, 10) {
        newestSum = sum(i, i)
        println(newestSum)
    }
}

wait(newestSum == 20)
println("Ok!")

Version Planning

Version State Description
0.x done
  • Definitions
  • Functions
  • Function references
  • Standard library
  • Loop containers
  • Branching components
  • Variable references
  • Initial dynamic injection
  • Runtime interpretation
  • Asynchronous features
  • Synchronous features
  • Homogeneous arrays
1.x current
  • Object-oriented features (classes, attributes, methods, maybe polymorphism, etc)
  • Java interoperability
  • Lists
  • Dictionaries/Maps
  • Heterogeneous arrays
2.x planned
  • Functional features
  • Enumerations
  • Debugging utilities and breakpoints
? planned
  • Improved performance
  • Own bytecode compiler and interpreter

How to use

With Gradle:
dependencies {
	compile 'com.github.bloodshura:venusscript:1.3.0'
}
With Maven:
<dependency>
	<groupId>com.github.bloodshura</groupId>
	<artifactId>venusscript</artifactId>
	<version>1.3.0</version>
</dependency>
With other build systems:

If your build system supports fetching dependencies from the Maven central repository, then just include a dependency with group com.github.bloodshura, artifact venusscript and version 1.3.0.

Tech

VenusScript is meant to be used within any Java or JVM-built (Kotlin, Scala, Groovy, etc) application. It is required Java 8+.

Definition

  • Highly extensible
  • Dynamic typing
  • Context/scope manipulation
  • No 'null' type/value
  • Simple syntax
  • Runtime injections (of libraries, function overriding, function definition, etc)
  • Multithreaded
  • Extremely easy syntax

Already implemented

  • Asynchronous features: async scopes
  • Synchronous features: monitor locks (produce, consume), value waiting (e.g. wait(i == 5))
  • Value types
  • Function references
  • Variable references
  • Top-level functions
  • Higher-order functions
  • Dynamic include statements
  • Dynamic using statements
  • Exporting variables to global context (so multiple scripts within the same application can access them)
  • While, do-while containers
  • Break, continue statements
  • Ranged foreach container (e.g. for i in (0, n))
  • Strongly typed function definitions (e.g. def print(string name) {...)
  • Basic standard libraries (random, input, output, cryptography, dialogs, math, runtime injection)
  • Interpret source code at runtime (e.g. interpret("println(3 + 5 + 2 - 1)"))
  • Binary, decimal and hexadecimal literals
  • Execute other scripts, asynchronously or synchronously (e.g. async run("../basic.vs"))
  • Homogeneous arrays

To be implemented

  • Object-oriented programming (classes, attributes, methods, maybe polymorphism, etc)
  • Functional programming (lambdas, data immutability, etc)
  • Collections (heterogeneous arrays, lists, maps, sets)
  • Easier interoperability with Java
  • User-defined value types
  • Debugging features (including, but not limited to, breakpoints)
  • Expand standard libraries
  • Enumerations
  • Simple exception handling?
  • ... and many more...

Documentation

Work in progress.

Versions

Version
1.3.0
1.1.0
1.0.0