Slashdot Mirror


Parrot 0.1.1 'Poicephalus' Released

Pan T. Hose writes "The long awaited release of Parrot 0.1.1 "Poicephalus" has been finally announced on perl.perl6.internals newsgroup and perl6-internals mailing list simultaneously by Leopold Toetsch followed by an announcement on use Perl by Will Coleda and now also on Slashdot." (Read on for a list of changes since the last release, as well as a number of useful links.) Pan T. Hose continues "The most important changes since the previous version 0.1.0 (code-named 'Leaping Kakapo' and released in February) are:
  • Python support: Parrot runs 4/7 of the pie-thon test suite
  • Better OS support: more platforms, compilers, OS functions
  • Improved PIR syntax for method calls and <op>= assignment
  • Dynamic loading reworked including a "make install" target
  • MMD - multi method dispatch for binary vtable methods
  • Library improvement and cleanup
  • BigInt, Complex, *Array, Slice, Enumerate, None PMC classes
  • IA64 and hppa JIT support
  • Tons of fixes, improvements, new tests, and documentation updates
The amazing project which no one had any idea would go so far from the original April Fool's Joke by Simon Cozens (also posted on Slashdot on April 1, 2001) to really unite Perl and Python one day (not to mention Tcl, Scheme, Forth and Ruby, to name just a few) is now available for download from CPAN and via CVS. Those who are not up-to-date with Perl 6 mailing lists can read This Week in Perl 6 weekly summaries by Piers Cawley to have some idea on how's the project been going in the last two years. It's important to read Apocalypses, Exegeses and Synopses together with RFCs and Parrot Design Documents for better understanding of the underlying rationale, especially the superiority of register-based Virtual Machines (like Parrot VM) over stack-based one (like JVM) for modern (dynamically-typed) OO languages with multiple inheritance, operator overloading, traits, roles and much, much more. Parrot Docs, FAQ and examples are also very helpful. This is a very important step in the direction of Perl 6 which we are all looking forward to."

47 of 224 comments (clear)

  1. preview for readability before submit, perhaps? by lambent · · Score: 3, Funny


    Holy run-on sentence, Batman!

    1. Re:preview for readability before submit, perhaps? by Amiga+Lover · · Score: 4, Insightful

      I'd like a preview that contains a tiny piece of information on just what Parrot is. I can google it, yeah, but I could also google and get just as much info as any story on slashdot if I just read

      "New version of Parrot released".

      It's reminiscent of badly written man pages, where a command has info like:

      -n, --nfrtrt
      enables use of nfrtrt.

      And says no more. It's just a tiny addition, it would really help, and that's what we have editors for!

    2. Re:preview for readability before submit, perhaps? by Reducer2001 · · Score: 2, Informative

      It says in the "read more" section that it unites perl and python.

      --
      When you get to hell -- tell 'em Itchy sent ya!
  2. It is bereft of life. It is a dead parrot! by samberdoo · · Score: 2, Funny

    Actually, all jokes aside it looks like a valiant try.

  3. python performance by lordofthemoose · · Score: 2, Interesting

    I am especially interested in python support. I love python but it is some times a tad bit slow. I've seen lots of interesting initiatives to really improve performance (the starkiller python to C++ "compiler" for example), and am now very curious to see how good this one will perform. Besides, it would be quite funny to have perl and python united :-)

    1. Re:python performance by Pxtl · · Score: 5, Interesting

      The problem is that Python's slowness isn't just from the interpreter, but the nature of the language. Notice how two similar objects don't require an interface to be used in the same way with the same methods? Because of that it will be hard to store members as anything but dictionaries, which are necessarily slow.

      Either way Parrot will be an improvement, allowing shared Python/Perl/Ruby libraries, importing pure-python modules nicely, and most importantly: maybe we can finally sandbox Python. Rexec has been dead a long time, and Python is currently unusable as an embedding language without a lot of hacking because of that.

  4. why? by spectrokid · · Score: 2, Interesting

    Why a new VM? Jython showed it is possible to "recycle" the java VM. Can anybody explain why this is better?

    --

    10 ?"Hello World" life was simple then

    1. Re:why? by BridgeBum · · Score: 5, Informative

      Performance.

      From the FAQ:

      Why your own virtual machine? Why not compile to JVM/.NET?
      Those VMs are designed for statically typed languages. That's fine, since Java, C#, and lots of other languages are statically typed. Perl isn't. For a variety of reasons, it means that Perl would run more slowly there than on an interpreter geared towards dynamic languages.

      The .NET VM didn't even exist when we started development, or at least we didn't know about it when we were working on the design. We do now, though it's still not suitable.

      So you won't run on JVM/.NET?
      Sure we will. They're just not our first target. We build our own interpreter/VM, then when that's working we start in on the JVM and/or .NET back ends.

      --
      My UID is the product of 2 primes.
    2. Re:why? by ThisNukes4u · · Score: 2, Informative

      For one, the JVM is stack-based, which makes it hard to implement in hardware, while Parrot is stack-based like CPUs. This also has performance advantages for various reasons.

      --
      thisnukes4u.net
    3. Re:why? by Enucite · · Score: 2, Funny

      "the JVM is stack-based ... while Parrot is stack-based ..."

      Oh, that explains it. Thanks.

    4. Re:why? by GooberToo · · Score: 4, Informative

      I think he means register based.

      From one of the examples, we get:

      set I1, 1
      set N1, 4.2
      set S1, "Resting"
      print I1
      print ", "
      print N1
      print ", "
      print S1
      print "\n"
      end

      Which seems to indicate a heavy use of register type functionality. This will map to hardware (thusly faster) better, much more so than a stack based (java) VM implementation. Especially for dynamically typed languages (perl, python, ruby, etc).

    5. Re:why? by ajs · · Score: 5, Insightful
      The primary reasons for Parrot are:
      • Language neutrality
      • Support for very high level language inter-operation (e.g. you can sub-class a Python object in Perl and call a method on the Perl class that gets invoked fromt he Python class).
      • Deep support for multiple character sets, not just ASCII and Unicode.
      • Perl 6
      The last item might seem odd, but Perl 6 is definitely a language which needed some serious support. It's very ambitious, and a VM that didn't support its needs as completely as Parrot does would have exponentially complicated writing a compiler for it.

      That said, the combination of the two promises to be one of the most powerful development platforms released to date.
    6. Re:why? by miguel · · Score: 2, Informative

      The meme of `register byte code will map nicely
      to hardware' is also rubbish.

      For one, the type of the registers in parrot do
      not map to the underlying hardware types (ints
      and floats is all cpus can do), and second of all
      not every CPU has all the registers parrot has.

      So if you generate code that uses 32 registers,
      you would still need to map to 6 registers on
      Intel.

      To make things worse, register allocation is
      one of the hardest problems in a compiler, and
      the one that probably has the most impact on the
      performance of generated code.

      So now every compiler author is forced to write
      a register allocator, only to find out that
      parrot will throw away all that information and
      redo its own register allocation.

      That is why Medium Level IRs do not use registers,
      they are too high level to have any real effect.

      As for lower-level IRs, most of them assume
      infinite registers anyways as a simple way of
      "labeling data".

      ---

      Parrot comes with a system that will let
      compiler developers not worry about register
      allocation: you emit some kind of infinite
      register, and a tool produces the IR registers
      (which will later be discarded anyways).

      Miguel.

    7. Re:why? by CTachyon · · Score: 2, Informative

      I'm no expert on all the political nuances, but there are at least two groups of people that can't use Unicode.

      The first is a subset of CJK (Chinese, Japanese, and Korean) speakers. CJK support has been a political minefield for years, and Unicode just made it worse. If you're not aware, each of those languages uses Chinese ideograms in its written language (Korean less so today), even though the actual pronunciations are completely different. The first mine is the PRC's creation of "Simplified Chinese" in the 1950's, and whether a character set favors Simplified or Traditional characters determines a broad swath of political implications. A second mine is how many literary characters a character set supports; to properly record classic Chinese literature, you need somewhere near 50,000 code points, but if you're just recording modern communication, you can get by with around 10,000 (Traditional) or 2,000 (Simplified). The latest mine is the Unicode Consortium's attempt at Han unification, which merged all 4 languages (counting Simplified and Traditional separately) into a single list of code points, without regard for the fact that the actual glyphs sometimes varied dramatically between languages; the expectation was that users would have the appropriate font for their local language installed, but it makes using multiple CJK languages (e.g. a list containing both Chinese and Japanese names) difficult at best and sometimes outright impossible.

      The second group of people who can't use Unicode are people using languages that aren't in Unicode. Most of these are historical languages being studied by linguists, but there are even a handful of modern languages.

      There are also some situations where, although Unicode works, using a different encoding is much more space-efficient. Ignoring the obvious example of the ISO-8859-N family, CJK text is very, very bulky when encoded in UTF-8 (3 to 4 bytes), but is easily represented by fixed-width 2 byte encodings, and sometimes Japanese can even be shoehorned into 1 byte per character (if it's all kana).

      --
      Range Voting: preference intensity matters
    8. Re:why? by miguel · · Score: 2, Informative

      Notice that stack-based operations are nothing
      but a linear representation of a tree.

      It is in effect the output that you would get from
      serializing a tree, so you turn internal compiler
      representation, like for example the following
      tree:

      (assign var (add 1 2))

      into a series of stack operations:

      push 1
      push 2
      add
      var_address
      store

      You can certainly "interpret" those bytecodes,
      and for an interpreter it is debatable if there
      is a performance improvement or not.

      But for any self respecting JIT, the above is
      only an MIR (Medium-Level IR) that must be
      processed into something else.

      The tree is reconstructed from the stack
      operations (every JIT does that) and then you run
      your standard optimizations, with register
      allocation to the target architecture being the
      last step of a long chain of operations.

  5. Awesome april fools joke by Anonymous Coward · · Score: 4, Funny

    For those too lazy to click on the april fools links, the programming examples were some of the funnies things I've seen.

    =====
    Show us some Parrot code.

    GvR: [...]

    # copy stdin to stdout, except for lines starting with #
    while left_angle_right_angle:
    if dollar_underscore[0] =eq= "#":
    continue_next;
    }
    print dollar_underscore;
    }

    [...]There's more than one way to do it, right, [...]

    LW: [...]

    while(@line = Sys::Stdin->readline()):
    continue_next if $line[0] =eq= "#":
    print @line;
    }
    ============
    From the minute I saw that I thought I'd love the language. Truely shows the power of open source.

  6. what is parrot? by egott · · Score: 5, Informative

    from the faq:

    Parrot is the new interpreter being designed from scratch to support the upcoming Perl6 language. It is being designed as a standalone virtual machine that can be used to execute bytecode compiled dynamic languages such as Perl6, but also Perl5. Ideally, Parrot can be used to support other dynamic, bytecode-compiled languages such as Python, Ruby and Tcl.

    --
    There are 10 kinds of people: Those that understand ternary; those that don't; and those that don't care.
    1. Re:what is parrot? by Kristoffer+Lunden · · Score: 3, Informative

      Not only is it supposed to support those languages and more (from Forth to Java via Lua and Lisp ;-), it is also meant to be easy to target with your own custom languages - in fact, several such beasts have been spotted on the mailing list, some of them very impressive already.

      Moreover, libraries will (hopefully?) be possible to share code, especially libraries, across languages(!) so you could write your programs in ruby or python and still have access to all of CPAN, and vice versa. Talk about code reuse! :)

      One of the big things I see a use for this, maybe to some extent already now, is scripting for game libs and engines. Those often have support for one or several languages, homebrewn or regular, in various stages of completion, with or without SWIG and it is all too often a huge big semi-maintained mess. With parrot bindings, you could use any supported language and possibly even mix - different languages are better at different things. Moreover, you could implement your own, custom languages to fit special tasks. Want a language that can handle 3d calcs, physics and AI interactions in a natural way? Just do it and reuse it for the whole series. :)

      Ok, so maybe I am dreaming a bit, but having a powerful interpreter *made* for writing languages for, easily embedded, cross-platform and open source is something to really look forward to in so many ways! I just wish it'd hurry up getting there... and yes, I guess sometime I'll have to stop talking and start contributing myself. ;-)

      And oh, there are already some simple games written using parrot and SDL, check em out. And do what I also should, join the effort! :)

  7. Explanations Please by SomeGuyTyping · · Score: 3, Insightful

    When posting software projects (especially those whose version number 0) please add a quicky bit about the package for the lazy amongs us

    --
    My posts are definitive. Reality is frequently inaccurate.
  8. Mark Sparshatt is working on a Ruby project... by tcopeland · · Score: 4, Interesting

    ...that would compile Ruby programs into intermediate compiler code so they could be run on Parrot.

    He's done a few releases and appears to be making good progress here.

  9. Python support? by WillWare · · Score: 4, Funny
    Python support: Parrot runs 4/7 of the pie-thon test suite

    Python 2.3.3 (#1, May 7 2004, 10:31:40)
    [GCC 3.3.3 20040412 (Red Hat Linux 3.3.3-7)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 4 / 7
    0
    >>>

    Ouch!

    Now I'll get my thumb out of my ass and pass along my gratitude to everybody who's worked on Parrot. An open-source VM, particularly one targeted at existing open-source languages, is a mitzvah. It even has the nice side benefit of creating a little commonality between the communities. Thank you.

    --
    WWJD for a Klondike Bar?
  10. pasm rules by Anonymous Coward · · Score: 3, Funny

    Parrot assembler is the nicest asm dialect I've ever had the pleasure to work with. I'm looking forward to a new mod_parrot so I can do enterprise web apps, the way they should be done; in asm.

    I spent far too long yesterday playing with parakeet, definately some interesting things happening in parrot land.

  11. Re:Can I run .NET/CLR and JVM bytecode on it? by Ollierose · · Score: 2, Funny

    well, seeing as the .Net CLR and JVMs are currently built on top of a register based architecture (namely a CPU), theres no reason why someone (preferably not likely to miss their sanity) could port mono or an OSS JVM to run on top of parrot.

    mmm... JVM on Parrot on CPU goodness

  12. Re:WTF is this? by Bob+of+Dole · · Score: 5, Informative

    That's not what it is. Perl and Python (and most "major" interpreted languages, I would suspect), first compile the script to byte-code, then execute the byte-code in a VM.

    At some point along the line, someone said "Hey! Why are we writting VMs for every single language? They all do pretty much the same thing!".

    So Parrot is that, a common VM. Perl6 compiles to Parrot bytecode, instead of the perl-only-bytecode it was using for Perl5.
    Since that bytecode format is open, and the VM free, any other interpreted (or compiled, I guess) language (Python, Ruby, TCL, LUA, whatever) can make their compilers output Parrot bytecode.
    That way they don't have to build and maintain their own VM, and they get the benefits of future optimizations to Parrot.

    For example, I could write a just-in-time compiler for Parrot for my favorite platform, and every Parrot-enabled language could take advantage of that.
    Doing that now, I'd have to pick a language to optimize. Do I want to make Python faster? Or Perl?

    Python is going to use it in the future,last I heard. (probably as another backend like Jython or IronPython, not as a replacement for CPython)
    I think they were waiting on the byte-code format stabilizing.

    All in all, it's a very cool idea. Makes it a hell of a lot easier for people to make new interpreted languages, since they only have to target Parrot, and they've got a mature, debugged, VM that runs on multiple platforms. (in theory, at least. I don't think it's there yet)

    It's not that similar to the JavaVM (which is only designed to run Java, not a pile of different languages), but it is kinda like the .Net VM.
    The developers of Parrot created Parrot instead of targeting .Net for two reasons:
    1. .Net didn't exist when they began :)
    2. .Net is designed for compiled languages (C++, C#, VB, etc), and supposedly that would cause a performance hit over a VM designed for interpreted languages. (Plus, it's not designed to be portable, like Parrot is)

  13. Another funny virtual machine by descubes · · Score: 3, Interesting

    The Virtual Virtual Machine is, if I understand correctly, a virtual machine to build virtual machines.

    --
    -- Did you try Tao3D? http://tao3d.sourceforge.net
  14. A truly interesting project by Coryoth · · Score: 5, Interesting

    Parrot is a very interesting project indeed, and it looks as if it is now starting to seriously pick up steam. What we're looking at here is VM that works, and is optimised for Perl, Python, Ruby, Forth and all those other lovely scripting languages.

    Given all the current debate raging over JVM vs. .NET and Java vs. C# people seemed to have missed Parrot creeping up from behind. Potentially Parrot can pull together Perl, Python and Ruby - imagine CPAN that works with all of those languages at once, but pulls in all the interesting Python and Ruby libraries too.

    In general scripting languages have been looked down upon, but realistically the gap between scripting languages (and what you even mean by "scripting language") has been drastically narrowed to the point where it is increasingly less relevant. The only serious remaining issue is speed - and that's something Parrot can help fix, putting Perl, Python and Ruby code on a similar footing as Java and C# code running on their VMs. You'll take a small hit for using a higher level language, but it won't be as drastic as it is now.

    Maybe all that GNOME discussion about .NET via Mono or Java via JVM shoudl start considering Perl/Python/Ruby via Parrot as a very serious choice for doing the high level application programming.

    Jedidiah.

    1. Re:A truly interesting project by Coryoth · · Score: 2, Insightful

      "creeping" indeed. C# is here now, and you can write real apps in it now. Parrot still hasn't gotten out of the gate. It just happened to move a little.

      And 4 years ago the Java people could happily say exactly the same thing about C#. If Parrot offers real advantages (and it does) then when it does arrive it is going to shake things up. Laugh now, but honestly, wait a few years and see if you're still laughing. I'll put rather good odds that if you are it will be very very nervous laughter.

      Jedidiah.

    2. Re:A truly interesting project by Shillo · · Score: 2, Interesting

      > "creeping" indeed. C# is here now, and you can write real apps in it now. Parrot still hasn't gotten out of the gate. It just happened to move a little.

      But the languages covered by Parrot have been around long before .NET was even conceived of, and there is a huge pile of software already written in each of them. Parrot simply ups the ante to the whole new level.

      --

      --
      I refuse to use .sig
  15. To ellaborate on the FAQ by pavon · · Score: 4, Informative

    As it said, Python, Perl, Ruby, Smalltalk, Lisp, and most of the languages targeted by Parrot are dynamically typed and have dynamic message passing (method calls). This means that typechecking is done by the run-time environment, not by the compiler. Likewise, it is not known untill runtime which if an object has a method. Therefore, the runtime has to do a fair amount of checking (mostly symbol table lookups). If you were to do this with a VM designed for static languages (JVM, .NET) that do not do this checking for you, then you would have to implement all of it as byte-code in the VM - in effect you would be writing a big chunk of a Perl interpretor in Java.

    This approach would inevitably be slower than the existing Perl 5 interpretor, while the Parrot approach has managed to be significatly faster than the current Perl 5 interpretor. The reasons are that 1) all of the runtime checking is highly optimized native code 2) after the complex perl code is translated into a simpler form, the traditional compiler optimizations can be applied to the code.

  16. Holy Cow by Anonymous Coward · · Score: 2, Funny

    I told my perl buddies how perl could affect the readability of their day to day life language usage. Now we have this post as example :)

  17. A question by Hortensia+Patel · · Score: 2, Insightful

    And no, it's apparently not a FA one.

    Will Parrot, at some hypothetical point in the distant future, be able to decouple languages from libraries in the same way that .NET does? This is IMO the most exciting thing about .NET - once new languages are no longer guillotined in their infancy by the "but there aren't any libraries for it!" hurdle, a veritable renaissance in language design becomes possible, and maybe we can finally crawl out of the backward-compatibility tarpit.

    1. Re:A question by Kristoffer+Lunden · · Score: 2, Interesting

      Yes. You should be able to use libraries freely no matter what language they were written in, so python users get to use CPAN, perl users get access to RAA, and so on... it's all bytecode in the end. :)

      Potentially, you might even be able to switch and mix languages mid-file too, though that probably is not useful all that often. ;-) (Evals might be able to give a language as a parameter if I understood it right).

    2. Re:A question by multi+io · · Score: 3, Informative
      That's the whole point of using the same runtime for all three [languages]

      The point of that is also that you have only one debugged runtime and don't have to write your own for each language.

      A very important fact hasn't been mentioned here: When you compile multiple languages to the same VM, you don't automatically get interoperatibility between those languages. Interoperatibility is a different concept that must be separately achieved, mostly by defining additional rules and standards on-top-of the VM specification.

      For example, look at different C or C++ compilers on Linux/x86. They all compile to the same machine code, but Intel machine code has no concept of "symbol names", "class names", "type names" etc., so, for the compiled codes to be interoperable, they must comply to additional specifications like ELF or some C++ ABI ("name mangling").

      Parrot bytecode may define some or all of those concepts, but some scripting languages will probably define additional features (macros, MI, continuations etc.) that have no "native" representation in Parrot, so additional conventions to represent those things in Parrot must be agreed upon. The .NET CLS ("common language specification") is another example of such a set of addional rules to provide for language interoperatibility.

    3. Re:A question by mewphobia · · Score: 2, Interesting

      You rock. If i hadn't already commented I would have modded you straight to the top! :)

      The answer, as far as i understand it, is YES! It's going to be bloody brilliant to be able to use the CPAN libraries from any language.

      But it makes me wonder if .net will be microsoft's destruction? If open source oses can run .net then why pay for windows? Microsoft has controlled the market because they have controlled the implementation of the most popular API - win32. Sure, they will try and control their new API, .net by things like windows forms that are tightly coupled with win32 - but how long till there is a viable opensource alternative? So i'm guessing microsoft's drawcard is palladium. Digital media is their leverage.

      I guess we'll see how it pans out.

  18. What is a "Poicephalus" by El · · Score: 2, Informative

    "The Genus Poicephalus are small to medium sized, stocky birds with short, squarish tails and proportionately substantial bills." I guess it's just your basic African parrot, then. Funny, with the word "phalus" in it, I thought it would be something else...

    --

    "Freedom means freedom for everybody" -- Dick Cheney

  19. Re:WTF is this? by smcdow · · Score: 4, Insightful
    Actually perl goes farther:
    my $a = "5"; # $a is a string

    $a++; # now $a is both a string and a number. "6" and 6, respectively

    my $b = $a + 1; # $b is a number

    $b = "$b"; # now $b is both a string and a number

    # these two statements produce the same output
    printf( "\$b is %s\n", $b );
    printf( "\$b is %d\n", $b );

    Strong typing sucks.

    --
    In the course of every project, it will become necessary to shoot the scientists and begin production.
  20. Re:WTF is this? by Deadbolt · · Score: 2
    Obvious rejoinder time:
    my $a = 5; # $a is an int
    my $b = 3; # so is $b

    $c = $a / $b; # $c is 1.66, yay

    my $d = 5; # same deal
    my $e = "three"; # whoops

    $f = $d / $e; # um, what's in $f?
    Not saying strong typing is inherently better, but that sometimes you REALLY, REALLY want to know if you're doing something stupid at compile time instead of run time.
    --
    "Honey, it's not working out; I think we should make our relationship open-source."
  21. a brilliant project by dgym · · Score: 2, Interesting

    With so many open source language implementations around these days, developing a VM that any of them can take advantage of is a fantastic idea.

    One focussed effort on providing efficient JIT compilation will improve performance, and similarly this one layer to address portability could do more to break down OS barriers than java managed.

    I'm excited about Parrot just for that, but if there is any possibility that different languages will be able to make use of libraries written in others, then that would be the icing on the cake. I can't tell if it should be possible, but if I could make use of someone else's library written in their favourite languge, from my favourite languge (by virtue of them both running on Parrot), software would be a whole lot more fun.

    1. Re:a brilliant project by chromatic · · Score: 2, Informative

      It's not just possible, it's a goal.

      Any existing language running on Parrot right now can use the SDL bindings, if the language has syntactic support for loading the appropriate library and calling class and instance methods.

      As well, Tim Bunce's plans for DBI 2, Perl's almost ubiquitous database module family, includes porting it to Parrot to make it available to any language running on Parrot.

      Everything compiles down to Parrot bytecode, so if your language has the syntax for interoperability, you'll have it.

  22. Like Mathematica... by Ayanami+Rei · · Score: 2, Interesting

    Really.

    Parrot's runtime sounds a whole lot like what Mathematica does internally: dynamically typed language which compiles JIT into a bytecode for a register-windowing VM.

    --
    THIS THING CAN TURN ON A DIME, MACROSSZERO STYLE ALSO FUCK BETA, ~NYORON
  23. Re:WTF is this? by Raffaello · · Score: 2, Interesting

    This is really a performance issue, not a type safety issue. If type safety is particularly important, then type checks can be done at run time. However, doing these type checks at run time has a run time performance cost. Doing these same checks at compile time means that compiled code will run that much faster since no type checks are being performed at run time.

    Certain types of programs really benefit from compile time type checking - specifically, those where inputs are known at compile time, or are known to be of certain types, or are known to be safe (i.e., inputs are not coming at your program across the wire from a potentiall hostile source - think any web app that takes free form input from users).

    It could be argued that in the modern GUI/networked era, many apps are going to be doing lots of run time checking anyway because they are exposed to data inputs from potentially hostile users on a WAN - i.e., the internet, and they are at the mercy of user GUI inputs (bizarre mouse clicks and drags, bogus text or numeric field entries, etc.). That being the case, being able to do type inference and compile time type checks doesn't buy one much in terms of saftey or performance for any such app, since you'll be doing lots of run time type checks on user input data anyway.

    IMHO, the idea of compile time type inference and type checking is born of a model of computing that is becoming obsolete. It was how most computation was done just a few decades ago - the programmer controlled the input closely, and so could guarantee inputs of certain types in certain ranges, etc. We have now moved into an era where the most interesting inputs are essentially unknowable at compile time - these are user inputs, whether GUI, keyboard, or network in origin. Just as importantly, user choice destroys the notion of a fixed algorithm executing in a predicable fasion. We simply can't know what direction our programs will take once we allow the user sufficient choice in shaping the programs execution. This being the case, and increasingly so as we go forward, I think that compile time type checking is a backward looking paradigm for programming languages.

    See Peter Wegner's home page for some related ideas on new ways of thinking about what it is that a program really does in the modern interactive GUI/network era.

  24. Readability? by Pan+T.+Hose · · Score: 3, Funny

    Holy run-on sentence, Batman!

    That's funny you mention it because quite frankly I did preview it and in fact it was not until then when I decided to turn a list of comma separated values into a bullet list as well as brake the second then single-sentence paragraph into three separate sentences exactly because I was somewhat concerned readability-wise--though to be fair braking it into two parts and adding "Read on for a list of changes since the last release, as well as a number of useful links" we owe to Timothy, who has also removed quite a few important links for some reason--but nevertheless I am quite surprised if not outright disappointed that anyone who is even remotely interested in Perl 6 might lack basic linguistic skills to parse a paragraph of simple English, however on the other hand I can understand that for some people interested in the subject my story might indeed contain not nearly enough whitespace.

    --
    Sincerely,
    Pan Tarhei Hosé, PhD.
    "Homo sum et cogito ergo odi profanum vulgus et libido."
  25. Nothing inappropriate by Pan+T.+Hose · · Score: 2, Interesting

    Who's Poice? And isn't this name a bit inappropriate?

    There is nothing inappropriate in poicephalus as e.g. poicephalus gulielmi is just a Latin name of Red-fronted Parrot, well known for every bird lover, just like agapornis pullarius is a Latin name of Red-headed Lovebird, another proposed code-name for this release. You are probably thinking about phallus for some reason but instead of looking for Freudian connotations you might want to read more about parrots.

    --
    Sincerely,
    Pan Tarhei Hosé, PhD.
    "Homo sum et cogito ergo odi profanum vulgus et libido."
  26. PHP support coming too by 1110110001 · · Score: 2, Interesting

    Sterling Hughes and Thies Arntzen are working on getting PHP to parrot with their project Pint. They want some stuff in PHP and parrot would fit perfectly, but havin access to modules from perl or pythong is a nice extra bonus.

    b4n

  27. Re:WTF is this? by eidechse · · Score: 5, Informative
    Strong typing sucks.

    This is NOT a strong vs weak typing thing. This is a static vs dynamic typing thing. The strength of a type system has no relation to when it's enforced.

    You can have all combinations:
    • strong/static (e.g. Java)
    • strong/dynamic (e.g. Python)
    • weak/static (e.g. C)
    • weak/dynamic (e.g. Perl)
  28. Re:WTF is this? by miguel · · Score: 2, Interesting

    A few comments: .NET did exist when Parrot was announced, and more
    importantly the work to turn .NET into an ECMA
    standard had started way before this. .NET is designed for compiled languages as much
    as the x86 is designed for compiled languages
    (in fact the x86 is strongly typed and knows about
    two types: ints and floats, nothing else).

    So anyways, for those who can see further than
    the end of their noses, .NET provides a lot of
    sugar for strongly typed OO languages, but it
    requires a strong effort to be as naive to think
    that dynamic languages are not supported.

    In any case, IronPython has demostrated that .NET can execute dynamic Python code as fast or
    faster than the Python interpreter itself.

    So those two stated reasons for Parrot are rubbish.

    On the other hand, its perfectly fine to say
    `We wanted to do something different' or `we
    wanted to do our own thing'. Nothing wrong with
    that.

    Miguel.

  29. Re:WTF is this? by Raffaello · · Score: 2, Informative

    I would be very interested to see an example of a real-world application where unpredictable user inputs can demonstrably render static type-checking useless, or where static type-checking makes a real-world application significantly harder to write. Because I sure can't think of one.

    Static type checking is still useful for those portions of the program that are, well, static. Any part of the program that deals only with data that is known at compile time, can benefit from static type checking. For example, if your menus are not dynamic (their content does not change) then that portion of your code can benefit from static type checking, etc.

    But by far the more difficult bit is dealing with data that isn't known at compile time. Let's take the same example. What if I have a menu item that lists the names of recently opened files with their full path - say in a File menu. However, the menu drawing code I use assumes that all menu items are less than a certain number of characters. There is absolutely no way that I as a programmer can know at compile time whether the type of that file path will be stringLessThan64Characters, or whatever the limit is. I must do a run time check of the data, and respond accordingly. The benefits of compile time type checking are lost for this portion of the code, because it is interactive. The nature of the data that my algorithms will be dealing with cannot be known at compile time because it is determined by user input.

    This issue is multiplied in the sequences of user mouse and keyboard actions in, for example, a graphics program. The user can cut/paste/drag/drop/copy-drag etc. At each juncture, my code must check the nature of the data to assure that it can be handled by my algorithms. Static type checking here becomes of little utility. I end up with much of my data being of type "Untyped" and so, it must be type checked repeatedly at run time.

    Note that this need to do run time type checking is unavoidable not only in practice but in principle. There is simply no way to know what the type of the data generated by a complex series of user actions will be. Remember that type in this sense is strict, and includes such things as data size and dimensions, not just the underlying primitive type of which it is made. It is not enough to know that I'm getting a slew of bytes, I must know that they are well formed wrt my application's algorithms, and that they are of the right range of size.

    Now add to this multiple user interactions across the network, and realize that by far your most important task with regard to type checking is not the ivory tower theoretical exercise of type inference, but the very real world task of checking each and every piece of data that the users throw at your code, and the results of combinations of such user inputs that you may not have originally predicted ("Oh, it never occurred to me that the user would select that menu item, click this radio button, type in such -and-such and then click this other unrelated button").

    The more interactive a piece of software is, the more choices the user has, the greater the use of network connectivity, the more the need for run time type checking. Since I'm doing all of these run time type checks, not because I want to, but because I have to I might as well use a language that is designed on the basis of run time type checking. I simply define the necessary constrained types I need, and throw an execption/condition when one of my functions/methods is called with the wrong type, as determined at run time.

    The future belongs to interactive software, and interactive software demands run time type checking. It follows that the future belongs to languages that are dynamically typed.