All Projects → bakkdoor → Fancy

bakkdoor / Fancy

Licence: bsd-3-clause
Fancy is a dynamic, object-oriented programming language inspired by Smalltalk, Ruby, Io and Erlang that runs on the Rubinius VM.

Labels

Projects that are alternatives of or similar to Fancy

Fancyaccordionview
An Android fancy accordion view
Stars: ✭ 64 (-75.1%)
Mutual labels:  fancy
Diff So Fancy
Good-lookin' diffs. Actually… nah… The best-lookin' diffs. 🎉
Stars: ✭ 14,806 (+5661.09%)
Mutual labels:  fancy
kitty
😽 Soothing pastel theme for Kitty
Stars: ✭ 121 (-52.92%)
Mutual labels:  fancy
Atom Terminal Panel
Advanced terminal interface for Atom editor
Stars: ✭ 95 (-63.04%)
Mutual labels:  fancy
Fancy Git
That's a simple prompt changer to show a few cool git informations about your repository on terminal. You can choose among 13 styles and enjoy all the aliases it provides you. Feel free for contributing, pull requests and issues are always welcome! ;)
Stars: ✭ 123 (-52.14%)
Mutual labels:  fancy
github
🐈‍⬛ Soothing pastel theme for GitHub
Stars: ✭ 145 (-43.58%)
Mutual labels:  fancy
Termcolor
Termcolor is a header-only C++ library for printing colored messages to the terminal. Written just for fun with a help of the Force.
Stars: ✭ 533 (+107.39%)
Mutual labels:  fancy
nvim
🍨 Soothing pastel theme for NeoVim
Stars: ✭ 659 (+156.42%)
Mutual labels:  fancy
Fancybackground
FancyBackground is a tiny Android library designed to animate a set of resource Drawables.
Stars: ✭ 153 (-40.47%)
Mutual labels:  fancy
HackDown
A pure black and white responsive markdown blog generator
Stars: ✭ 16 (-93.77%)
Mutual labels:  fancy
Fancy Flutter Alert Dialog
flutter package to show well designed alert dialog
Stars: ✭ 103 (-59.92%)
Mutual labels:  fancy
Docat
Host your docs. Simple. Versioned. Fancy.
Stars: ✭ 115 (-55.25%)
Mutual labels:  fancy
fancy
High performance web server
Stars: ✭ 20 (-92.22%)
Mutual labels:  fancy
Prompt So Fancy
Fancy terminal
Stars: ✭ 79 (-69.26%)
Mutual labels:  fancy
catppuccin
😸 Soothing pastel theme for the high-spirited!
Stars: ✭ 2,046 (+696.11%)
Mutual labels:  fancy
Qt Frameless Window Darkstyle
simple MainWindow class implementation with frameless window and custom dark style. It adds also support for titlebar and buttons (minimize, maximize, close)
Stars: ✭ 628 (+144.36%)
Mutual labels:  fancy
tweet-fancy
🚀 Tweet with bold, italics and strikethough text
Stars: ✭ 42 (-83.66%)
Mutual labels:  fancy
printer
A fancy logger yet lightweight, and configurable. 🖨
Stars: ✭ 65 (-74.71%)
Mutual labels:  fancy
palette
🎨 Soothing pastel theme to use within your projects!
Stars: ✭ 50 (-80.54%)
Mutual labels:  fancy
alacritty
🌴 Soothing pastel theme for Alacritty
Stars: ✭ 154 (-40.08%)
Mutual labels:  fancy

Logo

The Fancy Programming Language

Build Status


Fancy is a dynamic, object-oriented programming language heavily inspired by Smalltalk, Ruby, Io and Erlang. It supports dynamic code evaluation (as in Ruby & Smalltalk), class-based mixins, (simple) pattern matching, runtime introspection & reflection, "monkey patching" and much more. It runs on Rubinius, the Ruby VM, and thus has first-class integration with Ruby's core library and any additional Ruby libraries that run on Rubinius, including most C-extensions.

It supports concurrency via the actor-model, including first-class futures and async message send semantics built into the language, similar to Io.

For a quick feature overview, have a look at doc/features.md There's also a work-in-progress tutorial/book on Fancy here: https://github.com/fancy-lang/infancy A GitBook version (with PDF, ePub & Mobi formats) is available here: https://www.gitbook.io/book/kary/infancy

Related links

Compiling / Installing from source:

Dependencies:

  • Rubinius. You'll need at least version 2.0.0 for Fancy to work as expected. See http://rubini.us/downloads/ for more information. If you want to take advantage of the latest VM improvements, we suggest using rvm and installing rbx-head. See http://rvm.beginrescueend.com/ for more information.
  • Rake.
  • GNU Bison ( version 2.4 and higher otherwise you will get a Segmentation fault ).
  • GNU Flex.

Given the tools & libraries mentioned above, Fancy should build without problems on most *nix systems. We successfully have built Fancy on Debian & Ubuntu, OpenSuSE and Mac OS X 10.5, 10.6 & 10.7.

Standard building procedure:

Building Fancy is just that easy:

$ cd <fancy_source_path>
$ rake

This should go pretty fast. It actually compiles Fancy's standard library and compiler several times. Once via the bootstrap compiler written in Ruby (see boot/rbx-compiler/), and then via the self-hosted compiler (see lib/compiler/) itself.

Once the bootstrapping process is done, you can run the hello world example:

$ ./bin/fancy examples/hello_world.fy

Build commands

While working on the Fancy core and standard library (files in boot/ and lib/), changes should be automatically picked up by Rake. This means running rake will recompile just those changed files.

Modifying the compiler

If you're working on the Fancy language compiler (lib/compiler/ and boot/rbx-compiler/), you should run rake clean before running rake. This will rebuild the compiler so you can test your changes.

Modifying the parser

If you're working on the Fancy language parser (lib/parser and boot/rbx-compiler/parser), you will need to run rake clean_all before running rake. This will clean all the parser and compiler stuff.

Some technical information:

As the language is running on the Rubinius VM, Fancy shares the same runtime with Ruby. All of Fancy is built upon Ruby objects, so for example when you open the String class in Fancy, it's just Ruby's String class.

Because of this, and because in Fancy's standard library (lib/*.fy) we can define methods with the same name as they're defined in Ruby (but taking no arguments), we have decided not to overwrite the Ruby methods. This ensures that all Ruby libraries for example can use Ruby's Kernel#print or any other method in Ruby's kernel and work seamlessly.

Here's an example:

class Object {
  def print {
    "Print itself to the Console."
    Console print: self
  }
}

To meet this goal, the Fancy compiler renames Fancy methods taking no arguments (like the previous "print" example) to a method named ":print". Using explicit parens syntax will allow you to invoke any Ruby method.

someObject print    # Will actually invoke the Fancy ":print" method.
someObject print()  # With explicit parens invokes the Ruby method.

Ruby method invocation supports passing a block variable to Ruby as a proc.

class Something {
  def open: block {
    someRubyMethod(arg0, arg1, &block)
  }
}
Something new open: |s| { s work }

# with this syntax, calling ruby's inject is just as easy.
# This example will print the number 6
[1, 2, 3] inject(0) |sum, num| { sum + num } println

Copyright:

(C) 2010-2014 Christopher Bertels [email protected]

Fancy is licensed under the terms of the BSD license. For more information on licensing issues have a look at the LICENSE file.

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