Hello,<br><br>I have been working on a proposal for Google's Summer of Code with LLVM. I have pasted the proposal below, and I would welcome any feedback before I submit it. I am very excited about the prospect of working on this with LLVM!
<br><br>-Chandler<br><br>----<br># Proposal for Google Summer of Code Project<br><br>## Prototype INC Compiler<br><br>### Abstract <br><br>This project will develop a prototype front end for a new language, INC (INC's
<br>Not C: <a href="http://chandlerc.net/INC/">http://chandlerc.net/INC/</a>), on top of the world-class Low-Level Virtual <br>Machine (LLVM: <a href="http://llvm.org/">http://llvm.org/</a>) compiler infrastructure. It will bring a new
<br>and valuable language to LLVM and help solidify the front end toolkit into a<br>more robust solution for compiler development. Additionally, it will ground <br>the language's design in a concrete implementation and provide a starting point
<br> for a polished and fully functional standard implementation of the it.<br><br>The INC language is a new object-oriented and low-level system programming <br>language. It has influences from the structural and object-oriented
<br>programming. The language provides a modern and robust platform for developing <br>performance-oriented and system-level applications and libraries. Overarching <br>goals of the language include near-orthogonality, simplicity, clarity of
<br>syntax, and avoiding implicit behaviors. My Master's thesis at Wake Forest <br>University includes the development and specification of INC.<br><br>### Deliverables <br><br>* A C++ parsing library for INC <br>* A compiler combining the parsing library with LLVM for code generation
<br>* Accompanying documentation for the parsing library, compiler <br> construction, and compiler use <br>* A draft specification of the language based directly on my thesis <br><br>### The INC Language <br><br>INC is most similar to C++ and derives much of its inspiration from the good,
<br>the bad, and the ugly aspects of that language. INC has a similar <br>object-oriented structure and procedural syntax. It begins to differentiate <br>itself by offering significantly improved code readability and maintainability
<br>to the code. The syntax is simpler and more concise than C++, avoiding <br>subtleties that can be easily confused. This also reduces the learning curve of<br> INC, making it less prone to programmer errors.<br><br>The language also expands on the concept of operator overloading. It does away
<br>with implicit operator precedence allowing operator definitions to define <br>completely new operators. It focuses on a safer multiple inheritance system <br>rather than template-driven instantiation to unify common code. Lastly, it
<br>re-thinks and simplifies memory management, providing a more integrated view of<br> memory, pointers, and arrays. All of these features help INC address issues <br>with real-time applications, numerical computation, and high-performance
<br>computing, as well as general purpose and system programming. Examples and more<br> detailed explanations of these features are available on the INC website.<br><br>### Existing Research and Work <br><br>I have done extensive research on this language, first as an undergraduate at
<br>Wake Forest University, and currently as a Master's student there. The project <br>grew into my thesis under the direction of Dr. Todd Torgersen, and I will have <br>completed an initial draft including a full specification of the language by
<br>the end of the academic year. I have been consulting heavily with Reid Spencer,<br> the lead developer of LLVM's front end toolkit, regarding my thesis work since <br>beginning it during the summer of 2006. He has provided insight and guidance in
<br>ensuring the language will be a good fit for LLVM as a compiling <br>infrastructure. I began helping with LLVM as well in December of 2006 to <br>familiarize myself with the project's structure and organization.<br>
<br>I am also involved with several other open source projects. I am the primary <br>developer of several upcoming open projects for Retina Software, a<br>cross-platform game technology company I co-founded. I am working with a
<br>student group in a class to design an open source software construction tool <br>called RCons. I work actively with Gentoo Linux, eINIT, and Retrospectiva <br>providing feedback, testing, filing and fixing bugs. I have helped with
<br>dvd::rip, Trac, and Bitten in the past in similar roles.<br><br>### Proposed Project for the Summer of 2007 <br><br>I propose to work with the LLVM project to craft a front end to parse and <br>compile INC, a new language I have been developing for the past 3 years. LLVM's
<br> will provide much of the semantic translation for the language through its <br>Abstract Syntax Tree (AST). It also has mechanisms to translate the AST into an<br> intermediate representation which can be transformed, optimized, and lowered to
<br> target-specific assembler instructions. Together these form a full featured <br>compiler infrastructure that will make the implementation of a front end a<br>reasonable and effective project for a summer.<br><br>The front end will consist of a general parsing library for the language. This
<br>library will be well documented and usable in other projects such as a syntax <br>directed editor or code validation tools. A compiling tool will then utilize <br>this parsing system to generate LLVM's AST structures. This tool will be
<br>documented both in its use and its integration into LLVM's AST and the parsing <br>library. Finally, a draft specification, as implemented in the prototype <br>compiler, will be released as part of the deliverables.
<br><br>This project's scope is limited to a prototype compiler. It is not intended to <br>be feature complete or production ready. It must provide sufficient <br>functionality to compile non-trivial programs and demonstrate the language's
<br>base feasibility. It must also form a good starting point for further <br>implementation work.<br><br>### Schedule for Project <br><br>The first six weeks of the project will be focused on framework development, <br>
achieving minimal functionality, and testing. The classic ``Hello World'' <br>program will be the target for this phase, providing a baseline of <br>functionality, and a test for integration with all components. This will also
<br>form a clear metric for mid-term evaluation of the project.<br><br>Weeks 1 and 2:<br> Establish a parsing framework in the library, basic file loading, the<br> most basic syntax constructs, and XML parse tree output for testing.
<br><br>Week 3:<br> Integrate syntax constructs for ``Hello World'' program, and verify<br> parsing through the tree output. <br><br>Weeks 4, 5, and 6:<br> Establish compilation tool using parsing library, and connect syntax
<br> constructs used in ``Hello World'' to semantic counterparts in the LLVM<br> AST, including resolving the system IO semantics and implementation. <br><br>The second six weeks will focus on component-wise expansion of the framework
<br>to support the desired prototype features. Each aspect will be tested as it is <br>added to the relevant framework to ensure a working final product. It will <br>culminate in the working prototype compiler and provide a clear benchmark for
<br>overall success of the project. <br><br>Weeks 7 and 8:<br> Extend parsing to support prototype subset of syntax, and verify every<br> construct using XML parse tree output. <br><br>Weeks 9, 10, 11, and 12:<br>
Move through each syntax construct implementing it semantically<br> through LLVM, and verify generated code through a test suite for each<br> construct.<br>