README
¶
The Jule Programming Language
This repository is the main source tree of Jule.
It contains the reference compiler, API and standard library.
Motivation
Warning
JuleC is still under pre development. Therefore, design changes and the like may occur in the language.
Some commits may not be fully honored due to some compiler/API errors.
Please report it with the Jule Issue Tracker if you come across something like this.
Our motivation is to create a safe and fast programming language option that focused on system programming. A safer, more modern and readable option than C. However, we do not want to stray too far from C, C is a language that excels in systems programming. Since Jule is transpiled to C++ code, it can have very high interoperability with C++. Due to its interoperability with C++, it also offers a great deal of support for C.
Jule designed for maintainable and reliable software development. Guarantees memory safety and committed not contain undefined behavior, has a reference compiler with obsessions that encourage developers to build safe software. It offers fully integrated Jule-C++ development with API and interoperability.
Design Principles
Jule is develops within the framework of certain design principles. These principles often follow the motivation for the emergence of Jule. Our aim is to present a design and implementation that meets these principles in the most balanced way.
Our Design Principles
- Simplicity and maintainability
- Fast and scalable development
- Performance-critical software
- Memory safety
- Immutability by default
- Efficiency and performance
- High C++ interoperability
What is JuleC?
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 represent 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.Memory Safety and Management
Memory safety and memory management is a major challenge in C , C++ and 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 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.
Note
Jule also has different memory management methods.
For example, thestd::memory::cstandard library provides C-like memory management.
C++ Interoperability
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 api directory. This API makes it possible and easy to write C++ code that can be fully integrated into Jule.
Future Changes
JuleC is in early development and currently it can only be built from source. However, despite being in the early development stage, many algorithms (see 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 having 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 one 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 to the website, documentations or something else, please use the website repository.
Compiler and C++ Standard Support
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 API 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 make the effort to fix it.
See compiling documentations for supported compilers and C++ standards.
Platform Support
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 support documentations.Building Project
Note
Website documentation for install from source.
When you enter the directory where the source code is located, you can find some compilation scripts for compiling of JuleC.
These scripts are written to run from the src 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
In main directory.
Windows (PowerShell)
go build -o julec.exe -v src\cmd\julec\main.go
Linux (Bash)
go build -o julec -v src/cmd/julec/main.go
Run the above command in your terminal, in the Jule project directory.
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.
To discussions and ask questions, please use discussions.
Regarding security, please refer to the security policy.
Code of Conduct
License
The JuleC and standard library is distributed under the terms of the BSD 3-Clause license.
See License Details
Documentation
¶
There is no documentation for this package.