13 ms·
Announcing Topaz: A New Ruby
- Pewpewarrows 14y agoCompletely unscientific, but if these outputs are any indication, this is going to be great news for Rubby users in the future... $ time ruby -e "puts 'hello world'" hello world real 0m0.184s user 0m0.079s sys 0m0.092s $ time ~/Downloads/topaz/bin/topaz -e "puts 'hello world'" hello world real 0m0.007s user 0m0.002s sys 0m0.004s
- deleted 14y ago[deleted]
- kingkilr 14y agoTopaz doesn't run rails yet (as far as I know, I didn't even dare to try!), so I doubt you'll find any benchmarks ;) There is one benchmark in the bench/ directory of the repository you can try though!
- fusiongyro 14y agoInstead of asking, you could read the linked article, which itself says it isn't complete enough to run Rails yet.
- eranation 14y agoImpressive, how does it compare to JRuby?
- andrewaylett 14y agoThat's probably not a fair test to use on JRuby, as the JVM is notoriously slow to start.
- JoshTriplett 14y agoThat doesn't make it unfair to JRuby, it just means JRuby will probably lose that benchmark. :)
- nirvdrum 14y agoIf the goal is to benchmark Ruby execution time, it's unfair. The slow startup time is a valid concern when considering short-lived sessions, but it's kind of meaningless when trying to benchmark a Ruby implementation.
- fleitz 14y agoThere are no 'fair' benchmarks, all benchmarks should be biased to the problem you're actually solving running your actual workload. If you can't replay your workload at multiples of real volume then you should probably work on doing that before benchmarking as it helps you out with the real problem of verifying your infrastructure. In general a benchmark is probably the worst metric you could ever use for deciding on an implementation. Unless the profit margin of your business is razor thin and dependant eeking out every last drop of performance, and even then most of those gains will be from extremely small sections of code that are probably best written in assembler by a programming God, and you should investigate FPGAs, ASICs, and other high performance solutions. If your benchmark (infrastructure) involves a database (or anything that uses disks) that's probably going to be the problem long before the speed of your language / language implementation.
- nirvdrum 14y agoI don't even know where to begin with this. In all comparisons, you should remove confounding variables. Yes, you should benchmark something you actually care about, otherwise what's the point? That doesn't mean all other variables are immediately null and void. That's why I said said if your goal is to measure ruby execution time, you should remove startup time. As for the practice of benchmarking in general, you're partially right. Micro-benchmarks are usually useless because they don't map to real work load. But profiling and speeding up small portions that are used heavily can have drastic improvements that in isolation seem small -- the death by a thousand cuts problem. Not all improvements come from isolated instances with very slow performance profiles. This fallacy about DB access and not needing to optimize really needs to go away though. Even if 50% of your app is spent hitting DB, you have opportunity to speed up the other 50% and it's likely far easier. Ruby in particular is ripe for improvements on the CPU side. I managed to reduce my entire test suite time by 30% by speeding up psych. I managed to cut the number of servers I need in EC2 in half by switching from MRI, Pasenger, and resque to JRuby, TorqueBox, and Sidekiq. And I've managed to speed up my page rendering time anywhere from 8 - 40x by switching from haml to slim. None of these changes required modifications to my DB, none required me to write assembly, none required me to switch to custom-built hardware, and each helped reduce the expenses for my bootstrapped startup, while improving the overall experience for my customers.
- deleted 14y ago[deleted]
- deleted 14y ago[deleted]
- fijal 14y agothe idea was to implement enough of "hard stuff". So it should not change. but hello world is not a good idea (this one also might actually change due to library loading, but please don't benchmark it like that)
- jtanderson 14y agoMakes sense. I wasn't claiming any "absolute" benchmark, of course, just pointing out that real benchmarks should wait until the implementation is more complete.
- fijal 14y agoin other words - if you can run it today, you should believe numbers. if you cannot run it, then well, you cannot.
- stcredzero 14y ago> the lack of many core features probably helps out a lot atm. I don't understand why the lack of features would affect the time of "hello world."
- ephemeralgomi 14y agoLoading the standard library takes time. With a smaller (underimplemented) standard library, you can get to the user's code much more quickly.
- stcredzero 14y agoPerl 5 had an in-memory footprint of about 768k. VisualWorks Smalltalk had a standard one of 12MB, yet loaded and started it faster than Perl did with 768k. If just your standard library takes very long at all to load, something needs attention.
- seivan 14y agoTry comparing with Rubinius
- Cowen 14y agoWhenever I see frontpages for these kinds of projects like "a faster X" or "X written in Blub", the first thing I want to see on the frontpage is how this new project compares to X in terms of quality and performance. Even specious benchmarks would help more than zero benchmarks. I wish more frontpages for these kinds of projects would do that.
- pyre 14y agoIf they put that on their frontpage, there would be at least 20 posts on here bashing them for it because they didn't get it right (or just accusing them of outright lying/incompetence).
- callum85 14y ago"Even specious benchmarks would help more than zero benchmarks." I disagree. Zero benchmarks is definitely better than specious benchmarks.
- Cowen 14y agoTo clarify, I was trying to use "specious" as a synonym of "flawed." I thought this was the common usage, but apparently not. As to your point, obviously no one should be making any decisions off of flawed benchmarks, but flawed benchmarks (not so far as outright lies, just flawed) at least give me an objective justification to investigate further. Even some flawed benchmarks could help turn the initial tide of responses like "this is X written in Blub, it's bound to be better!" or "this is a faster X! Now everything will be twice as fast!" They're silly examples, but it seems like every time a new technology comes out, these are the kinds of knee-jerk, overly-optimistic reactions people tend to have.
- kenko 14y ago" To clarify, I was trying to use "specious" as a synonym of "flawed." I thought this was the common usage, but apparently not." "Specious" does mean, more or less, flawed. Zero benchmarks are better than flawed benchmarks.
- draegtun 14y agoTo scratch a quick interesting thought that came into my head I just had a look at Cardinal, which is a Ruby implementation running on the Parrot VM - https://github.com/parrot/cardinal https://github.com/parrot/cardinal So downloaded & built Cardinal (which went seamlessly however I did have Parrot already installed) then I did same benchmarks alongside ruby1.8 here: $ time ruby -e "puts 'hello world'" hello world real 0m0.130s user 0m0.049s sys 0m0.071s $ time parrot-cardinal -e "puts 'hello world'" hello world real 0m0.057s user 0m0.037s sys 0m0.019s Very interesting because I thought Cardinal was supposed to be slow! I think more diverse benchmarks are required. And when time permitting I might add Topaz & ruby1.9 into the mix.
- grn 14y agoIn order to eliminate the potential bias of startup time I run similar test in many iterations. Here's what I got: $ time ruby -e "10000.times { puts 'hello world' }" > /dev/null real 0m0.102s user 0m0.096s sys 0m0.005s and $ time ./topaz -e "10000.times { puts 'hello world' }" > /dev/null real 0m0.098s user 0m0.071s sys 0m0.026s Any idea why I don't see such big difference?
- emillon 14y agoThe overhead of starting the interpreter must be longer that executing the loop.
- fijal 14y agotopaz probably has a pretty slow IO (for bad reasons, it's an RPython problem)
- fernandezpablo 14y agowhat is your 'ruby'?
- onedognight 14y agoGood question. How many shells is rbenv/rvm executing? Do you get similar results with an absolute path?
- grn 14y agoruby that comes with Debian Squeeze. $ ruby --version ruby 1.8.7 (2010-08-16 patchlevel 302) [i486-linux]
- duaneb 14y agoBecause the majority of the cycles ran are probably in 'puts', which is implemented in C if I were to guess.
- rbehrends 14y agoBecause a puts loop is I/O bound, not CPU bound.
- raphael_kimmig 14y agoThere is a neural net example benchmark in the topaz git repo. Don't know how representative that example is, but at least startup time shouldn't be dominating the results... $ ruby -v ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.3.0] $ ruby bench_neural_net.rb ruby bench_neural_net.rb 17,74s user 0,02s system 99% cpu 17,771 total $ bin/topaz bench_neural_net.rb bin/topaz bench_neural_net.rb 3,43s user 0,03s system 99% cpu 3,466 total
- ErikRogneby 14y agoshould be able to run any number of ruby examples from here: http://benchmarksgame.alioth.debian.org/u32/ruby.php http://benchmarksgame.alioth.debian.org/u32/ruby.php
- snissn 14y ago$ time ruby -e "puts 'hello world'" The program 'ruby' can be found in the following packages: * ruby1.8 * ruby1.9.1 Ask your administrator to install one of them real 0m0.060s user 0m0.040s sys 0m0.016s
- axomhacker 14y agoDon't know if you are trolling. But if this is genuine: this is rbenv telling you that you have multiple rubies installed. 1. Pick one (just for this session): $ rbenv shell ruby1.9.1 2. And then run the example. By the way 1.9.1 is really old already, 1.9.3 has a lot more bug fixes.
- alrs 14y agoruby1.9.1 on Debian isn't ruby 1.9.1. The Ruby language changed between 1.9 and 1.9.1, so a new package name had to be created. If 1.9.1 was just called "1.9" it would break all of the packages in Debian that depend on whatever language features were different between 1.9 and 1.9.1. "ruby1.9.1" in Debian 7.0 provides version 1.9.3.194.
- axomhacker 14y agoThe OP's output looked more like rbenv's output though, right? How did you figure that to be debian's message?
- haven 14y agoExpanding on the concept of entirely unscientific benchmarks, I benched some simple prime number math with Topaz, Ruby, JRuby and RBX. Looks promising for Topaz! https://gist.github.com/havenwood/4724778 https://gist.github.com/havenwood/4724778
- deleted 14y ago[deleted]
- pserwylo 14y agoYou should check out a tool I heard about recently called "ministat". An example of how to use it to benchmark multiple runs, and then compute the statistics from each run are available here: http://anholt.net/compare-perf/ http://anholt.net/compare-perf/ Example output: +------------------------------------------------------------------------------+ | + x | | + x | | + + x x x | | + ++ +++ + x xxx xx x | |++ ++++++++++++++++++ x x x xxx xxx xxxxx | |++ ++++++++++++++++++ +++ + ++ xxxxxxxxxx xxxxxxxxxxxxxxxx xx x xx| | |______MA______| |________A________| | +------------------------------------------------------------------------------+ N Min Max Median Avg Stddev x 57 45.62364 46.437353 45.93506 45.951554 0.19060973 + 57 44.785579 45.534727 45.042576 45.056702 0.16634531 Difference at 95.0% confidence -0.894852 +/- 0.0656777 -1.94738% +/- 0.142928% (Student's t, pooled s = 0.178889)
- charliesome 14y agoHow the hell is your Ruby that slow to start? $ time ruby -e "puts 'hello world'" hello world real 0m0.011s user 0m0.008s sys 0m0.003s
- d33pika 14y agoThe first time I ran: time ruby -e "puts 'hello world'" hello world real 0m0.221s user 0m0.005s sys 0m0.006s subsequent times: time ruby -e "puts 'hello world'" hello world real 0m0.008s user 0m0.005s sys 0m0.003s So, I guess he ran ruby first followed by topaz and ended up with those results
- rmoriz 14y agoWhy not implemented on Erlang OTP? Ruby and Python share the same scaling issues, so I don't see a benefit it combining them or migrate from one to the other. I also dislike the "high performance" claims without showing a single performance comparison. Not to mention the state of implementation completeness of the language.
- mumphster 14y agoWhat does that have to do with the article?
- Argorak 14y agoIts implemented on top of RPython, which is something completely different then Python, the runtime.
- rmoriz 14y agoNo it's not. Technically speaking yes, but without Python there would be no RPython. In other words you're betting on three language/vm communities: Ruby language, Python (RPython!), LLVM (iirc). I don't believe introducing a lot more dependencies and complexities will cure any problem. Sure, it's a nice project and the work shows the great skills of the developer. But it's not practical to use this besides some non-crictical fun projects.
- dochtman 14y agoPretty sure LLVM has nothing to do with this, it's not currently used in PyPy. (Also, LLVM is not a language...)
- Argorak 14y agoYes, but betting on Python is the whole point of PyPy. The idea is to build a toolchain using a relatively high-level programming language like RPython to build new languages. As far as I understood is that this allows for low-level concepts to be changed more easily, while low-level implementations always suffer from basic decisions (e.g. you will never get reference-counting out of CPython, while you might be free in to change that in an RPython-implemented language). So, the entire point of PyPy is being able to implement other high-level languages in RPython, so an attempt to implement Ruby is definitely very interesting! Also, the resulting binary is not depending on Python whatsoever.
- nlh 14y agoForgive me for asking what may be a very stupid question: Can someone explain to me the need for a Ruby interpreter built on top of Python? He mentions performance in the announcement, but is this really going to be faster than, say, MRI? Thanks in advance.
- ConstantineXVI 14y agoIt's not vanilla Python but RPython, and presumably to take advantage of the PyPy toolchain to get similar results in Ruby as PyPy has in Python.
- dochtman 14y agoYes, because it's actually implemented on top of PyPy, which is a very modern run-time with a state-of-the-art JIT and good garbage collectors.
- pyre 14y agoRPython is a subset of Python that is used to build PyPy. If you want more information on it, I would do some reading on the structure of PyPy. To be clear, this isn't "Ruby running on top of Python." This is "Ruby specified in RPython."
- llimllib 14y agoThink of Pypy as somewhat like LLVM, except the language it's built on is a subset of the python language, called RPython. Although the most well-known language implemented in the pypy "vm" is python, the toolchain is completely language agnostic. So, this is more akin to Apple writing a C interpreter on top of llvm than it is to building a ruby interpreter on top of python.
- fijal 14y agoPyPy is totally not like LLVM in many regards. It targets a very different demographics. Some differences: * RPython comes with a good garbage collector * the language where you specify what's going on is RPython in which you write an interpreter. Then you get a JIT using a few hints. This is difference than "interpreter in C + compiler to LLVM" scenario by quite a bit. * RPython comes with a set of data structures that are higher level (lists, dicts, etc.) and is a GCed language. JIT is also well aware of those.
- andrewgodwin 14y agoI'm curious to see how this compares to MRI/Rubinius/JRuby once it's feature-complete; the PyPy vs. CPython benchmarks these days are pretty convincing.
- kingkilr 14y agoOne of the major launch criterion was having "enough of Ruby that the performance won't change". What does that mean in practice? We have exceptions, we have bindings, and we have all manner of other obscure corner cases. Charles Nutter (JRuby dev) writes about this: http://blog.headius.com/2012/10/so-you-want-to-optimize-ruby.html http://blog.headius.com/2012/10/so-you-want-to-optimize-ruby...
- steeve 14y agoSo Ruby on top of RPython on top of PyPy? Why not, but how does it compare to JRuby and Rubinius?
- rayiner 14y agoNot really. RPython is a statically-typed language which is used to implement PyPy's virtual machine framework. PyPy is itself a Python VM built on top of that framework, but the framework is designed to be reusable. So Topaz is a Ruby VM using that same virtual machine framework.
- masklinn 14y ago> So Ruby on top of RPython on top of PyPy? No. It's Ruby in RPython, where PyPy is Python in RPython. The pypy project is currently in the process of splitting "RPython" (the VM-development framework) from PyPy (the Python VM) to make that clearer. RPython is a general purpose, language-agnostic (ish?) core for implementing JIT-ed garbage-collected languages, it's kind-of similar to LLVM being a framework for implementing compilers. (now because rpython is a proper subset of python you can run your rpython VM on a python interpreter without translation, but that doesn't give you any specific python bridge, in the same way coding your VM in C doesn't give you a c FFI for free)
- fijal 14y agoRPython is generally language-agnostic, although dynamic langauges are much better suited for this sort of transformations. So it makes sense for any kind of dynamic language (like prolog even), but makes less sense for say Java or C.
- kzrdude 14y agoBut RPython used to be the reduced version of the Python language. What name do you give to the jit-compiler generator?
- masklinn 14y agoThe same, as far as I've seen. RPython is both the VM-framework and the Python subset which exists within (and for) that framework (RPython is not considered and developed as a general purpose language, but as a language for building VMs within the RPython system/framework/toolset). The important distinction really is between RPython (a language and framework for building virtual machines) and PyPy (a virtual machine implemented in/on RPython)
- peteretep 14y agoTopaz as a name? Seriously? (http://topaz.sourceforge.net/ http://topaz.sourceforge.net/)
- Pewpewarrows 14y agoIt's impossible and immoral to have two projects with the same name. How dare they.
- aidos 14y agoWell maybe, but from the outside they look like really similar projects (just different languages).
- lukeman 14y agoLast modified in April of 2000. Y'know, back when we used Perl willingly.
- protothomas 14y agoThe link goes to a project last committed to in 2000. You surely can't be objecting for that reason.
- veemjeem 14y agoI find it odd that you link to a project that hasn't seen an update in the last 12 years. How old does a project have to be before it is considered "dead"?
- bryanlarsen 14y agoThe project is certainly dead, but it's also historically significant.
- deleted 14y ago[deleted]
- kzrdude 14y agoNames are not unique.
- blissofbeing 14y agoSweet, I'm very interested in this. I assume this implementation has a GIL? Any word on how threads will be implemented?
- kingkilr 14y agoNo GIL. Also no threads yet :) We're going to wait to see how Armin's work on STM support pans out.
- draegtun 14y agoFor those with long memories there was a (in)famous Topaz project in the Perl world. This was an attempt to implement perl5 in c++. It was abandoned however it did help kick-start Perl6 & Parrot. refs: - http://topaz.sourceforge.net http://topaz.sourceforge.net - Topaz: Perl for the 22nd Century http://www.perl.com/pub/1999/09/topaz.html http://www.perl.com/pub/1999/09/topaz.html - Historical Implementations/Perl6 http://www.perlfoundation.org/perl6/index.cgi?historical_implementations http://www.perlfoundation.org/perl6/index.cgi?historical_imp...
- vidarh 14y agoI'm all for new Ruby implementations, but be very careful about judging performance of an incomplete implementation. It's "trivial" to make a fast language that looks quite a bit like Ruby. It is a lot harder that make a language that remains fast in the face of handling all the quirks of the full Ruby semantics, though, such as selectively handling the risk of someone going bananas with monkey-patching core classes that could happen at any "eval()" point.
- llimllib 14y ago1) Note that the post doesn't sell its speed; all it says is that they are interested in a high-performance Ruby 2) Python is a very similar language to Ruby, and Pypy already runs python very rapidly. This doesn't guarantee that the Ruby interpreter will be anywhere near as fast, of course, but it does give evidence that it's possible. 3) As kingkilr notes below, they've taken into account your argument and they believe they've implemented enough of the language to be confident that they can run it rapidly. No reason you need to believe him, but it's worth listening to.
- kingkilr 14y agoWhat you just wrote is exactly what I've been telling people about every new "Python" implementation for the last 3 years. Believe me, I understand this argument completely, that's why I made sure we had all the hard bits (monkey patching core classes, eval, etc.) before I released this.
- 14y ago
- DaNmarner 14y agoRPython is the new C?
- fijal 14y agoAbsolutely not. RPython is a language to write dynamic languages virtual machines. That's a much less broad scope than C aims at (and achieves).
- luckystarr 14y agoIn addition to fijal's comment: I also heard somewhere that RPython is a) not strictly specified and b) may change when needed without notice. So I would stay clear of it. :)
- fijal 14y agowe removed that from the docs, it's kinda stable by now (but it's still an atrocious language to use, just beats C/C++ for that particular task by a lot)
- luckystarr 14y agoOut of curiosity, whats so atrocious about it? The slow translation step or language idiosyncrasies?
- kingkilr 14y agoSlow compilation, undocumented semantics, and most importantly: atrocious error messages..
- evolve2k 14y agoJust curious, for this project did you set out to write it in idiomatic ruby or idiomatic (R)Python?
- hemancuso 14y agoIt would be nice to see Rpython/pypy turned into a project not unlike WebKit where many different projects benefit from the same open-source core. If pypy is flexible enough to implement all of ruby and all of Python, has a reasonable amount of maturity, and is already rather fast it seems like a good candidate for such a thing.
- aaronblohowiak 14y agohttps://bitbucket.org/cfbolz/pyrolog/ https://bitbucket.org/cfbolz/pyrolog/ https://bitbucket.org/pypy/lang-smalltalk/ https://bitbucket.org/pypy/lang-smalltalk/ https://bitbucket.org/pypy/lang-js/ https://bitbucket.org/pypy/lang-js/ https://bitbucket.org/pypy/lang-scheme/ https://bitbucket.org/pypy/lang-scheme/
- masklinn 14y agohttp://tratt.net/laurie/tech_articles/articles/fast_enough_vms_in_fast_enough_time http://tratt.net/laurie/tech_articles/articles/fast_enough_v... is probably the best example, because — as far as I know — outside of having reimplemented his Converge in RPython Laurence Tratt is not affiliated with the pypy project in any way, shape or form.
- graue 14y agoAmazing link, very clear and well-written description of how PyPy works and great background for understanding this announcement, thanks!
- lloeki 14y agoQuick how-to: 1. (optional) install PyPy "JIT compiler" binaries [0] 2. get and extract the PyPy source[1] from bitbucket release packages, which includes the RPython translator, written itself in Python and, although working on CPython, best run under PyPy as installed on step 1. 3. write a (R)Python module including a def target returning the entry point function[2], and call the translator upon your module, like so: python ./pypy/pypy/translator/goal/translate.py example2.py I wish getting the translator was more 'packaged' and did not involve getting the whole PyPy source but I hear this is in the works, and it is reasonably easy already. The hardest part is actually figuring the translator is not part of PyPy binary release, and that it's available straight from bitbucket. [0]: http://pypy.org/download.html http://pypy.org/download.html [1]: https://bitbucket.org/pypy/pypy/get/release-1.9.tar.bz2 https://bitbucket.org/pypy/pypy/get/release-1.9.tar.bz2 [2]: http://morepypy.blogspot.fr/2011/04/tutorial-writing-interpreter-with-pypy.html http://morepypy.blogspot.fr/2011/04/tutorial-writing-interpr...
- VeejayRampay 14y agoExcellent news. I wish this project the best of luck. More competition in the Ruby implementation field is always a good thing for end users, it fosters innovation and provides choice and a good kick in the ass to everyone.
- hencq 14y agoDoes Topaz benefit at all from the work that's been done already on Rubinius? I seem to recall that Rubinius implements as much of Ruby in Ruby as possible. It seems like this would help Topaz as well in implementing the standard library. Or are the implementations different enough that this doesn't work?
- lobster_johnson 14y agoOne of the things to come out of the Rubinius project is RubySpec, which is pretty much a language spec in unit test form, and which be very useful to test Topaz.
- lucian1900 14y agoAFAIK much of the Rubinius library is independent of VM features (since it was only in C for historical speed reasons), so there should be opportunity for reuse.
- Millennium 14y agoImplementing other languages on top of the PyPy toolchain is an interesting concept, and I'd like to see it happen more often. But calling this "Ruby in Python" is sure to invite flamewars from all sides. The actual Topaz site seems to be careful not to do this, but if this thread is any indication, a fair number of people are already mistakenly calling it that.
- draegtun 14y agoThere are already a few other language implementations on PyPy. For e.g. - Javascript | https://bitbucket.org/pypy/lang-js https://bitbucket.org/pypy/lang-js - Smalltalk | https://bitbucket.org/pypy/lang-smalltalk https://bitbucket.org/pypy/lang-smalltalk - Schema | https://bitbucket.org/pypy/lang-scheme https://bitbucket.org/pypy/lang-scheme - Io | https://bitbucket.org/pypy/lang-io https://bitbucket.org/pypy/lang-io
- masklinn 14y agoTopaz does not, and that's not its point, but technically since RPython is still Python Topaz is indeed a Ruby interpreter in Python. Although a very slow one. Hence the final two lines of the readme: > To run Topaz directly on top of Python you can do: > $ python -m topaz /path/to/file.rb
- lost-theory 14y agoI will be the first to ask: why did Alex / the pypy devs start this project? I thought the three community funded ideas were great (STM, Python 3, and Numpy). What prompted this new project? Is it meant to attract new developers to pypy as platform for implementing languages? Is it a side project? Is it a long term project meant to become the premium implementation of ruby as pypy is becoming for python? Etc. Not criticizing at all by the way, just curious about the motivation / background / context for the project, which is missing from the docs.
- kingkilr 14y agoHi to be clear, this is project undetaken by me (Alex) independently, it wasn't funded out of the PyPy funds or anything like that. There were 3 primary motivations: a) Because it's fun b) To prove RPython is a great platform c) To mess with people's heads, it's crazy!
- lloeki 14y agoHey Alex, let me tell you I completely understand points a) b) c) and more. It seems we started our competing Ruby on PyPy implementations at about the same time [0]! My goal was to build a robust and documented Ruby parser, and hope PyPy make it magically fast. To that end I embedded PLY and modified it to not require kwargs. Then a thunder of work fell from the skies, and I was just recently unearthing PyPy 1.9 to put the thing back on track. Congratulations for the release :-) [0]: $ ls -l playground/pypy total 29160 drwxr-xr-x 12 lloeki staff 408 18 Feb 2011 ply-3.4 drwxr-xr-x 15 lloeki staff 510 3 Apr 2012 pyby drwxr-xr-x 23 lloeki staff 782 27 Mar 2012 pypy-pypy-2346207d9946 drwxr-xr-x 18 lloeki staff 612 27 Mar 2012 pypy-tutorial -rw-r--r-- 1 lloeki staff 14927806 27 Mar 2012 release-1.8.tar.bz2 drwxr-xr-x 10 lloeki staff 340 3 Apr 2012 unholy
- lloeki 14y agoHoly snakes[0]. It seems you pursued the exact same approach[1] as me :-) [0]: https://github.com/topazproject/topaz/blob/master/topaz/lexer.py#L6 https://github.com/topazproject/topaz/blob/master/topaz/lexe... [1]: https://github.com/alex/rply https://github.com/alex/rply
- semanticart 14y agoI'm probably in the minority but I would love to see a dialect of ruby that has significant whitespace. Death to unnecessary 'end's
- vidarh 14y agoSignificant whitespace in Python was a significant factor in my decision to get proficient in Ruby over Python. Yes, I hate it that much, and I know quite a few Ruby devs with similar views...
- semanticart 14y agoHere's how I look at it: I indent my code properly and my team does the same. If we're already doing the right thing where whitespace is concerned, why not reap some benefits from it? Of course, I also use Coffeescript and Haml...
- jamesbritt 14y agoOf course, I also use Coffeescript and Haml... I'm curious: why not use Python then as well?
- chrismsnz 14y agoHe's saying that him and his team indent their code correctly anyway, so it might as well be significant
- jamesbritt 14y agoI'm asking if someone wants a language like Ruby but with significant white-space why not use Python?
- chrismsnz 14y agoI'm pretty sure his comment is indicating he _does_ use Python and that is his take on the "significant whitespace" issue.
- tonycoco 14y agoI mean, it's cool that people want to expose Python's version of Rubinius as a building block to yet another Ruby interpeter, but, come on. Why is this a thing?! Why not waste time improving the JVM, contributing to Rubinius, patch the MRI, or a million other open source projects already tackling Ruby being "slow". By the way, has anyone else realized that, while Ruby is slow, computers are getting faster for us too!
- thegrubbsian 14y agoThis is the most ridiculous thing I've seen in a while. You know what nobody ever asked for? Answer: Ruby running on Python. The only advantage I see here is being able to access some of the Python scientific and mathematical libraries but at that point just freaking use Python. Perhaps this time would have been better spent improving MRI or even JRuby or porting the desired Python libs to Ruby.
- stcredzero 14y ago> Ruby running on Python That isn't what it is. Either you don't have the technical chops to understand, or you didn't read, or both.
- fuzzyman 14y agoIt's Ruby in RPython, the implementation language of the PyPy VM toolchain. It has nothing to do with integrating with Python. It's an alternative Ruby VM using a proven JIT generator technology that happens to be built with a Python-like language. Hope that helps.
- amalag 14y agohttp://blog.headius.com/2009/04/how-jruby-makes-ruby-fast.html http://blog.headius.com/2009/04/how-jruby-makes-ruby-fast.ht... At least once a year there's a maelstrom of posts about a new Ruby implementation with stellar numbers. These numbers are usually based on very early experimental code, and they are rarely accompanied by information on compatibility. And of course we love to see crazy performance numbers, so many of us eat this stuff up.
- acdha 14y agoGiven that the original article thanks the author of that post (Charles Nutter) by name, I think it's likely that Alex is aware of it.
- nathansobo 14y agoIf it doesn't have all of Ruby's weird features, claims of speed don't matter, because it's those weird features that make Ruby slow and hard to optimize.
- ggchappell 14y agoI've been wondering why the tools the PyPy people have been building are not used to implement more languages. It's nice to see this happening. And it will be interesting to watch where this leads.
- jamesbritt 14y agoAny reason for not targeting Ruby 2.0?
- denysonique 14y agoSounds really interesting, but we already have a dozen of incomplete alternative Ruby implementations...
- sophacles 14y agoCould this lead to a runtime in which I can use really cool ruby modules from python and really cool python modules from ruby? I mean, seriously, these two languages both have some pretty awesome stuff, and regularly I say about one, "man I sure wish I could use $module from the other".
- jrochkind1 14y agoSo... GIL?
- irfn 14y agoDoesnt mention what the current status of topaz is with respect to http://rubyspec.org/ http://rubyspec.org/