Skip to content

Commit 974bf11

Browse files
committed
fix more links
1 parent 9a5143e commit 974bf11

3 files changed

+21
-21
lines changed

posts/2017/10/cape-of-good-hope-for-pypy-hello-from-3656631725712879033.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,6 @@
110110

111111
<br>
112112
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
113-
<tr><td style="text-align: center;"><a href="https://bytebucket.org/pypy/extradoc/raw/extradoc/sprintinfo/cape-town-2017/2017-10-04-155524.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" height="360" src="https://bytebucket.org/pypy/extradoc/raw/extradoc/sprintinfo/cape-town-2017/2017-10-04-155524.jpg" width="640"></a></td></tr>
113+
<tr><td style="text-align: center;"><a href="https://foss.heptapod.net/pypy/extradoc/-/blob/branch/extradoc/sprintinfo/cape-town-2017/2017-10-04-155524.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" height="360" src="https://bytebucket.org/pypy/extradoc/raw/extradoc/sprintinfo/cape-town-2017/2017-10-04-155524.jpg" width="640"></a></td></tr>
114114
<tr><td class="tr-caption" style="text-align: center;">The panorama we looked at instead of staring at cpyext code</td></tr>
115115
</tbody></table></body></html>

posts/2017/10/how-to-make-your-code-80-times-faster-1424098117108093942.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
Generation 4: ... [population = 500] [33.75 secs]
7373
</pre>
7474
Ouch! We are ~5.5x slower than CPython. This was kind of expected: numpy is
75-
based on cpyext, which is infamously slow. (Actually, <a class="reference external" href="https://morepypy.blogspot.it/2017/10/cape-of-good-hope-for-pypy-hello-from.html">we are working on
75+
based on cpyext, which is infamously slow. (Actually, <a class="reference external" href="https://pypy.org/posts/2017/10/cape-of-good-hope-for-pypy-hello-from-3656631725712879033.html">we are working on
7676
that</a> and on the <tt class="docutils literal"><span class="pre">cpyext-avoid-roundtrip</span></tt> branch we are already faster than
7777
CPython, but this will be the subject of another blog post.)<br>
7878
<br>

posts/2018/09/the-first-15-years-of-pypy-3412615975376972020.html

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ <h1><a class="toc-backref" href="#id20">2004-2007: EU-Funding</a></h1>
185185
turned out that those things then have to be implemented, which can be called
186186
the first thing we learned: if you promise something to the EU, you'll have to
187187
actually go do it (After the funding ended, a lot of these features were
188-
actually removed from the project again, at a <a class="reference external" href="https://morepypy.blogspot.com/2007/11/sprint-pictures.html">cleanup sprint</a>).</p>
188+
actually removed from the project again, at a <a class="reference external" href="https://www.pypy.org/posts/2007/11/sprint-pictures.html">cleanup sprint</a>).</p>
189189
</div>
190190

191191

@@ -329,9 +329,9 @@ <h1><a class="toc-backref" href="#id25">Promote</a></h1>
329329
feedback. Runtime feedback is most commonly used to know something about which
330330
concrete types are used by a program in practice. Promote is basically a way to
331331
easily introduce runtime feedback into the JIT produced by the JIT generator.
332-
It's an <a class="reference external" href="https://morepypy.blogspot.com/2011/03/controlling-tracing-of-interpreter-with_15.html">annotation</a> the implementer of a language can use to express their wish
332+
It's an <a class="reference external" href="https://www.pypy.org/posts/2011/03/controlling-tracing-of-interpreter-with_15.html">annotation</a> the implementer of a language can use to express their wish
333333
that specialization should happen at <em>this</em> point. This mechanism can be used to
334-
express <a class="reference external" href="https://morepypy.blogspot.com/2011/03/controlling-tracing-of-interpreter-with_21.html">all kinds of</a> runtime feedback, moving values from the interpreter
334+
express <a class="reference external" href="https://www.pypy.org/posts/2011/03/controlling-tracing-of-interpreter-with_21.html">all kinds of</a> runtime feedback, moving values from the interpreter
335335
into the compiler, whether they be types or other things.</p>
336336
</div>
337337

@@ -387,7 +387,7 @@ <h1><a class="toc-backref" href="#id28">2007: RSqueak and other languages</a></h
387387
machine in RPython, and at the end of the week we'd gotten surprisingly far with
388388
that goal. Basically most of the bytecodes and the Smalltalk object system
389389
worked, we had written an image loader and could run some benchmarks (during the
390-
sprint we also regularly updated a <a class="reference external" href="https://pypysqueak.blogspot.com/">blog</a>, the success of which led us to <a class="reference external" href="https://morepypy.blogspot.com/2007/10/first-post.html">start</a>
390+
sprint we also regularly updated a <a class="reference external" href="https://pypysqueak.blogspot.com/">blog</a>, the success of which led us to <a class="reference external" href="https://www.pypy.org/posts/2007/10/first-post.html">start</a>
391391
the PyPy blog).</p>
392392

393393
<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-n0Xj6fdNu-g/W5UZE-Z0O8I/AAAAAAAAlFM/A61pBvOV-zkIrYZKDTagNbFrm6HxyFbuwCLcBGAs/s1600/bern.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-n0Xj6fdNu-g/W5UZE-Z0O8I/AAAAAAAAlFM/A61pBvOV-zkIrYZKDTagNbFrm6HxyFbuwCLcBGAs/s640/bern.png" width="600"></a></div>
@@ -454,7 +454,7 @@ <h1><a class="toc-backref" href="#id30">2009: Meta-Tracing</a></h1>
454454
observing and logging the execution of the running program. This yields a
455455
straight-line trace of operations, which are then optimized and compiled into
456456
machine code. Of course most tracing systems mostly focus on tracing loops.</p>
457-
<p>As we discovered, it's actually quite simple to <a class="reference external" href="https://morepypy.blogspot.com/2009/03/applying-tracing-jit-to-interpreter.html">apply a tracing JIT to a generic
457+
<p>As we discovered, it's actually quite simple to <a class="reference external" href="https://www.pypy.org/posts/2009/03/applying-tracing-jit-to-interpreter.html">apply a tracing JIT to a generic
458458
interpreter</a>, by not tracing the execution of the user program directly, but by
459459
instead tracing the execution of the interpreter while it is running the user
460460
program (here's the <a class="reference external" href="https://foss.heptapod.net/pypy/extradoc/-/blob/branch/default/default/talk/icooolps2009/bolz-tracing-jit-final.pdf">paper</a> we wrote about this approach).</p>
@@ -497,7 +497,7 @@ <h1><a class="toc-backref" href="#id32">2009-2011: The PyJIT Eurostars Project</
497497
members had other sources of funding). But again, while we did the work it
498498
became clear that to get an actually working fast PyPy with generated JIT we
499499
would need actual funding again for the project. So we applied to the EU again,
500-
this time for a much smaller project with less money, in the <a class="reference external" href="https://morepypy.blogspot.com/2010/12/oh-and-btw-pypy-gets-funding-through.html">Eurostars</a>
500+
this time for a much smaller project with less money, in the <a class="reference external" href="https://www.pypy.org/posts/2010/12/oh-and-btw-pypy-gets-funding-through.html">Eurostars</a>
501501
framework. We got a grant for three participants, <a class="reference external" href="https://merlinux.eu/">merlinux</a>, <a class="reference external" href="https://www.openend.se/">OpenEnd</a> and Uni
502502
Düsseldorf, on the order of a bit more than half a million euro. That money was
503503
specifically for JIT development and JIT testing infrastructure.</p>
@@ -574,7 +574,7 @@ <h1><a class="toc-backref" href="#id36">2010: Implementing Python Objects with M
574574
Javascript objects, in that you can add arbitrary attributes to them at runtime.
575575
Originally Python instances were backed by a dictionary in PyPy, but of course
576576
in practice most instances of the same class have the same set of attribute
577-
names. Therefore we went and implemented <a class="reference external" href="https://morepypy.blogspot.com/2010/11/efficiently-implementing-python-objects.html">Self style maps</a>, which are often
577+
names. Therefore we went and implemented <a class="reference external" href="https://www.pypy.org/posts/2010/11/efficiently-implementing-python-objects.html">Self style maps</a>, which are often
578578
called <a class="reference external" href="https://richardartoul.github.io/jekyll/update/2015/04/26/hidden-classes.html">hidden classes</a> in the JS world to represent instances instead. This
579579
has two big benefits, it allows you to generate much better machine code for
580580
instance attribute access and makes instances use a lot less memory.</p>
@@ -589,7 +589,7 @@ <h1><a class="toc-backref" href="#id37">2011: Container Storage Strategies</a></
589589
observation about how those are used is that in a significant percentage of
590590
cases they contain type-homogeneous data. As an example it's quite common to
591591
have lists of only integers, or lists of only strings. So we changed the list,
592-
dict and set implementations to use something we called <a class="reference external" href="https://morepypy.blogspot.com/2011/10/more-compact-lists-with-list-strategies.html">storage strategies</a>. With
592+
dict and set implementations to use something we called <a class="reference external" href="https://www.pypy.org/posts/2011/10/more-compact-lists-with-list-strategies.html">storage strategies</a>. With
593593
storage strategies these data structures use a more efficient representations if
594594
they contain only primitives of the same type, such as ints, floats, strings.
595595
This makes it possible to store the values without boxing them in the underlying
@@ -626,7 +626,7 @@ <h1><a class="toc-backref" href="#id39">JIT Status 2011</a></h1>
626626
<p>So, here we are at the end of the Eurostars project, what's the status of the JIT? Well, it
627627
seems this meta-tracing stuff really works! We finally started actually
628628
believing in it, when we reached the point in 2010 where self-hosting PyPy was
629-
actually <a class="reference external" href="https://morepypy.blogspot.com/2010/11/snake-which-bites-its-tail-pypy-jitting.html">faster</a> than bootstrapping the VM on CPython. Speeding up the
629+
actually <a class="reference external" href="https://www.pypy.org/posts/2010/11/snake-which-bites-its-tail-pypy-jitting.html">faster</a> than bootstrapping the VM on CPython. Speeding up the
630630
bootstrapping process is something that Psyco never managed at all, so we
631631
considered this a quite important achievement. At the end of
632632
Eurostars, we were about 4x faster than CPython on our set of benchmarks.</p>
@@ -641,17 +641,17 @@ <h1><a class="toc-backref" href="#id40">2012-2017: Engineering and Incremental P
641641
Conservancy</a> and contracts of various sizes from companies to implement various
642642
specific features, often handled by <a class="reference external" href="https://baroquesoftware.com/">Baroque Software</a>. Over the next couple of
643643
years
644-
we revamped various parts of the VM. We improved the GC in <a class="reference external" href="https://morepypy.blogspot.com/2013/10/incremental-garbage-collector-in-pypy.html">major</a> ways. We
645-
optimized the implementation of the JIT compiler to improve <a class="reference external" href="https://morepypy.blogspot.com/2015/10/pypy-memory-and-warmup-improvements-2.html">warmup</a> <a class="reference external" href="https://morepypy.blogspot.com/2016/04/warmup-improvements-more-efficient.html">times</a>. We
646-
implemented backends for various CPU architectures (including <a class="reference external" href="https://morepypy.blogspot.com/2015/10/powerpc-backend-for-jit.html">PowerPC</a> and
647-
<a class="reference external" href="https://morepypy.blogspot.com/2016/04/pypy-enterprise-edition.html">s390x</a>). We tried to reduce the number of performance cliffs and make the JIT
644+
we revamped various parts of the VM. We improved the GC in <a class="reference external" href="https://www.pypy.org/posts/2013/10/incremental-garbage-collector-in-pypy.html">major</a> ways. We
645+
optimized the implementation of the JIT compiler to improve <a class="reference external" href="https://www.pypy.org/posts/2015/10/pypy-memory-and-warmup-improvements-2.html">warmup</a> <a class="reference external" href="https://www.pypy.org/posts/2016/04/warmup-improvements-more-efficient.html">times</a>. We
646+
implemented backends for various CPU architectures (including <a class="reference external" href="https://www.pypy.org/posts/2015/10/powerpc-backend-for-jit.html">PowerPC</a> and
647+
<a class="reference external" href="https://www.pypy.org/posts/2016/04/pypy-enterprise-edition.html">s390x</a>). We tried to reduce the number of performance cliffs and make the JIT
648648
useful in a broader set of cases.</p>
649649
<p>Another strand of work was to push quite significantly to be more
650650
compatible with CPython, particularly the Python 3 line as well as extension
651651
module support. Other compatibility improvements we did was making sure that
652-
virtualenv <a class="reference external" href="https://morepypy.blogspot.com/2010/08/using-virtualenv-with-pypy.html">works with PyPy</a>, better support for distutils and setuptools and
652+
virtualenv <a class="reference external" href="https://www.pypy.org/posts/2010/08/using-virtualenv-with-pypy.html">works with PyPy</a>, better support for distutils and setuptools and
653653
similar improvements. The continually improving performance as well better
654-
compatibility with the ecosystem tools led to the <a class="reference external" href="https://morepypy.blogspot.com/2014/10/couchbase-contribution-to-pypy.html">first few</a> <a class="reference external" href="https://baroquesoftware.com/blog#interview-with-roberto_de_ioris">users</a> of PyPy in
654+
compatibility with the ecosystem tools led to the <a class="reference external" href="https://www.pypy.org/posts/2014/10/couchbase-contribution-to-pypy.html">first few</a> <a class="reference external" href="https://baroquesoftware.com/blog#interview-with-roberto_de_ioris">users</a> of PyPy in
655655
<a class="reference external" href="https://baroquesoftware.com/blog#magnetic">industry</a>.</p>
656656
</div>
657657
<div class="section" id="cpyext">
@@ -663,17 +663,17 @@ <h1><a class="toc-backref" href="#id41">CPyExt</a></h1>
663663
that a lot of people need specific C-extension modules at least in some parts of
664664
their program, and telling them to reimplement everything in Python is just not
665665
a practical solution. Therefore we worked on CPyExt, an emulation layer to make
666-
it possible to run <a class="reference external" href="https://morepypy.blogspot.com/2010/04/using-cpython-extension-modules-with.html">CPython C-extension modules</a> in PyPy. Doing that was a very
666+
it possible to run <a class="reference external" href="https://www.pypy.org/posts/2010/04/using-cpython-extension-modules-with.html">CPython C-extension modules</a> in PyPy. Doing that was a very
667667
<a class="reference external" href="https://www.youtube.com/watch?v=qH0eeh-4XE8">painful process</a>, since the CPython extension API leaks a lot of CPython
668668
implementation details, so we had to painstakingly emulate all of these details
669669
to make it possible to run extensions. That this works at all remains completely
670670
amazing to me! But nowadays CPyExt is even getting quite good, a lot of the big
671-
numerical libraries such as Numpy and <a class="reference external" href="https://morepypy.blogspot.com/2017/10/pypy-v59-released-now-supports-pandas.html">Pandas</a> are now supported (for a while
671+
numerical libraries such as Numpy and <a class="reference external" href="https://www.pypy.org/posts/2017/10/pypy-v59-released-now-supports-pandas.html">Pandas</a> are now supported (for a while
672672
we had worked hard on a reimplementation of Numpy called NumPyPy, but
673673
eventually realized that it would never be complete and useful enough).
674674
However, calling CPyExt modules from PyPy can still be very slow,
675675
which makes it impractical for some applications
676-
that's why we are <a class="reference external" href="https://morepypy.blogspot.com/2017/10/cape-of-good-hope-for-pypy-hello-from.html">working</a> on it.</p>
676+
that's why we are <a class="reference external" href="https://www.pypy.org/posts/2017/10/cape-of-good-hope-for-pypy-hello-from.html">working</a> on it.</p>
677677
<p>Not thinking about C-extension module emulation earlier in the project history
678678
was a pretty bad strategic mistake. It had been clear for a long time that
679679
getting people to just stop using all their C-extension modules was never going
@@ -690,7 +690,7 @@ <h1><a class="toc-backref" href="#id42">Python 3</a></h1>
690690
<p>Another main
691691
focus of the last couple of years has been to catch up with the CPython 3 line.
692692
Originally we had ignored Python 3 for a little bit too long, and were trailing
693-
several versions behind. In 2016 and 2017 we had a <a class="reference external" href="https://morepypy.blogspot.com/2016/08/pypy-gets-funding-from-mozilla-for.html">grant</a> from the Mozilla open
693+
several versions behind. In 2016 and 2017 we had a <a class="reference external" href="https://www.pypy.org/posts/2016/08/pypy-gets-funding-from-mozilla-for.html">grant</a> from the Mozilla open
694694
source support program of $200'000 to be able to catch up with Python 3.5. This
695695
work is now basically done, and we are starting to target CPython 3.6 and will
696696
have to look into 3.7 in the near future.</p>

0 commit comments

Comments
 (0)