All Projects → rhysd → Dachs

rhysd / Dachs

Licence: other
Dachs; A Doggy 🐶 Programming Language

Programming Languages

C++
36643 projects - #6 most used programming language
go
31211 projects - #10 most used programming language
Yacc
648 projects
CMake
9771 projects
ruby
36898 projects - #4 most used programming language
Makefile
30231 projects
shell
77523 projects

Projects that are alternatives of or similar to Dachs

codebrowser
Woboq CodeBrowser
Stars: ✭ 985 (+1101.22%)
Mutual labels:  llvm
expressi
Expression-oriented toy programming language written in Rust
Stars: ✭ 17 (-79.27%)
Mutual labels:  llvm
linux
Linux kernel source tree
Stars: ✭ 234 (+185.37%)
Mutual labels:  llvm
vicis
Manipulate LLVM-IR in Pure Rust
Stars: ✭ 194 (+136.59%)
Mutual labels:  llvm
SCAF
A Speculation-Aware Collaborative Dependence Analysis Framework
Stars: ✭ 25 (-69.51%)
Mutual labels:  llvm
suicide
LLVM pass that detects one undefined behavior, and emits code to delete your hard drive
Stars: ✭ 33 (-59.76%)
Mutual labels:  llvm
Chigraph
A visual systems language for beginners compiled using LLVM
Stars: ✭ 247 (+201.22%)
Mutual labels:  llvm
nballerina-cpp
Ballerina compiler backend that generates platform-specific executables.
Stars: ✭ 16 (-80.49%)
Mutual labels:  llvm
Lesma
The Lesma Programming Language
Stars: ✭ 14 (-82.93%)
Mutual labels:  llvm
neo-c
Yet another modern compiler. It is also C compiler. Using LLVM wih boehmGC
Stars: ✭ 72 (-12.2%)
Mutual labels:  llvm
Kernel-Compile-Script
This is a collection of scripts aimed at streamlining the process of kernel compilation for improved efficiency and effectiveness.
Stars: ✭ 20 (-75.61%)
Mutual labels:  llvm
EffectiveSan
Runtime type and bounds-error checking for C/C++
Stars: ✭ 95 (+15.85%)
Mutual labels:  llvm
FastLua
Lua trace JIT compiler using LLVM-C
Stars: ✭ 22 (-73.17%)
Mutual labels:  llvm
sbt-instrumentation
Configurable instrumentation of LLVM bitcode
Stars: ✭ 31 (-62.2%)
Mutual labels:  llvm
clangbuilder
Building Clang ♡ Utility and Environment
Stars: ✭ 101 (+23.17%)
Mutual labels:  llvm
Dr checker
DR.CHECKER : A Soundy Vulnerability Detection Tool for Linux Kernel Drivers
Stars: ✭ 251 (+206.1%)
Mutual labels:  llvm
NatsuLang
No description or website provided.
Stars: ✭ 96 (+17.07%)
Mutual labels:  llvm
qbicc
Experimental static compiler for Java programs.
Stars: ✭ 118 (+43.9%)
Mutual labels:  llvm
nocc
A LLVM based self-hosting C compiler
Stars: ✭ 22 (-73.17%)
Mutual labels:  llvm
TON-Compiler
Clang compiler for Free TON Virtual Machine
Stars: ✭ 56 (-31.71%)
Mutual labels:  llvm

Dachs Programming Language

Now new version is being developed in 'next' directory. It will replace current C++ implementation.

Dachs is a general-purpose programming language designed to be enjoyable, statically-typed and dog-friendly. Dachs is intended to be used for efficient applications and tools development, not for system programming.

Goals 🐕

  • Light to write (inspired by Ruby)
  • Strongly and statically typed
  • Native code efficiency
  • OOP
  • Immutability-aware
  • Familiar with functional features
  • Dog-friendly
# If 'var' is specified, the argument is copied and passed by value
# then mutable.  Otherwise, the argument is passed by reference then
# immutable. Variable definition has the same rule as this.
# Type of arguments and returned value are deduced automatically.

# If you want to specify the type of argument, you can use ':'.
# e.g.
#   func step_to(var first : float, last : float, block) : ()

func step_to(var first, last, block)
    for first <= last
        block(first)
        first += 1
    end
end

# UFCS is implemented.
# '1.step_to n' is equivalent to 'step_to(1, n)'

# Dachs has a block inspired from Ruby.
# do-end block is passed to the last argument of callee as lambda object.
# Here, 'block' variable is captured into do-end block.

func fizzbuzz(n, block)
    1.step_to n do |i|
        case
        when i % 15 == 0
            block("fizzbuzz")
        when i %  3 == 0
            block("fizz")
        when i %  5 == 0
            block("buzz")
        else
            block(i)
        end
    end
end

func main
    fizzbuzz 100 do |i|
        println(i)
    end
end

# Array and tuple are available as container.
# (dictionary will come.)

Progress Report

  • Basic literals
  • Basic expressions
  • Basic statements
  • Basic strong type check
  • Functions
  • Operator functions
  • Overload resolution
  • Simple return type and variable type deduction
  • Type inference
  • UFCS
  • Class
  • Lambda
  • Block
  • Variadic arguments
  • Module
  • GC
  • Tests
  • CMakeLists.txt
  • Travis-CI
  • Option parser
  • Allocator customization
  • Introduce OvenToBoost

This software is disributed under The MIT License if not specified in a source file.

Copyright (c) 2014-2015 rhysd

This software uses Boost C++ Libraries, which is licensed by The Boost License.

Boost Software License - Version 1.0 - August 17th, 2003

This software uses LLVM, which is licensed by University of Illinois/NCSA Open Source License.

Copyright (c) 2003-2014 University of Illinois at Urbana-Champaign

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].