From: Stefan Behnel on
sturlamolden, 04.07.2010 21:44:
> On 4 Jul, 19:51, Stefan Behnel wrote:
>> Ok, so, which of those do you care about?
>
> I have already said I don't care about unladen swallow.

What I meant, was: which of these benchmarks would have to be better to
make you care? Because your decision not to care seems to be based on
exactly these benchmarks.

Stefan

From: Luis M. González on
On Jul 4, 4:51 pm, Luis M. González <luis...(a)gmail.com> wrote:
> On Jul 4, 12:30 am, sturlamolden <sturlamol...(a)yahoo.no> wrote:
>
>
>
>
>
> > I was just looking at Debian's benchmarks. It seems LuaJIT is now (on
> > median) beating Intel Fortran!
>
> > C (gcc) is running the benchmarks faster by less than a factor of two.
> > Consider that Lua is a dynamically typed scripting language very
> > similar to Python.
>
> > LuaJIT also runs the benchmarks faster than Java 6 server, OCaml, and
> > SBCL.
>
> > I know it's "just a benchmark" but this has to count as insanely
> > impressive. Beating Intel Fortran with a dynamic scripting language,
> > how is that even possible? And what about all those arguments that
> > dynamic languages "have to be slow"?
>
> > If this keeps up we'll need a Python to Lua bytecode compiler very
> > soon. And LuaJIT 2 is rumoured to be much faster than the current...
>
> > Looking at median runtimes, here is what I got:
>
> >    gcc               1.10
>
> >    LuaJIT            1.96
>
> >    Java 6 -server    2.13
> >    Intel Fortran     2.18
> >    OCaml             3.41
> >    SBCL              3.66
>
> >    JavaScript V8     7.57
>
> >    PyPy             31.5
> >    CPython          64.6
> >    Perl             67.2
> >    Ruby 1.9         71.1
>
> > The only comfort for CPython is that Ruby and Perl did even worse.
>
> You should read this thread:http://lambda-the-ultimate.org/node/3851
> There, you'll see this subject discussed and explained at length.
> Pay special attention to Mike Pall's comments (he is the creator of
> Luajit) and his opinion about python and pypy.
> You will read also about other projects, specially new javascript
> engines such as Mozila's Tracemonkey (the authors participate in this
> thread) and the pypy folks.
> It is a very good read for anyone interested in the subject. Very
> recommended!
> Good luck!
>
> Luis

To be more specific, check these comments on the above the above
suggested thread:
http://lambda-the-ultimate.org/node/3851#comment-57804
http://lambda-the-ultimate.org/node/3851#comment-57700

Luis
From: Stephen Hansen on
On 7/4/10 9:21 AM, sturlamolden wrote:
> On 4 Jul, 14:29, David Cournapeau <courn...(a)gmail.com> wrote:
>
>> Actually, I think the main reason why Lua is much faster than other
>> dynamic languages is its size. The language is small. You don't list,
>> dict, tuples, etc...
>
> They have managed to combine list and dict into one type (table) that
> does the job of both.

You say "managed" as if it were some technical accomplishment, or that
the result is able to actually do the job of both: neither of these
assertions are true.

Have you actually *used* Lua? I quite like the language in certain
contexts where its appropriate, but if you've actually used it in real
code and found tables to be at all a substitute for *either*
dictionaries *or* lists, then I think somehow you've managed to actually
miss using either data structure in Python to any real extent, somehow.

Lua's tables are at very weak "dictionary-like" and "list-like" objects,
which indeed have been folded into one. To the detriment of both, at
least as far as they are an actual useful data structure.

You can't even get the equivalent of len(dict) in it: you have to
actually brute-force iterate the table and count manually. Even for a
purely array-like table with onlyn umbered indexes, #table can be
unreliable: its quite possible through normal list-like operations that
you perform on it, it can end up with holes where #table will fail.
Since it is *not* an list internally at *all*, but simply an associative
array with numbered indexes.

I could go on, and on, and on: but the fundamental *weakness* of Lua'
data types as data-structures is irrefutable, from its tables to strings
to numbers: they are incredibly weak on capabilities. You end up writing
all kinds of "library" functions to just do the normal things that
should be really easy to do.

Now, of course, there's really good reason why Lua is so simple in these
ways. Its entirely suitable for Lua as an embedded scripting language to
keep things very light, so it can be simple and fast. Good for Lua to
fill this niche superbly. But you can't start saying its simple
alternatives are at all comparable to Python's extremely rich and
capable data types.

> And yes there are tuples.

No, there isn't. There's ways to create a tuple-like-thing which kind of
behaves like a braindead tuple, and functions have a positively bizarre
capability of returning more then one value (and accepting variable
values), so there's these points in the language where you have this
sort of Immutable Sequence, but its opaque until you unwrap it -- and
then it ceases to be.

That's not the same thing as having an immutable sequence that you can
store data in at your discretion, with a rich series of capabilities
that you can leverage.

> There are no classes, but there are closures and other building blocks
> that can be used to create any object-oriented type system

Not really.

Above, I spoke of tables as data structures, things just storing data.
But you're right, they are capable of more then that-- but you're
over-selling just how far that capability goes, by a long shot (and
underselling just how much work it takes to get it there).

Yes, tables have a limited series of 'hooks' that you can tie into to
alter their behavior, and through this you can simulate certain higher
order type systems as defined in other languages. In fact, lots of
people have done this: there's multiple "classy" libraries out there to
bring some kind of Class-or-Object-Oriented-Programming to Lua.

They work to varying degrees: but the hooks that Lua provides to tables
is still significantly lacking to really replace Python's
comprehensively dynamic object model, without a LOT of wasted cycles.

For example, while you can use __newindex to 'catch' someone setting a
new 'key' on a table, and and __index to replace or forward the actual
lookup, you can't actually capture someone trying to set a value to a
key which already exists. So, you end up having to do a full proxy
approach, where your table never actually stores anything directly
(except a reference to another hidden table), and so when someone goes
to set something you have to set it on the proxied object instead.
Because you can't let there ever be any real keys on the proxying /
external table.

So you're able to work around its lack a bit, to simulate something
/like/ what it means to have __setattr__.

But then you run into problems. There's no way now to iterate over the
table now, because pairs() will only return your internal hidden keys
that you're using to point to the proxied table (Although you can get
around this with some more complexity by hiding said key into a
closure-- but even then, you still can't iterate over the proxied
table's keys instead).

So what do you do? Well you go replace the global "pairs" function,
that's what you do! So it learns your particular style of Classness, and
interacts well. Hope you never use any third-party code which has even a
vaguely different kind of Classness. Alternately, you can just decide to
never use the standard idiom of iteration for your classes, and instead
one must always "for x in my_table:iter()" -- so now you have one kind
of code operating on 'real' tables, and a totally different kind
operating on your 'classy tables'.

And on and on. The point is, sure. Lua can sort of simulate different
OOP approaches, and Lua-folk are very adept at tweaking, twisting,
turning and ripping tables into all kinds of pseudo-data types that
match other paradigms, but its all hacks on top of hacks on top of
hacks. You end up with some *really* weird and/or messy code if you try.

Better to do Lua in Lua, instead of Python in Lua, or Java in Lua.

(just like
> CLOS is defined by Lisp, not a part of the basic Lisp syntax). So I
> imagine it would be possible to define an equivalent to the Python
> type system in Lua, and compile Python to Lua. Lua can be compiled to
> Lua byte code. Factoring Lua, out that means we should be able to
> compile Python to Lua byte code.
>
>
>
>


--

Stephen Hansen
... Also: Ixokai
... Mail: me+list/python (AT) ixokai (DOT) io
... Blog: http://meh.ixokai.io/

From: Luis M. González on
On Jul 4, 5:58 pm, John Nagle <na...(a)animats.com> wrote:

>     TheUnladenSwallowpeople should in theory be able to reach
> that level of performance.  (Both groups are employed at Google.
> So their effectiveness will be compared.)
>
>                                 John Nagle

No. Collin Winter said that they will never be as fast as Chrome's V8
or similar JS engines,
since they were created from scratch to be super fast above all else.
On the other hand, US is a project to enhance an existing interpreter,
carrying a lot of the burden of early design decisions.
From: sturlamolden on
On 4 Jul, 21:59, Stefan Behnel <stefan...(a)behnel.de> wrote:

> > I have already said I don't care about unladen swallow.
>
> What I meant, was: which of these benchmarks would have to be better to
> make you care? Because your decision not to care seems to be based on
> exactly these benchmarks.

Those are the only one I've seen.