Category:Phix: Difference between revisions

Content added Content deleted
m (site moved)
No edit summary
Line 14: Line 14:
Phix is a self-hosted hybrid interpreter/compiler, developed by Pete Lomax. It is very easy to use, and similar to Euphoria.
Phix is a self-hosted hybrid interpreter/compiler, developed by Pete Lomax. It is very easy to use, and similar to Euphoria.


A single 16MB download contains a precompiled executable, all the sources, and'' '''everything''' ''needed to recompile them, in about 15 seconds. The download also contains a full-featured programmer's editor and 130+ demo programs.
A single 16MB download contains a pre-compiled executable, all the sources, and'' '''everything''' ''needed to recompile them, in about 15 seconds. The download also contains a full-featured programmer's editor and 130+ demo programs.


Perhaps the most striking feature of Phix is that it has just five builtin data types:
Phix applies the principle of least surprise, for instance in some languages <tt>myproc(list)</tt> or <tt>res = myfunc(list)</tt> can mangle list, whereas in Phix if you actually want that to happen you would code <tt>list = myproc(list)</tt> (and myproc would need to become a function) or <tt>{res,list} = myfunc(list)</tt>. A core tenet is that for any line of code there is one and only one possible interpretation of it, and said meaning is utterly intuitive.
<pre>
<-------- object --------->
| |
+-atom +-sequence
| |
+-integer +-string
</pre>
Despite such apparent simplicity, or perhaps precisely because of it, Phix programs are pretty fast - not quite achieving the runtime performance of C or assembly, but making up for it with a very fast edit/run cycle and proper human-readable messages should anything go wrong (even in shipped pre-compiled executables). Sequences are the real powerhouse of Phix. The one type covers lists, queues, tables, trees, and arrays, with strings being the subset that is array of character. They can grow and shrink automatically without any memory management overhead. For example if <tt>s="food"</tt> then <tt>s[2..3]="e"</tt> makes <tt>s</tt> "fed", and then <tt>s[2..1]="east"</tt> makes <tt>s</tt> "feasted".


Phix applies the principle of least surprise, for instance in some languages <tt>myproc(list)</tt> or <tt>res = myfunc(list)</tt> can mangle list, whereas in Phix if you actually want that to happen you would code <tt>list = myproc(list)</tt> (and myproc would need to become a function) or <tt>{res,list} = myfunc(list)</tt>. Likewise 1/2 is 0.5 (not 0, unless you explicitly ask for the floor()) and 0-1 is -1 (not +MAXINT). A core tenet is that for any line of code there is one and only one possible interpretation of it, and said meaning is utterly intuitive.
sequences (the one type covers lists/queues/tables/trees/arrays etc) and strings can grow and shrink automatically without any memory management overhead. For example if <tt>s="food"</tt> then <tt>s[2..3]="e"</tt> makes <tt>s</tt> "fed", and then <tt>s[2..1]="east"</tt> makes <tt>s</tt> "feasted".


My goal on rosettacode is to show that Phix is easy to understand (succinct but not terse), and easy to debug.
My goal on rosettacode is to show that Phix is easy to understand (succinct but not terse), and easy to debug.