summaryrefslogtreecommitdiff
path: root/content/gemtext/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.gmi
diff options
context:
space:
mode:
Diffstat (limited to 'content/gemtext/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.gmi')
-rw-r--r--content/gemtext/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.gmi110
1 files changed, 110 insertions, 0 deletions
diff --git a/content/gemtext/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.gmi b/content/gemtext/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.gmi
new file mode 100644
index 00000000..06a463c6
--- /dev/null
+++ b/content/gemtext/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.gmi
@@ -0,0 +1,110 @@
+# The fibonacci.pl.c Polyglot
+
+> Written by Paul Buetow 2014-03-24
+
+In computing, a polyglot is a computer program or script written in a valid form of multiple programming languages, which performs the same operations or output independent of the programming language used to compile or interpret it
+
+=> https://en.wikipedia.org/wiki/Polyglot_(computing)
+
+## The Fibonacci numbers
+
+For fun, I programmed my own Polyglot, which is both, valid Perl and C code. The interesting part about C is, that $ is a valid character to start variable names with:
+
+```
+#include <stdio.h>
+
+#define $arg function_argument
+#define my int
+#define sub int
+#define BEGIN int main(void)
+
+my $arg;
+
+sub hello() {
+ printf("Hello, welcome to Perl-C!\n");
+ printf("This program is both, valid C and Perl code!\n");
+ printf("It calculates all fibonacci numbers from 0 to 9!\n\n");
+ return 0;
+}
+
+sub fibonacci() {
+ my $n = $arg;
+
+ if ($n < 2) {
+ return $n;
+ }
+
+ $arg = $n - 1;
+ my $fib1 = fibonacci();
+ $arg = $n - 2;
+ my $fib2 = fibonacci();
+
+ return $fib1 + $fib2;
+}
+
+BEGIN {
+ hello();
+ my $i = 0;
+
+ for ($i = 0; $i <= 10; ++$i) {
+ $arg = $i;
+ printf("fib(%d) = %d\n", $i, fibonacci());
+ }
+
+ return 0;
+}
+```
+
+You can find the whole source code at GitHub:
+
+=> https://github.com/snonux/perl-c-fibonacci
+
+### Let's run it with Perl:
+
+```
+❯ perl fibonacci.pl.c
+Hello, welcome to Perl-C!
+This program is both, valid C and Perl code!
+It calculates all fibonacci numbers from 0 to 9!
+
+fib(0) = 0
+fib(1) = 1
+fib(2) = 1
+fib(3) = 2
+fib(4) = 3
+fib(5) = 5
+fib(6) = 8
+fib(7) = 13
+fib(8) = 21
+fib(9) = 34
+fib(10) = 55
+```
+
+
+### Let's compile it as C and run the binary:
+
+```
+❯ gcc fibonacci.pl.c -o fibonacci
+❯ ./fibonacci
+Hello, welcome to Perl-C!
+This program is both, valid C and Perl code!
+It calculates all fibonacci numbers from 0 to 9!
+
+fib(0) = 0
+fib(1) = 1
+fib(2) = 1
+fib(3) = 2
+fib(4) = 3
+fib(5) = 5
+fib(6) = 8
+fib(7) = 13
+fib(8) = 21
+fib(9) = 34
+fib(10) = 55
+```
+
+It's really fun to play with :-).
+
+E-Mail me your thoughts at comments@mx.buetow.org!
+
+=> ../ Go back to the main site