Content deleted Content added
→External links: + academic source |
|||
(48 intermediate revisions by 42 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]]. 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]]. When the rewrite
==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
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
==
[[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
Some projects mentioning major rewrites in their history:▼
{{colbegin}}
* [[Apache HTTP Server]] (1)▼
* [[AOL Instant Messenger]] (1)▼
* [[BIND]] (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)▼
* [[OpenRPG]] (1)▼
* [[Sun Secure Global Desktop]] (1)▼
* [[WebObjects]] (1)▼
* [[Zope]] (1)
{{colend}}
==
* [[Strangler fig pattern]]
*[[Code refactoring]]▼
*[[Open source software development]]▼
*[[Technical debt]]▼
*[[Development hell]]▼
==See also==
▲Some projects mentioning major rewrites in their history:
▲* [[Code refactoring]]
▲* [[Open source software development]]
▲*[[Apache HTTP Server]] (1)
▲* [[Technical debt]]
▲*[[AOL Instant Messenger]] (1)
▲* [[Development hell]]
▲*[[BIND]] (1)
* [[
* [[Game engine recreation]]
* [[
▲*[[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)
▲*[[OpenRPG]] (1)
▲*[[PHP]] (1-2)
▲*[[Project Xanadu]] (0-1)
▲*[[Sun Secure Global Desktop]] (1)
▲*[[VBulletin]] (2)
▲*[[WebObjects]] (1)
▲*[[Zope]] (1)
==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]]
|