Key Features
- Simplicity and maintainability
- Fast and scalable development
- Performance-critical software
- Memory safety
- Immutability by default
- As efficient and performance as C++
- High C++ interoperability
Motivation
Jule is a statically typed compiled programming language designed for system development, building maintainable and reliable software. The purpose of Jule is to keep functionality high while maintaining a simple form and readability. It guarantees memory safety and does not contain undefined behavior. It also has a reference compiler with obsessions that encourage developers to build safe software.
The memory safety and the memory management is a major challenge in the C and C++ or similar programming languages. Jule has a reference-based memory management design to solve these issues. Jule guarantees memory safety and uses reference counting for memory management. An account-allocation is automatically released as soon as the reference count reaches zero. Please read the Memory Safety and Managementmemory management documentations for more information about reference-counting approach of Jule.
Variables are immutable by default, and each variable is encouraged to be initialized at declaration. Safe Jule performs bounds checking and nil (aka null) checking. It is committed to no undefined behavior. Unsafe behaviors are encouraged to be done deliberately with unsafe scopes. Please read the Unsafe Jule documentations for more information about of Unsafe Jule.
Jule is designed to be interoperable with C++. A C++ header file dependency can be added to the Jule code and its functions can be linked. It's pretty easy to write C++ code that is compatible with the Jule code compiled by the compiler. JuleC keeps all the C++ code it uses for Jule in its C++ Interoperabilityapi directory. With the help of this API, it is very easy to write C++ codes that can be fully integrated into Jule.
JuleC is the name of the reference compiler for the Jule programming language. It is the original compiler of the Jule programming language. The features that JuleC has is a representation of the official and must-have features of the Jule programming language. This is sort of a standard for the Jule programming language and represents the minimum competency that unofficial compilers should have. What is JuleC?
JuleC is in early development and currently iy can only be built from source. However, despite being in the early development stage, many algorithms ( Future Changessee the standard library) can be successfully implemented. It is planned to rewrite the compiler with Jule after reference compiler and standard library reaches sufficient maturity. JuleC has or is very close to many of the things Jule was intended to have, such as memory safety, properties, structures with methods and generics.
A release is not expected until JuleC itself is developed with the Jule programming language. The syntax and language design of the Jule programming language has emerged and is not expected to undergo major changes. When the reference compiler is rewritten with Jule, it is thought that AST, Lexer and some packages will be included in the standard library. This will be a change that will cause the official compiler's project structure to be rebuilt. The reference compiler will probably use the standard library a lot. This will also allow developers to quickly develop tools for the language by leveraging Jule's standard library.
There is an idea to include a package manager in JuleC as well, although it doesn't have it yet. Jule's modern understanding of language and convenience suggests that there should be a package manager that comes with the compiler. This package manager will provide management of non-standard library packages developed and published by the community. Jule's standard library only gets updates with compiler releases.
The language and standard library will continue to evolve and change in the future but JuleC will guarantee stability since its first stable release. Some packages of the standard library (std::math, std::conv, std::unicode::utf8 or etc.) are almost complete and are not expected to undergo major changes.
Documentations
All documentation about Jule and JuleC is on the website.
See Documentations
To contribute website, documentations or something else, please use the website repository.
JuleC officially supports some C++ compilers. When you try to compile with these compilers, it promises that code can be compiled in the officially supported C++ standard. JuleC is committed to creating code according to the most ideal C++ standard it has adopted. Commits that the generated code can be compiled by C++ compilers that fully support this standard. Likewise, this commit is also available for the Compiler and C++ Standard SupportAPI of JuleC. Jule's ideal C++ standard is determined by the most ideal C++ standard, fully supported by officially supported C++ compilers.
If you are getting a compiler error even though you are using the officially supported compiler and standard, please let us know with the Jule Issue Tracker. If you are trying to use a standard or compiler that is not officially supported, you can still contact us to find out about the problem. But keep in mind that since it's out of official support, it's likely that the maintainers won't take the effort to fix it.
See Compiling Documentations for supported compilers and C++ standards.
Jule supports multiple platforms. It supports development on i386, amd64 architectures on Windows, Linux and Darwin platforms. JuleC undertakes that the code and standard library it produces will be compatible with all these platforms. All supported platforms by JuleC are documented in the Platform SupportPlatform Support documentations.
Building Project
Website documentation for install from source.
There are scripts prepared for compiling of JuleC.
These scripts are written to run from the home directory.
build
scripts used for compile.
brun
scripts used for compile and execute if compiling is successful.
JuleC aims to have a single main build file.
JuleC is in development with the Go programming language.
Building with Go Compiler
Windows - PowerShell
go build -o julec.exe -v cmd/julec/main.go
Linux - Bash
go build -o julec -v cmd/julec/main.go
Run the above command in your terminal, in the Jule project directory.
Project Build State
Operating System | State |
Windows | |
Ubuntu | |
Darwin |
Contributing
Thanks for you want contributing to Jule!
Every contribution, big or small, to Jule is greatly appreciated.
The Jule project use issues for only bug reports and proposals.
To contribute, please read the contribution guidelines from here.
To discussions and questions, please use discussions.
Code of Conduct
License
The JuleC and standard library is distributed under the terms of the BSD 3-Clause license.
See License Details