Content deleted Content added
m →Motivations: Cleanup/Typo fixing, typos fixed: writen → written using AWB |
→External links: + academic source |
||
(39 intermediate revisions by 35 users not shown) | |||
Line 1:
{{Short description|Concept in programming}}
A '''rewrite''' in [[computer programming]] is the act or result of re-implementing a large portion of existing functionality without re-use of its [[source code]] or [[writing inscription]]. When the rewrite is not using existing code at all, it is common to speak of a '''rewrite from scratch'''. When instead only parts are re-engineered, which have otherwise become complicated to handle or extend, then it is more precise to speak of [[code refactoring]].▼
{{About-distinguish|code rewrites, where it is expected that the behavior will change|Code refactoring}}
▲A '''rewrite''' in [[computer programming]] is the act or result of re-implementing a large portion of existing functionality without re-use of its [[source code
==Motivations==
A piece of software is typically rewritten when one or more of the following apply:
*its [[Orphaned work|source code is not available]] or is only available under an [[License compatibility|incompatible]] [[license]]
*its code cannot be adapted to a new target platform
*its existing code has become too difficult to handle and extend
*the task of [[debugging]] it seems too complicated
*the programmer finds it difficult to understand its source code
*
*the [[programming language]] of the source code has to be changed
==Risks==
Several software engineers, such as [[Joel Spolsky]]<ref name=":0">{{
The incremental rewrite is an alternative approach, in which developers gradually replace the existing code with calls into a new implementation, expanding that implementation until it fully replaces the old one. This approach avoids a broad loss of functionality during the rewrite. [[Cleanroom software engineering]] is another approach, which requires the team to work from an exhaustive written specification of the software's functionality, without access to its code.<ref>{{cite web | url=http://www.perlmonks.org/?node_id=115511 | title=Rewriting, from scratch, a huge code base | first=Ben | last=Tilly | date=September 29, 2001
==Examples==
[[Netscape]]'s project to improve HTML layout in [[Netscape Navigator|Navigator]] 4 has been cited as an example of a failed rewrite. The new layout engine ([[Gecko (layout engine)|Gecko]]) had developed independently
==See also==▼
* [[Code refactoring]]▼
* [[Open source software development]]▼
* [[Technical debt]]▼
* [[Development hell]]▼
* [[Porting]]▼
Some projects mentioning major rewrites in their history:
{{
* [[Apache HTTP Server]] (1)
* [[AOL Instant Messenger]] (1)
* [[BIND]] (1)
* [[Freenet]] (1)
* [[GNU GRUB|GRUB]] (1)
* [[Majordomo (software)|Majordomo]] (1)
* [[History of Wikipedia#Hardware and software|MediaWiki]] (1)
* [[History of Mozilla Application Suite|Mozilla/Netscape]] (1)
* [[Icecast]] (0–1)
* [[netcat]] (1)
Line 48 ⟶ 41:
* [[WebObjects]] (1)
* [[Zope]] (1)
{{
== Techniques ==
* [[Strangler fig pattern]]
▲==See also==
▲* [[Code refactoring]]
▲* [[Open source software development]]
▲* [[Technical debt]]
▲* [[Development hell]]
▲* [[Porting]]
* [[Game engine recreation]]
* [[Reverse engineering]]
==References==
{{reflist|30em}}
==External links==
* {{Cite journal |last=Sneed |first=Harry |last2=Verhoef |first2=Chris |date=2019-09-01 |title=Re-implementing a legacy system |url=https://www.sciencedirect.com/science/article/pii/S0164121219301050 |journal=Journal of Systems and Software |volume=155 |pages=162–184 |doi=10.1016/j.jss.2019.05.012 |issn=0164-1212}}
* [http://www.c2.com/cgi/wiki?RewriteCodeFromScratch RewriteCodeFromScratch at C2 Wiki]
* [http://www.joelonsoftware.com/articles/fog0000000069.html Things You Should Never Do, Part I] by [[Joel Spolsky]]
[[Category:Computer programming]]
|