BitC# High performance LLVM compiler
Key features
- Very low global pause allocation 10-30 ms
- Allocation is tunable between high performance ( within 3% of malloc) and low global pauses
- Sub typing we retain support for inheritance to port C#/Java and C++ code. Eventualy we will merge with Bitc or if that does not eventuate adopt a sucinct Trait based type system.
- SIMD expression as part of the language , not platform specific intrinsics.. Express problems in a way that will allow the compiler to use parralel SIMD for up to 10* performance.
- Support for embedded arrays in objects for native interop.
- Whole object life pinning for easy interop
- Call C libs or use BitC# as a lib for existing C / C++ /C#
- Slices , UTF8 strings and special format provide very printing strings to an IO buffer
- Fast IO with no copy needed to and from managed space.
- Very low safety impact no Header , no CardTable , optional bounds checking .
Comparison to C#
- Can work with native objects
- Superior support for value types ( no auto boxing and arrays embedded in objects)
- Call native and Be called by native
- Static compile to binary so can be deployed without CLR.
- Low pause GC
- No managed costs
- Easy to write SIMD
Comparison to Rust/D
- Simple to program
- Easy to write high performance SIMD
- Higher level style.
Comparison to C/C++
- Fast to program
- Safe
- Quicker to write high performing programs
Mile stones Use Mono compiler & parser .( No Generics , prob C#1 ) ( Cancelled using Coco/R)
M1 Update and build compiler ( update code from LLVM# to generate LLVM IR) , 1 month ( 2-3 months later to mature it)
M1.1 Update to LLVM 3.4 ( 1 week)
M1.2 Rewrite Tests , add test runner and get mono tests ( 2 weeks)
M2 Add ref counting for allocations ( just a malloc wrap at this point) 1/2 - 1 week + 2 week for tests
M2.1 More testing
M3 Remove unsafe from fixed blocks by having a safe way to address it (slices or gen array code) and add compile failure on auto boxing if type is marked nobox.. This is very tricky in C#. 2 weeks + slices ?
M4 Upgrade GC to add no header on Nursery objects , block allocated nursery ( local thread allocator) , with a global pause and parralel mark/ sweep . Small global pauses is obviously small nursery.2 weeks.
M5 Add better allocation to main Nursery . Extensive Benchmarks . 2 weeks
M6 Add Slices and strings standard lib. 2 weeks
M7 Add VecImp , 2 months
M8 Add Cinterop ( which users can use to host as winrt objects) . 1 week
M9 Deploy LLVM execution engine libs as default , native as option. No Bounds checking on Single threaded release code.
M10 Remove cycles , 1 month
Longer term goals
- Traits and fast coding.
- Region system to move code onto the stack automatically, resulting in lower heap usage and higher performance.
you can check out the new branch:
$ cd your_repo_root/repo_name
$ git fetch origin
$ git checkout gh-pages
If you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.
Designer Templates
We've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.
Rather Drive Stick?
If you prefer to not use the automatic generator, push a branch named gh-pages
to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.
Authors and Contributors
You can @mention a GitHub username to generate a link to their profile. The resulting <a>
element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.
Support or Contact
Having trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.