All Projects → Qix- → Arua Meta

Qix- / Arua Meta

Standards, RFCs and discussion of the Arua language

Labels

Projects that are alternatives of or similar to Arua Meta

Minibufexpl.vim
Elegant buffer explorer - takes very little screen space
Stars: ✭ 991 (+2102.22%)
Mutual labels:  viml
Minimum Awesome
A Vim setup that will get you into Vim and make it so that you don't want to pull your hair out.
Stars: ✭ 40 (-11.11%)
Mutual labels:  viml
Vim Textobj Lastpat
Vim plugin: Text objects for the last searched pattern
Stars: ✭ 42 (-6.67%)
Mutual labels:  viml
Csapprox
Make gvim-only colorschemes work transparently in terminal vim
Stars: ✭ 38 (-15.56%)
Mutual labels:  viml
Slack Memo Vim
Simple memo manager with Vim using Slack.
Stars: ✭ 40 (-11.11%)
Mutual labels:  viml
Change Inside Surroundings.vim
vim plugin to change the contents of the innermost 'surrounding'
Stars: ✭ 41 (-8.89%)
Mutual labels:  viml
Unite Workflow
unite.vim extentions for convenience similar to alfred-workflow
Stars: ✭ 37 (-17.78%)
Mutual labels:  viml
Vimrc1234567
Personalized vimrc with C++, Markdown, and text editing at its core.
Stars: ✭ 44 (-2.22%)
Mutual labels:  viml
Php Foldexpr.vim
Vim folding for PHP with foldexpr
Stars: ✭ 40 (-11.11%)
Mutual labels:  viml
Vimenv
Configure Vim environment
Stars: ✭ 42 (-6.67%)
Mutual labels:  viml
Vim Hardy
Arduino IDE intregation for vim.
Stars: ✭ 39 (-13.33%)
Mutual labels:  viml
Env
Stars: ✭ 39 (-13.33%)
Mutual labels:  viml
Vim Hexedit
Hexedit is a plug-in under VIM, which is used to strengthen the hex editing ability of VIM.
Stars: ✭ 42 (-6.67%)
Mutual labels:  viml
Cobalt2 Vim Theme
Vim port of cobalt2 sublime theme
Stars: ✭ 38 (-15.56%)
Mutual labels:  viml
One Dark.vim
A vim version of Atom's gorgeous one-dark color scheme
Stars: ✭ 43 (-4.44%)
Mutual labels:  viml
Vim Easytags
Automated tag file generation and syntax highlighting of tags in Vim
Stars: ✭ 990 (+2100%)
Mutual labels:  viml
Vim Colors duotones
deprecated - please use Base2Tone-vim
Stars: ✭ 41 (-8.89%)
Mutual labels:  viml
Vim Grepper
👾 Helps you win at grep.
Stars: ✭ 1,030 (+2188.89%)
Mutual labels:  viml
Vimrc
💺 Options for my preferred text editor.
Stars: ✭ 43 (-4.44%)
Mutual labels:  viml
Vimstuff
Various bits and pieces that work with Vim
Stars: ✭ 42 (-6.67%)
Mutual labels:  viml

logo


Arua-Lang Proposal

This is the Arua Language proposal. This readme answers some meta-questions (e.g. why another language, etc.) and provides a table of contents to the rest of the proposal's contents.

Answers

What is Arua's core philosophy?

Arua code shows the intent of the program instead of writing code that accommodates the system itself.

The compiler takes care of what that code actually transforms into given the configuration and target.

For example, in C, it's commonly accepted to use the int type for booleans. This is due to a mix of simplicity and optimizations via alignment.

However, in Arua, i1 (an integer with a 1-bit width) is used. That is because its intent is not to allow any other value than 1 or 0.

The compiler can then make the assesment on how that type is optimized. If the target system doesn't benefit from 32-bit alignment, a single byte will be used in order to conserve memory. However, if the compiler is configured to favor performance over memory usage/size, and a 32-bit value is faster than an 8-bit value due to alignment, the compiler will decide to use a 32-bit value instead.

The target's optimizations should never influence the intent of the code.

Why yet another language?™

The dogmatic answers include:

  • Language design is fun
  • Compiler design is fun

The pragmatic answers include:

  • C is great; let's improve on some of those ideas
  • Rust has good design, but sub-par execution (purely opinion)
  • Readability is something often overlooked
  • Many languages assume a lot about the underlying system; let's not do that

What kind of language is Arua?

Arua is a systems programming language. It is meant to be compiled down to machine code.

What architectures/platforms will Arua aim to support?

Arua will aim to support LLVM as its backend; any LLVM backend is thus supported. This means x86, ARM, and a slew of other target platforms.

Does Arua aim to replace XYZ language?

No.

Is Arua better than XYZ language?

That is a completely subjective question. Arua aims to be Arua and solve many common problems of modern computing.

Is Arua opinionated?

Yes, sort of. Every language is opinionated, though. For example:

  • Arua is white-space scoped (no braces)
  • Concurrent modification of memory between threads is unsupported (by choice)
  • References, references, references

In other ways, Arua is very anti-opinion:

  • Numeric widths have arbitrary widths - always
  • Every memory model is supported - not just stack and heap
  • Aims to work with existing ABIs (no FFI nonsense to deal with)

Tl;dr feature list?

Sure:

  • Traits + Composition = <3
  • Immutable until specified otherwise
  • Arbitrary integer widths
  • Java-like dependency resolution (Java gets it right™)
  • Explicit switch fallthrough
  • Bounds-checked arrays (that are still 100% compatible with the C family ABI)
  • No macros. Why is this a feature? See below.
  • Language conveys intent; details convey specifics (i.e. compiler options for portions of code). This means you can apply compiler options globally (via the command line), or for blocks of code (not just functions!)
  • Fully compatible with C/C++ ABI
  • Designed with embedded/operating systems in mind
  • Compiler planned to provide comprehensive errors/warnings/notices, including how the compiler came to a conclusion about some code - allowing you to tweak verbosity however you please.
  • AST optimizer planned to allow for complex pattern selection, and will be completely configurable for just how extreme you want size/speed considerations to be (e.g. loop unrolling thresholds, extent of de-branching, etc.)
  • Complex math built directly into the language

Why is No Macros considered a feature?

If you've been following Rust at all, you'd know that macros are currently the reason behind poor tooling. The complex nature of Rust macros cause the language to be too irregular for predictive tooling to be created.

Further, as we all know, C-style macros are indeed very powerful, but they allow for crazy and unsensible code to be written.

I took a step back and asked what are we really trying to accomplish with macros? Simple: writing complex, potentially repetative code multiple times, inlining such instructions.

We can achieve this with functions, but indeed with traditional functions you lose the power of compile time inlining. This is why Arua's static optimizer will provide extremely robust and extensive constant propagation strategies in order to inline most const-able functions - many of which may be evaluated in place at compile time.

As well, for those functions you know can't be statically evaluated, you can always slip in a compiler detail to instruct the compiler to inline if possible.

Where does the language draw the line between compiler-related constructs?

For clarification, this question could be re-worded:

How does the language decide what is intent and what is considered a compilation detail? For instance, the C-family mixes the two with the inline and volatile keywords.

It's pretty simple, actually. If it tells the compiler how to do something, it's a detail, thus it is specified within a compiler directive.

Otherwise, it most likely attempts to describe some sort of logic or layout of the program, in which case it belongs in the language semantics (notwithstanding compiler details).

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].