<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=PyPy</id>
	<title>PyPy - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=PyPy"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=PyPy&amp;action=history"/>
	<updated>2026-04-30T19:50:55Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=PyPy&amp;diff=1808195&amp;oldid=prev</id>
		<title>imported&gt;ICHx at 03:03, 3 June 2025</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=PyPy&amp;diff=1808195&amp;oldid=prev"/>
		<updated>2025-06-03T03:03:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description|Alternative implementation of the Python programming language}}&lt;br /&gt;
{{Distinguish|text=[[PyPI]], the Python official third-party software repository}}&lt;br /&gt;
{{Infobox software&lt;br /&gt;
| title = &lt;br /&gt;
| name = PyPy&lt;br /&gt;
| logo = Pypy-logo (2020).svg&lt;br /&gt;
| screenshot = &lt;br /&gt;
| caption = &lt;br /&gt;
| collapsible = &lt;br /&gt;
| author = &lt;br /&gt;
| developer = &lt;br /&gt;
| released = mid {{Start date and age|2007}}&lt;br /&gt;
| latest release version = {{LSR/wikidata}}&lt;br /&gt;
| latest preview version = &lt;br /&gt;
| latest preview date = &lt;br /&gt;
| programming language = RPython&lt;br /&gt;
| operating system = [[Cross-platform]]&lt;br /&gt;
| platform = &lt;br /&gt;
| size = &lt;br /&gt;
| language = &lt;br /&gt;
| genre = [[Python (programming language)|Python]] interpreter and compiler [[toolchain]]&lt;br /&gt;
| license = [[MIT License|MIT]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;PyPy&amp;#039;&amp;#039;&amp;#039; ({{IPAc-en|&amp;#039;|p|aɪ|p|aɪ}}) is an implementation of the [[Python (programming language)|Python]] [[programming language]].&amp;lt;ref&amp;gt;{{cite web|url=https://decisionstats.com/2015/11/29/interview-maciej-fijalkowski-pypy/|title=Interview Maciej Fijalkowski PyPy|date=29 November 2015 }}&amp;lt;/ref&amp;gt; PyPy often runs faster than the standard [[implementation]] [[CPython]] because PyPy uses a [[just-in-time compilation|just-in-time compiler]].&amp;lt;ref&amp;gt;{{Cite web|url=https://speed.pypy.org/|title=PyPy Speed|website=speed.pypy.org|access-date=2019-12-01}}&amp;lt;/ref&amp;gt; Most Python code runs well on PyPy except for code that depends on CPython extensions, which either does not work or incurs some overhead when run in PyPy.&lt;br /&gt;
&lt;br /&gt;
PyPy itself is built using a technique known as meta-tracing, which is a mostly automatic transformation that takes an [[Interpreter (computing)|interpreter]] as input and produces a [[tracing just-in-time compilation|tracing just-in-time compiler]] as output. Since interpreters are usually easier to write than [[compiler]]s, but run slower, this technique can make it easier to produce efficient implementations of programming languages. PyPy&amp;#039;s meta-tracing [[toolchain]] is called [[#RPython|RPython]].&lt;br /&gt;
&lt;br /&gt;
PyPy officially supports Python 2.7 and 3.11&amp;lt;ref&amp;gt;{{cite web|url=https://pypy.org/index.html|title=PyPy|date=30 December 2024}}&amp;lt;/ref&amp;gt; and has a few differences in implementations compared to CPython.&amp;lt;ref&amp;gt;{{cite web|url=https://doc.pypy.org/en/latest/cpython_differences.html|date=30 December 2024 |title=Differences between PyPy and CPython — PyPy documentation }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Details and motivation==&lt;br /&gt;
PyPy aims to provide a common translation and support framework for producing implementations of [[dynamic language]]s, emphasizing a clean separation between [[Programming language specification|language specification]] and implementation aspects. It also aims to provide a compliant, flexible and fast implementation of the Python programming language using the above [[Software framework|framework]] to enable new advanced features without having to encode low-level details into it.&amp;lt;ref name=mission-statement&amp;gt;{{ cite web | author = Samuele Pedroni | date = March 2007 | title = PyPy – Goals and Architecture Overview | url = http://codespeak.net/pypy/dist/pypy/doc/architecture.html#mission-statement | archive-url = https://web.archive.org/web/20120614024217/http://doc.pypy.org/en/latest/architecture.html#mission-statement | url-status = dead | archive-date = 2012-06-14 }}&amp;lt;/ref&amp;gt;&amp;lt;ref name=mission-statement-2&amp;gt;{{ cite web | access-date=11 October 2013 | title = PyPy – Goals and Architecture Overview – Mission Statement | url = http://doc.pypy.org/en/latest/architecture.html#mission-statement }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RPython===&lt;br /&gt;
The PyPy interpreter itself is written in a restricted subset of Python called RPython (Restricted Python).&amp;lt;ref&amp;gt;[https://doc.pypy.org/en/latest/coding-guide.html#our-runtime-interpreter-is-rpython Our runtime interpreter is &amp;quot;RPython&amp;quot;], Coding Guide – PyPy documentation&amp;lt;/ref&amp;gt; RPython puts some constraints on the Python language such that a variable&amp;#039;s type can be [[type inference|inferred]] at compile time.&amp;lt;ref&amp;gt;&amp;quot;It is a proper subset of Python, restricted in a way that enables easy analysis and efficient code generation&amp;quot;, Ancona et al., 2007.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The PyPy project has developed a [[toolchain]] that analyzes RPython code and translates it into a form of [[Bytecode|byte code]], which can be lowered into [[C (programming language)|C]]. There used to be other [[Frontend and backend|backends]] in addition to [[C (programming language)|C]] ([[Java (programming language)|Java]], [[C Sharp (programming language)|C#]], and [[JavaScript]]), but those suffered from [[Software decay|bitrot]] and have been removed. Thus, the [[Recursion|recursive]] logo of PyPy is a [[Ouroboros|snake swallowing itself]] since the RPython is translated by a Python [[Interpreter (computing)|interpreter]]. The code can also be run untranslated for testing and analysis, which provides a nice [[Testbed|test-bed]] for research into dynamic languages.&lt;br /&gt;
&lt;br /&gt;
It allows for pluggable [[Garbage collection (computer science)|garbage collectors]], as well as optionally enabling [[Stackless Python]] features. Finally, it includes a just-in-time (JIT) [[Generator (computer programming)|generator]] that builds a [[Just-in-time compilation|just-in-time compiler]] into the interpreter, given a few annotations in the [[Interpreter (computing)|interpreter]] [[source code]]. The generated JIT compiler is a [[tracing just-in-time compilation|tracing JIT]].&amp;lt;ref&amp;gt;{{cite conference |title=Tracing the Meta-Level: PyPy&amp;#039;s Tracing JIT Compiler |doi=10.1145/1565824.1565827 |last1=Bolz |first1=Carl |last2=Cuni |first2=Antonio |last3=Fijalkowski |first3=Maciej |last4=Rigo |first4=Armin |conference=ICOOOLPS &amp;#039;09}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RPython is now also used to write non-Python language implementations, such as Pixie.&amp;lt;ref&amp;gt;[https://medium.com/this-is-not-a-monad-tutorial/indie-languages-interview-pixie-and-timothy-baldridge-cadbc36418dc Timothy Balridge interview].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Project status==&lt;br /&gt;
PyPy as of version 7.3.17 is compatible with two [[CPython]] versions: 2.7 and 3.10.&amp;lt;ref name=pypycompat&amp;gt;{{cite web |url=http://pypy.org/compat.html |title=PyPy – Python compatibility |access-date=2020-12-15 |website=pypy.org|date=28 December 2019 }}&amp;lt;/ref&amp;gt;&amp;lt;ref name=pypycompat36&amp;gt;{{cite web |url=https://www.pypy.org/posts/2021/10/pypy-v737-release.html |title=PyPy v7.3.7: bug-fix release of 3.7, 3.8  |access-date=2021-11-10 |website=pypy.org|date=25 October 2021 }}&amp;lt;/ref&amp;gt; The first PyPy version compatible with CPython v3 is PyPy v2.3.1 (2014).&amp;lt;ref name=pypyblogpypy3&amp;gt;{{cite news |date=20 June 2014 |author=the PyPy team |title=PyPy3 2.3.1 – Fulcrum |publisher=PyPy blog |url=http://morepypy.blogspot.it/2014/06/pypy3-231-fulcrum.html }}&amp;lt;/ref&amp;gt; The PyPy interpreter compatible with CPython v3 is also known as PyPy3.&lt;br /&gt;
&lt;br /&gt;
PyPy has [[just-in-time compilation|JIT compilation]] support on 32-bit/64-bit [[x86]] and 32-bit/64-bit [[ARM architecture family|ARM]] processors.&amp;lt;ref name=&amp;quot;whatsnew720&amp;quot;&amp;gt;{{cite news |date=16 October 2019 |title=PyPy v7.2.0: release of 2.7, and 3.6 |publisher=[[pypy.org]] |url=https://pypy.readthedocs.io/en/latest/release-v7.2.0.html }}&amp;lt;/ref&amp;gt; It is tested nightly on Windows, Linux, OpenBSD and Mac OS X. PyPy is able to run pure Python software that does not rely on implementation-specific features.&amp;lt;ref&amp;gt;{{Cite web|title = PyPy – Python compatibility | date = 28 December 2019| url = http://pypy.org/compat.html}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is a compatibility layer for CPython C API extensions called CPyExt, but it is incomplete and experimental. The preferred way of interfacing with [[C (programming language)|C]] [[shared libraries]] is through the built-in C [[foreign function interface]] (CFFI) or [[ctypes (language binding)|ctypes]] libraries.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
PyPy is a followup to the [[Psyco]] project, a [[Just-in-time compilation|just-in-time]] [[run-time algorithm specialization|specializing compiler]] for Python, developed by Armin Rigo between 2002 and 2010. PyPy&amp;#039;s aim is to have a just-in-time specializing compiler with scope, which was not available for Psyco.{{clarify|reason=what does &amp;quot;with scope&amp;quot; mean?|date=May 2013}} Initially, the RPython could also be compiled into [[Java bytecode]], [[Common Intermediate Language|CIL]] and [[JavaScript]], but these backends were removed due to lack of interest.&lt;br /&gt;
&lt;br /&gt;
PyPy was initially a research and development-oriented project. Reaching a mature state of development and an official 1.0 release in mid-2007, its next focus was on releasing a production-ready version with more CPython compatibility. Many of PyPy&amp;#039;s changes have been made during [[coding sprint]]s.&lt;br /&gt;
&lt;br /&gt;
* In August 2008, PyPy was able to run some popular Python libraries like [[Pylons project#Pylons Framework|Pylons]],&amp;lt;ref&amp;gt;{{Cite web|title = Running pylons on top of PyPy | date = 10 June 2008| url = http://morepypy.blogspot.com/2008/06/running-pylons-on-top-of-pypy.html}}&amp;lt;/ref&amp;gt; [[Pyglet]],&amp;lt;ref&amp;gt;{{Cite web|title = Running Pyglet on top of PyPy | date = 20 February 2008| url = http://morepypy.blogspot.com/2008/02/running-pyglet-on-pypy.html}}&amp;lt;/ref&amp;gt; [[Nevow]]&amp;lt;ref&amp;gt;{{Cite web| title=Running Nevow on top of PyPy| date = 20 June 2008| url = http://morepypy.blogspot.com/2008/06/running-nevow-on-top-of-pypy.html}}&amp;lt;/ref&amp;gt; and [[Django (web framework)|Django]].&amp;lt;ref&amp;gt;{{Cite web| title=PyPy runs unmodified django 1.0 beta | date = 19 August 2008| url = http://morepypy.blogspot.com/2008/08/pypy-runs-unmodified-django-10-beta.html}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* On 12 March 2010, PyPy 1.2 was released, focusing on speed. It included a working, though not yet stable, just-in-time compiler.&amp;lt;ref&amp;gt;{{Cite web| title=Introducing the PyPy 1.2 release | date =30 April 2011| url =https://morepypy.blogspot.dk/2011/04/pypy-15-released-catching-up.html}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* On 30 April 2011, PyPy version 1.5 was released, which reached compatibility with CPython 2.7.&amp;lt;ref&amp;gt;{{Cite web| title= PyPy 1.5 Released: Catching Up | date =12 March 2010| url =https://morepypy.blogspot.dk/2010/03/introducing-pypy-12-release.html}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* On 9 May 2013, PyPy 2.0 was released, which introduced alpha-quality support for JIT compilation on ARMv6 and ARMv7 JIT, and included CFFI in the standard library.&amp;lt;ref name=lwn2013&amp;gt;{{cite news |date=15 May 2013 |author=Jake Edge |title=A look at the PyPy 2.0 release |publisher=[[LWN.net]] |url=https://lwn.net/Articles/550427/ }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite web| title= PyPy 2.0 – Einstein Sandwich | date = 9 May 2013| url = https://morepypy.blogspot.dk/2013/05/pypy-20-einstein-sandwich.html}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* On 20 June 2014, PyPy3 was declared stable&amp;lt;ref name=pypyblogpypy3 /&amp;gt; and introduced compatibility with the more modern Python 3. It was released alongside PyPy 2.3.1 and bears the same version number.&lt;br /&gt;
* On 21 March 2017, the PyPy project released version 5.7 of both PyPy and PyPy3, with the latter introducing beta-quality support for Python 3.5.&amp;lt;ref&amp;gt;{{Cite web| title= PyPy2.7 and PyPy3.5 v5.7 – two in one release | date = 21 March 2017| url = https://morepypy.blogspot.dk/2017/03/pypy27-and-pypy35-v57-two-in-one-release.html}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* On 26 April 2018, version 6.0 was released, with support for Python 2.7 and 3.5 (still beta-quality on Windows).&amp;lt;ref&amp;gt;{{Cite web| title= PyPy2.7 and PyPy3.5 v6.0 dual release | date = 26 April 2018| url = https://morepypy.blogspot.de/2018/04/pypy27-and-pypy35-v60-dual-release.html}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* On 11 February 2019, version 7.0 was released, with support for Python 2.7 and 3.5.&amp;lt;ref&amp;gt;{{Cite web|last=Cuni|first=Antonio|date=2019-02-11|title=PyPy Status Blog: PyPy v7.0.0: triple release of 2.7, 3.5 and 3.6-alpha|url=https://morepypy.blogspot.com/2019/02/pypy-v700-triple-release-of-27-35-and.html|access-date=2020-08-17|website=PyPy Status Blog}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* On 14 October 2019, version 7.2 was released, with support for Python 3.6.9.&amp;lt;ref&amp;gt;{{Cite web|last=Mattip|date=2019-10-14|title=PyPy Status Blog: PyPy v7.2 released|url=https://morepypy.blogspot.com/2019/10/pypy-v72-released.html|access-date=2020-08-17|website=PyPy Status Blog}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* On 24 December 2019, version 7.3 was released, with support for Python 3.6.9.&amp;lt;ref&amp;gt;{{Cite web|last=Mattip|date=2019-12-24|title=PyPy Status Blog: PyPy v7.3.0 released|url=https://morepypy.blogspot.com/2019/12/pypy-730-released.html|website=PyPy Status Blog}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* On 16 February 2020, the PyPy team announced the move of the source code hosting from [[Bitbucket]] to heptapod.net with the repositories of the CFFI (C [[Foreign Function Interface]]) project. A new logo and website design are also published. However, the author and the license of the new logo are unknown.&amp;lt;ref&amp;gt;{{Cite web|url=https://www.pypy.org/posts/2020/02/pypy-and-cffi-have-moved-to-heptapod-5791595152472747032.html|title=PyPy and CFFI have moved to Heptapod|date=16 February 2020}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* On 29 December 2023, PyPy announced hosting has moved to [[GitHub]] and development will now be tracked with [[git]].&amp;lt;ref&amp;gt;{{Cite web|url=https://www.pypy.org/posts/2023/12/pypy-moved-to-git-github.html|title=PyPy has moved to Git, GitHub|date=29 December 2023}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Funding===&lt;br /&gt;
PyPy was funded by the [[European Union]] being a [[Specific Targeted Research Project]]&amp;lt;ref&amp;gt;{{Cite web|title = EU Community Research and Development Information Service Entry | url = http://cordis.europa.eu/projects/rcn/74481_en.html }}&amp;lt;/ref&amp;gt; between December 2004 and March 2007. In June 2008, PyPy announced funding being part of the [[Google]] Open Source programs and has agreed to focus on making PyPy more compatible with [[CPython]]. In 2009 Eurostars, a European Union funding agency specially focused on [[Small and medium enterprises|SMEs]],&amp;lt;ref&amp;gt;{{Cite web| title = Eurostars – Aim Higher | url = http://www.eurostars-eureka.eu/}}&amp;lt;/ref&amp;gt; accepted a proposal from PyPy project members titled &amp;quot;PYJIT – a fast and flexible toolkit for dynamic programming languages based on PyPy&amp;quot;. Eurostars funding lasted until August 2011.&amp;lt;ref&amp;gt;{{Cite web | title = Project Page on Eureka Network | url = http://www.eurekanetwork.org/project/-/id/4791 | access-date = 2011-10-17 | archive-date = 2012-04-03 | archive-url = https://web.archive.org/web/20120403075231/http://www.eurekanetwork.org/project/-/id/4791 | url-status = dead }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
At [[PyCon]] US 2011, the [[Python Software Foundation]] provided a $10,000 grant for PyPy to continue work on performance and compatibility with newer versions of the language.&amp;lt;ref&amp;gt;{{Cite web|title=A thank you to the PSF|date=22 March 2011|url=http://morepypy.blogspot.com/2011/03/thank-you-to-psf.html}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
The port to ARM architecture was sponsored in part by the [[Raspberry Pi Foundation]].&amp;lt;ref name=lwn2013 /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The PyPy project also accepts donations through its status blog pages.&amp;lt;ref&amp;gt;{{Cite web| title = PyPy Status Blog: Oh, and btw: PyPy gets funding through &amp;quot;Eurostars&amp;quot;| date = 10 December 2010| url = http://morepypy.blogspot.com/2010/12/oh-and-btw-pypy-gets-funding-through.html}}&amp;lt;/ref&amp;gt; As of 2013, a variety of sub-projects had funding: Python 3 version compatibility, built-in optimized [[NumPy]] support for numerical calculations and [[software transactional memory]] support to allow better parallelism.&amp;lt;ref name=lwn2013 /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Portal&lt;br /&gt;
|Free software&lt;br /&gt;
|Computer programming&lt;br /&gt;
}}&lt;br /&gt;
* [[Bootstrapping (compilers)]]&lt;br /&gt;
* [[Cython]]&lt;br /&gt;
* [[GraalVM]]&lt;br /&gt;
* [[Partial evaluation]]&lt;br /&gt;
* [[Psyco]]&lt;br /&gt;
* [[Self-hosting (compilers)|Self-hosting]]&lt;br /&gt;
* [[Self-interpreter]]&lt;br /&gt;
* [[Unladen Swallow]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist|30em}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{refbegin}}&lt;br /&gt;
* Davide Ancona, Massimo Ancona, Antonio Cuni, Nicholas D. Matsakis, 2007. [https://web.archive.org/web/20170706104906/ftp://ftp.disi.unige.it/pub/person/AnconaD/DLS08.pdf RPython: a Step Towards Reconciling Dynamically and Statically Typed OO Languages]. In Proc. Dynamic Language Symposium (DLS), 2007. ACM Press.&lt;br /&gt;
* Carl Friedrich Bolz, Antonio Cuni, Maciej Fijalkowski, 2009. [https://web.archive.org/web/20110716123213/http://codespeak.net/svn/pypy/extradoc/talk/icooolps2009/bolz-tracing-jit-final.pdf Tracing the meta-level: PyPy&amp;#039;s Tracing JIT Compiler]. In Proc. ICOOOLPS, 2009. ACM Press.&lt;br /&gt;
* {{cite web | last = Corbet | first = Jonathan | title = A brief experiment with PyPy | publisher = [[LWN.net]] | date = 11 May 2011 | url = https://lwn.net/Articles/442268/ }}&lt;br /&gt;
* {{cite news | last = von Eitzen | first = Chris | title = PyPy 1.7 widens the performance &amp;quot;sweet spot&amp;quot; | newspaper = [[The H]] | publisher = [[Heinz Heise]] | date = 21 November 2011 | url = http://www.h-online.com/open/news/item/PyPy-1-7-widens-the-performance-sweet-spot-1382249.html }}&lt;br /&gt;
* {{cite web | last = Rose | first = John | title = A Day with PyPy | publisher = [[Oracle Corporation|Oracle]] developer blog | date = 2 December 2011 | url = http://blogs.oracle.com/jrose/entry/a_day_with_pypy }}&lt;br /&gt;
* {{cite web | title = Interview Maciej Fijalkowski pypy | date = 29 November 2015 | publisher = Decisionstats blog | url = http://decisionstats.com/2015/11/29/interview-maciej-fijalkowski-pypy/ }}&lt;br /&gt;
{{refend}}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{Official website}}&lt;br /&gt;
&lt;br /&gt;
{{Python (programming language)}}&lt;br /&gt;
&lt;br /&gt;
[[Category:2007 software]]&lt;br /&gt;
[[Category:FP6 projects]]&lt;br /&gt;
[[Category:Free software programmed in Python]]&lt;br /&gt;
[[Category:Python (programming language) implementations]]&lt;br /&gt;
[[Category:Python (programming language) software|*]]&lt;br /&gt;
[[Category:Software using the MIT license]]&lt;br /&gt;
[[Category:Stack-based virtual machines]]&lt;/div&gt;</summary>
		<author><name>imported&gt;ICHx</name></author>
	</entry>
</feed>