Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kitlang/kit
Kit: a magical, high performance programming language, designed for game development.
https://github.com/kitlang/kit
Last synced: 10 days ago
JSON representation
Kit: a magical, high performance programming language, designed for game development.
- Host: GitHub
- URL: https://github.com/kitlang/kit
- Owner: kitlang
- License: other
- Created: 2018-08-03T22:22:58.000Z (over 6 years ago)
- Default Branch: dev
- Last Pushed: 2021-08-14T01:21:10.000Z (about 3 years ago)
- Last Synced: 2024-10-01T13:02:51.526Z (about 1 month ago)
- Language: Haskell
- Homepage: https://www.kitlang.org
- Size: 1.68 MB
- Stars: 1,018
- Watchers: 43
- Forks: 29
- Open Issues: 19
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE-RUNTIME.md
Awesome Lists containing this project
- AwesomeCppGameDev - kit - alpha! (Scripting)
README
[![Build Status](https://img.shields.io/travis/kitlang/kit/master.svg?style=flat)](https://travis-ci.org/kitlang/kit)
[![License: LGPL v3](https://img.shields.io/badge/license-LGPL%20v3-202020.svg)](https://www.gnu.org/licenses/lgpl-3.0)
[![Discord Chat](https://img.shields.io/discord/531195968129990657.svg)](https://discord.gg/3va8Us9)
[![roadmap on_trello](https://img.shields.io/badge/roadmap-on%20trello-0079bf.svg)](https://trello.com/b/Bn9H0fzk/kit)
[![Website URL: https://www.kitlang.org](https://img.shields.io/badge/web-kitlang.org-3fa5bf.svg)](https://www.kitlang.org)![Kit logo](https://raw.githubusercontent.com/kitlang/kit/master/assets/logo-128.png)
```ascii
, ,
_,-=._ /|_/|
`-.} `=._,.-=-._., @ @._,
`._ _,-. ) _,.-'
` G.Q-^^u`u'oooo oooo o8o ,
`888 .8P' `V' ,o8
888 d8' oooo .o888oo
88888[ `888 888
888`88b. 888 888
888 `88b. 888 888 ,
o888o o888o o888o '888'
```[**Kit**](https://www.kitlang.org) is a programming language designed for creating concise, high performance cross-platform applications. Kit compiles to C, so it's highly portable; it can be used in addition to or as an alternative to C, and was designed with game development in mind.
Why you should use Kit in place of:
| C/C++ | a higher level language |
| --- | --- |
| Modern language features: type inference, algebraic data types, pattern matching, explicit function inlining, automatic pointer dereferencing, generics, implicits. | Full control over performance: pointers, manual memory management, no GC (unless you introduce it yourself, which is easy!) |
| A more expressive type system, including traits for polymorphism, and abstract types, which provide custom compile-time behavioral and type checking semantics to existing types with no runtime cost. | Metaprogramming via a typed term rewriting system; use rules to transform arbitrary expressions at compile time based on their type information. Create your own interface or DSL. |
| A sane, easy to use build system. Kit features modules, imports, and standard package structure, plus a simple but powerful build tool: manage your project via a simple YAML configuration file and `kit build`, `kit test`, or `kit run`. (coming soon...) | Take advantage of existing C libraries without any wrappers; just include the header and directly use types/functions/variables. |```kit
function main() {
var s: CString = "Hello from Kit!";
printf("%s\n", s);
}
```**[See more code examples here](https://www.kitlang.org/examples.html)**
*Kit is pre-alpha and not all features are fully implemented; see the [roadmap on Trello](https://trello.com/b/Bn9H0fzk/kit).*
License
-------The Kit compiler is licensed under the GNU Lesser General Public License; see the accompanying [LICENSE.md](https://github.com/kitlang/kit/blob/master/LICENSE.md) file. This applies to modifications to the compiler source itself; any code you write and compile with Kit is yours to license however you choose.
The Kit standard library (.kit files contained in this repo) is released under the [MIT license](https://github.com/kitlang/kit/blob/master/LICENSE-RUNTIME.md).
Design goals and philosophy
---------------------------- Magic and abstracting away complexity are good! Developers should write the most concise and declarative version of their code, and use syntax transformations to convert it into what a performance-conscious developer would've written by hand.
- Expose the necessary low-level details to write high performance code, and make it easy to abstract them away without entirely giving up control.
- Kit provides more compile-time safety than C, but never chooses safety at the expense of ergonomics.
Building from source
--------------------The Kit compiler, `kitc`, is written in Haskell. Building the compiler requires GHC; the easiest path is to install [Stack](https://docs.haskellstack.org/en/stable/README/) and run:
stack build
This will install all other dependencies locally, including a local GHC binary, and build the compiler.
To run the compiler unit tests:
stack test
To install:
stack install
This will copy the `kitc` binary to Stack's binary install directory (~/.local/bin on Linux); make sure this directory is part of your executable paths.
You'll also need to set two environment variables:
- KIT_STD_PATH, pointing to the `std` directory in the repo
- KIT_TOOLCHAIN_PATH, pointing to the `toolchains` directory in the repo### Windows setup
- Kit is currently known to work with mingw64; anything else is unsupported at this time.
Install from package
--------------------### Windows
Kit provides a Scoop package. Follow the instructions at [scoop.sh](https://scoop.sh/) to install scoop, then run `scoop install 'https://raw.githubusercontent.com/kitlang/kit/dev/.packages/scoop/kitlang-prerelease.json'`
### macOS
* Download one of the macOS packages from https://bintray.com/kitlang/kitlang-macos/kitlang/0.1.0#
* Install the package (NOTE: the installer will complain about 'unidentified developer', have to bypass in System Preferences/Security & Privacy.)
### Debian/Ubuntu
* Setup Bintray's APT key:
(Debian might need to install dirmngr first - `sudo apt install dirmngr`, and the HTTPS transport for apt - `sudo apt install apt-transport-https`)
```sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 379CE192D401AB61 ```
* Using the command line, add the following to your /etc/apt/sources.list system config file:
For prereleases:
```echo "deb https://dl.bintray.com/kitlang/kitlang-prerelease-ubuntu bionic universe" | sudo tee -a /etc/apt/sources.list.d/kitlang-prerelease.list```
For stable releases:
```echo "deb https://dl.bintray.com/kitlang/kitlang-stable-ubuntu bionic universe" | sudo tee -a /etc/apt/sources.list.d/kitlang-stable.list```
Or, add the repository URLs using the "Software Sources" admin UI:
```deb https://dl.bintray.com/kitlang/kitlang-prerelease bionic universe```
* Update apt and install:
```sudo apt update```
```sudo apt install kitlang```
### RedHat/CentOS
* Run the following to get a generated .repo file:
For prereleases:
```wget https://bintray.com/kitlang/kitlang-prerelease-redhat/rpm -O bintray-kitlang-prerelease-redhat.repo```
For stable releases:
```wget https://bintray.com/kitlang/kitlang-stable-redhat/rpm -O bintray-kitlang-stable-redhat.repo```
\- or -
* Copy this text into a 'bintray-kitlang-prerelease-redhat.repo' file on your Linux machine:
```
#bintraybintray-kitplummer-kitlang-prerelease-redhat - packages by kitplummer from Bintray
[bintraybintray-kitplummer-kitlang-prerelease-redhat]
name=bintray-kitplummer-kitlang-prerelease-redhat
baseurl=https://dl.bintray.com/kitlang/kitlang-prerelease-redhat
gpgcheck=0
repo_gpgcheck=0
enabled=1
```* Then, move the config
```sudo mv bintray-kitlang-rpm.repo /etc/yum.repos.d/```
* Update yum with:
```sudo yum update```
* Install with yum:
```sudo yum install kitlang```
Hello world
-----------After building/installing `kitc`:
- Create a a new file, "helloworld.kit", and copy the following into it:
```kit
function main() {
printf("%s\n", "Hello from Kit!");
}
```- Run `kitc helloworld.kit --run` to compile and run your program
Copyright
---------Copyright (C) 2018 Ben Morris. (See the [LICENSE](https://github.com/kitlang/kit/blob/master/LICENSE.md).)