Jyxal - a coffee-flavored version of Vyxal compiled for the Java Virtual Machine

Overview

Jyxal

Jyxal is a coffee-flavored version of Vyxal compiled for the Java Virtual Machine. A list of differences can be seen here.

Running

Note: Jyxal and all JARs produced by Jyxal require Java 17 or higher to run.

You can grab the latest release from the releases tab. You can also download the latest auto-built release by going to the actions tab, clicking on the latest action run on master, and scrolling all the way down to show the artifact. A third way is by building it yourself.

To compile some Jyxal code, all you have to do is run the command java -jar Jyxal.v .jar [flags] (for version 0.1.0, the JAR is named Jyxal-0.1.0.jar). A list of flags can be found here. The compiler will then compile the source file into a JAR with the same name. This JAR contains the entire runtime for Jyxal, so no extra files are needed. There will also be another file called debug.log generated, but you may safely ignore/delete it. To run the resultant JAR, run java -jar .jar [flags] [inputs] .

Building it Yourself

Jyxal uses Gradle for building, but the wrapper is included in the repository, so you do not have to build it yourself. To build Jyxal, run ./gradlew shadowJar. Your IDE's "build" command will not work, as shadowJar also copied the runtime environment into the resulting JAR, while the command does not do that. The resulting JAR will be located under /build/libs/.

Compiler Flags

Flag What It Does
V This flag makes the compiler read files in the Vyxal encoding
D This flag makes the compiler print the parse tree, useful for debugging.
o This flag forces the compiler to not perform any optimizations on the compiled bytecode.
f This flag pipes implicit output of the program into a file called test.out, useful as some terminals cannot display unicode chars correctly.
Comments
  • Create jar artifact in Gradle workflow

    Create jar artifact in Gradle workflow

    This workflow will save the jar generated in the Gradle workflow. If someone wants the latest build, they can just grab that instead of building Jyxal themselves. You can find the jar produced by this commit here (scroll to the bottom).

    opened by cgccuser 2
  • SYMJY

    SYMJY

    You read that right, folks! The all new 2022 Seggan SymJy. With superior performance and direct bytecode compilation, it is guaranteed 1% faster than Symvy!

    P.S. don't tell anyone, but I haven't added cookies yet

    opened by Seggan 1
  • Add factorial/sentence case element

    Add factorial/sentence case element

    This also adds decrement element, exclusive zero range, exclusive one range, and parity

    I tried putting the code into Myxal, but it didn't work, so you can paste it in once Myxal works.

    Parsing program...
    Compiling program...
    Extracting runtime classes...
    Writing to jar...
    Performing post-compilation optimisations...
    ProGuard, version undefined
    Unexpected error while computing stack sizes:
      Class       = [jyxal/Main]
      Method      = [main([Ljava/lang/String;)V]
      Exception   = [java.lang.IllegalArgumentException] (Stack size becomes negative after instruction [20] invokestatic #39 = Methodref(io/github/seggan/myxal/runtime/RuntimeMethods.factorial(Lio/github/seggan/myxal/runtime/ProgramStack;)Ljava/lang/Object;) in [jyxal/Main.main([Ljava/lang/String;)V])
    Unexpected error while editing code:
      Class       = [jyxal/Main]
      Method      = [main([Ljava/lang/String;)V]
      Exception   = [java.lang.IllegalArgumentException] (Stack size becomes negative after instruction [20] invokestatic #39 = Methodref(io/github/seggan/myxal/runtime/RuntimeMethods.factorial(Lio/github/seggan/myxal/runtime/ProgramStack;)Ljava/lang/Object;) in [jyxal/Main.main([Ljava/lang/String;)V])
    Exception in thread "main" java.lang.IllegalArgumentException: Stack size becomes negative after instruction [20] invokestatic #39 = Methodref(io/github/seggan/myxal/runtime/RuntimeMethods.factorial(Lio/github/seggan/myxal/runtime/ProgramStack;)Ljava/lang/Object;) in [jyxal/Main.main([Ljava/lang/String;)V]
            at proguard.classfile.attribute.visitor.StackSizeComputer.evaluateInstructionBlock(StackSizeComputer.java:348)
            at proguard.classfile.attribute.visitor.StackSizeComputer.visitCodeAttribute0(StackSizeComputer.java:162)
            at proguard.classfile.attribute.visitor.StackSizeComputer.visitCodeAttribute(StackSizeComputer.java:124)
            at proguard.classfile.editor.StackSizeUpdater.visitCodeAttribute(StackSizeUpdater.java:44)
            at proguard.classfile.editor.CodeAttributeEditor.visitCodeAttribute0(CodeAttributeEditor.java:595)
            at proguard.classfile.editor.CodeAttributeEditor.visitCodeAttribute(CodeAttributeEditor.java:530)
            at proguard.classfile.util.DynamicMemberReferenceInitializer.visitCodeAttribute(DynamicMemberReferenceInitializer.java:195)
            at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:138)
            at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:148)
            at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:94)
            at proguard.classfile.visitor.MemberVisitor.visitProgramMethod(MemberVisitor.java:57)
            at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:140)
            at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:695)
            at proguard.classfile.visitor.AllMethodVisitor.visitAnyClass(AllMethodVisitor.java:46)
            at proguard.classfile.visitor.ClassVisitor.visitProgramClass(ClassVisitor.java:40)
            at proguard.classfile.ProgramClass.accept(ProgramClass.java:544)
            at proguard.classfile.ClassPool.classesAccept(ClassPool.java:291)
            at proguard.Initializer.execute(Initializer.java:228)
            at proguard.pass.PassRunner.run(PassRunner.java:24)
            at proguard.ProGuard.initialize(ProGuard.java:328)
            at proguard.ProGuard.execute(ProGuard.java:130)
            at io.github.seggan.myxal.app.Main.doMain(Main.kt:126)
            at io.github.seggan.myxal.app.Main.main(Main.kt:140)
    
    opened by Steffan153 0
  • It might be nice to bundle the release with a minimal Java runtime through `jlink`

    It might be nice to bundle the release with a minimal Java runtime through `jlink`

    I haven't contributed anything to this project, and this is merely a suggestion.

    Jyxal requires Java 17, but Java 8 is the version you get when you google "java", and version 11 is provided as the default on some popular Linux distros including Ubuntu and Fedora. Java 8 still has extended support left until 2030 (https://www.oracle.com/java/technologies/java-se-support-roadmap.html), so it will take some time to have most systems with Java 17.

    Requiring the user to have multiple versions of Java installed on the same system might not be welcomed. One practical reason is PATH clashing, and one psychological reason is considering the oldest supported version stable and safe.

    Recent JDKs have jlink, with which the developer can create a minimal Java runtime by automatically tracking the necessary dependencies from the class files. With this minimal runtime bundled with Jyxal.jar, you can provide a standalone app or script that calls java -jar (from the minimal runtime) behind the scene for the end-user.

    enhancement 
    opened by xiver77 2
  • Elements To Implement

    Elements To Implement

    Check these off as you implement them. I offer a 50-150 one-time bounty for implementing at least 7.

    • [ ] ƈ
    • [x] ¬
    • [ ] ↔
    • [x] æ
    • [ ] ʁ
    • [ ] ɽ
    • [ ] ƈ
    • [ ] ∞
    • [ ] :
    • [ ] v
    • [ ] x
    • [ ] ↑
    • [ ] ↓
    • [ ] ∴
    • [ ] ∵
    • [ ] ∷
    • [ ] ¤
    • [ ] β
    • [ ] τ
    • [ ] ‹
    • [ ] ȧ
    • [ ] ċ
    • [ ] ḋ
    • [ ] ė
    • [ ] ḟ
    • [ ] ġ
    • [ ] ḣ
    • [ ] ḭ
    • [ ] ŀ
    • [ ] ṁ
    • [ ] ȯ
    • [ ] ṗ
    • [ ] ṙ
    • [ ] ṫ
    • [ ] ẇ
    • [ ] ẋ
    • [ ] ẏ
    • [ ] ż
    • [ ] ¶
    • [ ] ⁋
    • [ ] §
    • [ ] ε
    • [ ] ¡
    • [ ] ¦
    • [ ] ≈
    • [ ] Ȧ
    • [ ] Ḃ
    • [ ] Ċ
    • [ ] Ḋ
    • [ ] Ė
    • [ ] Ḟ
    • [ ] Ġ
    • [ ] Ḣ
    • [ ] İ
    • [ ] Ŀ
    • [ ] Ṁ
    • [ ] Ṅ
    • [ ] Ȯ
    • [ ] Ṗ
    • [ ] Ṡ
    • [ ] Ṫ
    • [ ] Ẇ
    • [ ] Ẋ
    • [ ] Ż
    • [ ] ⁰
    • [ ] ¹
    • [ ] ²
    • [ ] ∇
    • [ ] ⌈
    • [ ] ⌊
    • [ ] ¯
    • [ ] ±
    • [ ] □
    • [ ] ↳
    • [ ] ↲
    • [ ] ⋏
    • [ ] ⋎
    • [ ] ꘍
    • [ ] ꜝ
    • [ ] ℅
    • [ ] ≠
    • [ ] ⁼
    • [ ] ∪
    • [ ] ∩
    • [ ] ⊍
    • [x] £
    • [ ] ⇧
    • [ ] ⇩
    • [ ] Ǎ
    • [ ] ǎ
    • [ ] Ǐ
    • [ ] ǐ
    • [ ] Ǒ
    • [ ] ǒ
    • [ ] Ǔ
    • [ ] ǔ
    • [ ] ↵
    • [ ] ¼
    • [ ] ⅛
    • [ ] ¾
    • [ ] Π
    • [ ] „
    • [ ] ‟
    • [ ] ∆²
    • [ ] ∆c
    • [ ] ∆C
    • [ ] ∆s
    • [ ] ∆S
    • [ ] ∆t
    • [ ] ∆T
    • [ ] ∆q
    • [ ] ∆Q
    • [ ] ∆P
    • [ ] ∆ƈ
    • [ ] ∆i
    • [ ] ∆ė
    • [ ] ∆I
    • [ ] ∆Ė
    • [ ] ∆f
    • [ ] ∆±
    • [ ] ∆K
    • [ ] ∆e
    • [ ] ∆E
    • [ ] ∆L
    • [ ] ∆l
    • [ ] ∆τ
    • [ ] ∆d
    • [ ] ∆D
    • [ ] ∆R
    • [ ] ∆Ṗ
    • [ ] ∆ṗ
    • [ ] ∆p
    • [ ] ∆ṙ
    • [ ] ∆W
    • [ ] ∆Ŀ
    • [ ] ∆Z
    • [ ] ∆ċ
    • [ ] ∆o
    • [ ] ∆M
    • [ ] ∆ṁ
    • [ ] ∆ṫ
    • [ ] ∆Ċ
    • [ ] ∆¢
    • [ ] ∆›
    • [ ] ∆‹
    • [ ] øḂ
    • [ ] øḃ
    • [ ] øb
    • [ ] øB
    • [ ] øβ
    • [ ] øc
    • [ ] øC
    • [ ] øĊ
    • [ ] ød
    • [ ] øD
    • [ ] øḋ
    • [ ] øe
    • [ ] ø↲
    • [ ] ø↳
    • [ ] øM
    • [ ] øṁ
    • [ ] øṀ
    • [ ] øW
    • [ ] øP
    • [ ] øp
    • [ ] øṖ
    • [ ] øo
    • [ ] øV
    • [ ] øF
    • [ ] øṙ
    • [ ] øṘ
    • [ ] Þ*
    • [ ] Þo
    • [ ] Þc
    • [ ] Þx
    • [ ] Þ×
    • [ ] Þu
    • [ ] ÞẊ
    • [ ] ÞB
    • [ ] ÞU
    • [ ] Þf
    • [ ] Þǔ
    • [ ] Þi
    • [ ] Þḟ
    • [ ] Þm
    • [ ] Þ…
    • [ ] Þ<
    • [ ] ÞD
    • [ ] ÞS
    • [ ] ÞṪ
    • [ ] ÞṀ
    • [ ] Þ•
    • [ ] ÞḊ
    • [ ] Þ/
    • [ ] Þ↓
    • [ ] Þ↑
    • [ ] ÞZ
    • [ ] ÞF
    • [ ] ÞṄ
    • [ ] Þ!
    • [ ] Þ℅
    • [ ] ÞC
    • [ ] ÞR
    • [ ] Þṁ
    • [ ] ÞM
    • [ ] Þ∞
    • [ ] Þ∴
    • [ ] Þ∵
    • [ ] Þs
    • [ ] Þ¾
    • [ ] Þr
    • [ ] ÞR
    • [ ] Þẇ
    • [ ] Þg
    • [ ] ÞG
    • [ ] Þṡ
    • [ ] ÞK
    • [ ] Þİ
    • [ ] ÞN
    • [ ] ¨□
    • [ ] ¨^
    • [ ] ¨,
    • [ ] ¨…
    • [ ] ¨M
    • [ ] ¨>
    • [ ] ¨<
    • [ ] ¨ẇ
    • [ ] ¨*
    • [ ] k½
    • [ ] k₁
    • [ ] k+
    • [ ] k-
    • [ ] k≈
    • [ ] kṗ
    • [ ] k□
    • [x] &
    • [ ] v
    • [ ] ~
    • [ ] ₌
    • [ ] ₍
    • [ ] ƒ
    • [ ] ɖ
    • [x] ß
    • [ ] ¨=
    enhancement development 
    opened by Seggan 0
Releases(0.5.1)
Owner
A group of epic gamers who work on Vyxal
null
(cross-platform) Java Version Manager

jabba Java Version Manager inspired by nvm (Node.js). Written in Go. The goal is to provide unified pain-free experience of installing (and switching

Stanley Shyiko 2.5k Jan 9, 2023
Java lib for monitoring directories or individual files via java.nio.file.WatchService

ch.vorburger.fswatch Java lib for monitoring directories or individual files based on the java.nio.file.WatchService. Usage Get it from Maven Central

Michael Vorburger ⛑️ 21 Jan 7, 2022
Tencent Kona JDK11 is a no-cost, production-ready distribution of the Open Java Development Kit (OpenJDK), Long-Term Support(LTS) with quarterly updates. Tencent Kona JDK11 is certified as compatible with the Java SE standard.

Tencent Kona JDK11 Tencent Kona JDK11 is a no-cost, production-ready distribution of the Open Java Development Kit (OpenJDK), Long-Term Support(LTS) w

Tencent 268 Dec 16, 2022
This repository contains Java programs to become zero to hero in Java.

This repository contains Java programs to become zero to hero in Java. Data Structure programs topic wise are also present to learn data structure problem solving in Java. Programs related to each and every concep are present from easy to intermidiate level

Sahil Batra 15 Oct 9, 2022
An open-source Java library for Constraint Programming

Documentation, Support and Issues Contributing Download and installation Choco-solver is an open-source Java library for Constraint Programming. Curre

null 607 Jan 3, 2023
Java Constraint Programming solver

https://maven-badges.herokuapp.com/maven-central/org.jacop/jacop/badge.svg [] (https://maven-badges.herokuapp.com/maven-central/org.jacop/jacop/) JaCo

null 202 Dec 30, 2022
Java Constraint Solver to solve vehicle routing, employee rostering, task assignment, conference scheduling and other planning problems.

OptaPlanner www.optaplanner.org Looking for Quickstarts? OptaPlanner’s quickstarts have moved to optaplanner-quickstarts repository. Quick development

KIE (Drools, OptaPlanner and jBPM) 2.8k Jan 2, 2023
Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas

Arthas Arthas is a Java Diagnostic tool open sourced by Alibaba. Arthas allows developers to troubleshoot production issues for Java applications with

Alibaba 31.5k Jan 4, 2023
Java rate limiting library based on token/leaky-bucket algorithm.

Java rate-limiting library based on token-bucket algorithm. Advantages of Bucket4j Implemented on top of ideas of well known algorithm, which are by d

Vladimir Bukhtoyarov 1.7k Jan 8, 2023
Object-Oriented Java primitives, as an alternative to Google Guava and Apache Commons

Project architect: @victornoel ATTENTION: We're still in a very early alpha version, the API may and will change frequently. Please, use it at your ow

Yegor Bugayenko 691 Dec 27, 2022
Dex : The Data Explorer -- A data visualization tool written in Java/Groovy/JavaFX capable of powerful ETL and publishing web visualizations.

Dex Dex : The data explorer is a powerful tool for data science. It is written in Groovy and Java on top of JavaFX and offers the ability to: Read in

Patrick Martin 1.3k Jan 8, 2023
Google core libraries for Java

Guava: Google Core Libraries for Java Guava is a set of core Java libraries from Google that includes new collection types (such as multimap and multi

Google 46.5k Jan 1, 2023
Java regular expressions made easy.

JavaVerbalExpressions VerbalExpressions is a Java library that helps to construct difficult regular expressions. Getting Started Maven Dependency: <de

null 2.6k Dec 30, 2022
MinIO Client SDK for Java

MinIO Java SDK for Amazon S3 Compatible Cloud Storage MinIO Java SDK is Simple Storage Service (aka S3) client to perform bucket and object operations

High Performance, Kubernetes Native Object Storage 787 Jan 3, 2023
java port of Underscore.js

underscore-java Requirements Java 1.8 and later or Java 11. Installation Include the following in your pom.xml for Maven: <dependencies> <dependency

Valentyn Kolesnikov 411 Dec 6, 2022
Manage your Java environment

Master your Java Environment with jenv Website : http://www.jenv.be Maintainers : Gildas Cuisinier Future maintainer in discussion: Benjamin Berman As

jEnv 4.6k Dec 30, 2022
The shell for the Java Platform

______ .~ ~. |`````````, .'. ..'''' | | | |'''|''''' .''```. .'' |_________| |

CRaSH Repositories 916 Dec 30, 2022
Hashids algorithm v1.0.0 implementation in Java

Hashids.java A small Java class to generate YouTube-like hashes from one or many numbers. Ported from javascript hashids.js by Ivan Akimov What is it?

CELLA 944 Jan 5, 2023
a pug implementation written in Java (formerly known as jade)

Attention: jade4j is now pug4j In alignment with the javascript template engine we renamed jade4j to pug4j. You will find it under https://github.com/

neuland - Büro für Informatik 700 Oct 16, 2022