# Falcon - powering innovation

**URL:** <https://www.ruby-forum.com/t/falcon-powering-innovation/165287>\
**Category:** Ruby\
**Created:** [April 11, 2009, 3:20pm UTC](https://www.ruby-forum.com/t/falcon-powering-innovation/165287 "2009-04-11T15:20:48Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kless](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/cc9497/32.png) [@Kless](https://www.ruby-forum.com/u/Kless)\
**Post date:** [April 11, 2009, 3:20pm UTC](https://www.ruby-forum.com/t/falcon-powering-innovation/165287/1 "2009-04-11T15:20:48Z")

</div>

If anybody is interesed in new technologies, you’ll love this new  
language called Falcon [1], which has been open sourced ago little  
time.

Falcon is a scripting engine ready to empower mission-critical  
multithreaded applications. It provides six integrated programming  
paradigms: procedural, object oriented, prototype oriented,  
functional, tabular and message oriented. You use what you prefer.

To know more about its design, read the interview to the Falcon author  
that has published ComputerWorld Australia [2].

[1] [http://www.falconpl.org/](http://www.falconpl.org/)  
[2]  
[IT news, careers, business technology, reviews | Computerworld](http://www.computerworld.com.au/article/298655/-z_programming_languages_falcon?fp=2&fpid=)

---

<div class="post-metadata">

**Author:** ![Kless](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/cc9497/32.png) [@Kless](https://www.ruby-forum.com/u/Kless)\
**Post date:** [April 11, 2009, 3:49pm UTC](https://www.ruby-forum.com/t/falcon-powering-innovation/165287/2 "2009-04-11T15:49:04Z")

</div>

On the first page I was greated withy this example:

> “Hello world!”

…which would suggest it uses the greater then sign as a printf. So  
then what if I write something like this:

if a \> some\_function()

Am I say: “if (a) printf(some\_function())” or is this just all the  
condition line, such as: “if (a \> some\_function())”. Code syntactic  
sugar is nice to have, but not when I welcome in all sorts of cases of  
ambiguity.

---

<div class="post-metadata">

**Author:** ![Kless](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/cc9497/32.png) [@Kless](https://www.ruby-forum.com/u/Kless)\
**Post date:** [April 11, 2009, 6:20pm UTC](https://www.ruby-forum.com/t/falcon-powering-innovation/165287/3 "2009-04-11T18:20:25Z")

</div>

To compile it one needs cmake. Unfortunately I was not able to build it.

The Io Language has a similar problem - I can not compile it.

I am sorry to say, but this is frustrating for me.

Python, Ruby and Perl all compile here from source for me without ANY  
problem.  
I think new languages should put big emphasis to try to stay on par with  
the existing scripting languages. Maybe Falcon is better than i.e.  
python, but if I am too stupid to compile it, whereas ruby python and  
perl all work nicely (as opposed to compiling Falcon or Io), then I just  
stick to what gives me less problems.

That being said, Falcon seems to have some really cool ideas. Who knows,  
maybe one day ruby learns from falcon 🙂

---

<div class="post-metadata">

**Author:** ![Kless](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/cc9497/32.png) [@Kless](https://www.ruby-forum.com/u/Kless)\
**Post date:** [April 16, 2009, 12:23pm UTC](https://www.ruby-forum.com/t/falcon-powering-innovation/165287/4 "2009-04-16T12:23:28Z")

</div>

> ```
> attr_accessor #{property}
> end
> 
> ```
> 
> }  
> end

Actually, this is a hack already. (Warning, the parameter order is  
1.9 only).

def self.makeClassWithProp(name, superclass = Object, property)  
c = Class.new(superclass) {  
attr\_accessor property  
}  
const\_set(name, c)  
end

Is a nice and clean way to get that working. This generates a Subclass  
to the Module/Class this Method is defined in.

Regards,  
Florian

–  
Florian G.

smtp: removed\_email\_address@domain.invalid  
jabber: removed\_email\_address@domain.invalid  
gpg: 533148E2

---

<div class="post-metadata">

**Author:** ![Kless](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/cc9497/32.png) [@Kless](https://www.ruby-forum.com/u/Kless)\
**Post date:** [April 11, 2009, 6:40pm UTC](https://www.ruby-forum.com/t/falcon-powering-innovation/165287/5 "2009-04-11T18:40:55Z")

</div>

Kless wrote:

> that has published ComputerWorld Australia [2].  
> Nice language (I like all new languages :). Please don’t read any of my  
> words as criticism.

The Falcon Facts Table [1](http://www.falconpl.org/index.ftd?page_id=facts) is not 100% right about Ruby.

- Document Template: There was eruby in the past (maybe it still exists)  
that was a binary. Other than that, “Document Templating” can be  
emulated by  
this one-liner:

And then, I don’t think this is an important fact and should  
definitively  
not be built into the language itself.

- Multithreading: Ruby 1.8 had portable multithreading (it even worked  
under  
DOS a decade ago). Ruby 1.9 has native OS threads, which are a lot more  
scalable than green threads of Ruby 1.8. But basically the same applies  
as  
for Python. I guess JRuby is a lot more scalable in this regard.

- Embeddability: You can embed Ruby into a C application in 10 lines of  
code. But usually you write wrappers of a C library and call it from  
Ruby.  
What you can’t do is to embed multiple instances of Ruby into your  
application (you can do that with Rubinius).

- C Dynamic Library Interface: Ruby ships with “dl”, with which you can  
access dynamic libraries.

- Compile time metaprogramming: I don’t see a huge difference to Ruby’s  
metaprogramming here. You can do exactly the same with evaluating  
strings,  
e.g.

- Procedural programming: Well, methods are very similar to procedures.  
If  
you write methods in the toplevel (without a class declaration), they  
are  
part of class Object. I don’t see a huge difference to procedures 🙂

- Functional Programming: I’d give Python here a clear “yes”, as  
Python’s  
methods are actually functions. You can definitively pass other  
functions as  
parameters to functions in Python. In Ruby, there are also functions  
(“blocks”) that you can pass to methods. So I’d give Ruby at least a  
partial  
here and Python a clear “yes”.

- Prototype-oriented: Ruby has singleton methods.  
a = Array.new  
def a.new\_method  
“hallo”  
end  
p a.new\_method # =\> “hallo”  
Array.new.new\_method #=\> method missing

- Direct binary data access: Both Python and Ruby have libraries that  
ship  
by default that deal with this. In Ruby this is done by methods #pack  
and  
#unpack.

- Virtual filesystem: There is open-uri, a library which provides  
kind-of  
virtual filesystem:

* * *

IMHO, Falcon mixes too many things into one language, without having a  
clear  
advantage over languages like Python or Ruby (at least I haven’t seen a  
clear feature that Python or Ruby doesn’t have). I like Ruby because of  
it’s  
simplicity and well-thought-out underlying model (everything is an  
object),  
and not to forget the principle of (matz’s) least suprise in the core  
libraries. Having too many concepts in a language is not always a good  
thing.

Regards,

Michael
