View on GitHub

Bitcsharp

BitC# High performance LLVM compiler

Download this project as a .zip file Download this project as a tar.gz file

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#

Comparison to Rust/D

Comparison to C/C++

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

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.