Slashdot Mirror


Quadrilingual Crazy Programming

mtve writes: "Have you ever seen source code that is valid on four languages: Perl, C, Befunge, and BrainF*ck? During last Perlgolf season famous Perl hacker Jérôme Quelin submit such inconceivable masterpiece and now he published expanded explanation of his solution. Caution: that text can hurt your mental health. Play Perlgolf!"

3 of 194 comments (clear)

  1. Code includes preprocessor directives by Sancho · · Score: 4, Interesting

    He uses the fact that # is a comment in Perl VERY frequently to use #defines etc that will allow C to act like Perl. Interesting solution, although I question whether the use of such preprocessor directives REALLY counts as making cross-compatible code. Then again, I nitpick the difference between preprocessor and compiler, so...

  2. Multilingual is the norm... by KFury · · Score: 4, Interesting

    ...on th web, anyhow. All the time we deal with several languages, burying one inside another so they'll make sense as they go through successive levels of parsing.

    For example, every day I write SQL that is buried in PHP libraries which extracts more PHP that in turn has HTML and Javascript in them.

    For another example of the crazyness, check this simple example. Now if you look at the source, you'll notice the end part of that A-tag was: .');"> For those of you who are counting, that's SIX 'enders' in three syntax languages just to form a simple alert box.

    . - English syntax
    ' - Javascript string syntax
    ) - Javascript function syntax
    ; - Javascript instruction syntax
    " - HTML attribute syntax
    > - XML (err, HTML, whichever) tag syntax

    And that's not even a particularly hairy example. That's just client-side and wetware-side parsing.

  3. just curious by Permission+Denied · · Score: 5, Interesting
    #define ARGV argv

    Why not just do this instead:

    main (int argc, char *ARGV[])

    Also, another minor quip: the C program is not valid C in either C89 or C99. It's not valid C89 because it uses '//' for a comment, and it's not valid C99 since it introduces main() without declaring the return type. C89 defaults to int if you don't declare the type (both for functions and variables, which can be fun), whereas this behaviour is undefined in C99. Normally, I don't follow the anal-retentive lingual purists, but I think this situation calls for this.

    But yeah, this is pretty cool.