请输入您要查询的百科知识:

 

词条 Big ball of mud
释义

  1. In computer programs

  2. In relation to Lisp

  3. See also

  4. Notes

  5. References

A big ball of mud is a software system that lacks a perceivable architecture. Although undesirable from a software engineering point of view, such systems are common in practice due to business pressures, developer turnover and code entropy. They are a type of design anti-pattern.

In computer programs

The term was popularized in Brian Foote and Joseph Yoder's 1997 paper of the same name, which defines the term:

{{bquote|

A Big Ball of Mud is a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle. These systems show unmistakable signs of unregulated growth, and repeated, expedient repair. Information is shared promiscuously among distant elements of the system, often to the point where nearly all the important information becomes global or duplicated.

The overall structure of the system may never have been well defined.

If it was, it may have eroded beyond recognition. Programmers with a shred of architectural sensibility shun these quagmires. Only those who are unconcerned about architecture, and, perhaps, are comfortable with the inertia of the day-to-day chore of patching the holes in these failing dikes, are content to work on such systems.


|Brian Foote and Joseph Yoder
|Big Ball of Mud. Fourth Conference on Patterns Languages of Programs (PLoP '97/EuroPLoP '97) Monticello, Illinois, September 1997
}}

Foote and Yoder have credited Brian Marick as the originator of the 'big ball of mud' term for this sort of architecture.[1]

Programmers in control of a big ball of mud project are strongly encouraged to study it and to understand what it accomplishes, and to use this as a loose basis for a formal set of requirements for a well-designed system that could replace it. Technology shifts, such as client-server to web-based or file-based to database-based, may provide good reasons to start over from scratch.{{fact|date=March 2018}}

In relation to Lisp

In discussion of the Lisp programming language the term big ball of mud is used differently, in this case to describe the malleability of a Lisp system. In Lisp, it is generally possible to:

  • Easily write macros that give control over the language syntax, so that the notation looks closer to the problem's domain
  • Use a data-directed programming style
  • Execute parts of a program at compile time rather than runtime
  • Save a system image of a modified Lisp implementation for future use

As a result of the confluence of these features, Lisp is extraordinarily flexible, even to such an extent that the language implementation itself may be completely rewritten during runtime (i.e. reflective metaprogramming), which can result in Lisp systems becoming "muddy" over time due to the fluidity and ease with which they may be extended and evolve through simple use. Metalinguistic abstraction, a prominent characteristic of Lisp, also allows programmers to develop entirely new and idiosyncratic conceptual vocabularies to describe the processes and functions their programs go through in tackling a problem domain, and can, if combined with poor software documentation, result in Lisp systems that work quite well and are indeed quite well-structured from a design perspective, but are only comprehensible to the original coders, or to anyone else willing to invest the time to sift through layers of highly recursive code.

Joel Moses has been credited with coining the phrase in the 1970s:[2]
APL is like a beautiful diamond – flawless, beautifully symmetrical. But you can't add anything to it. If you try to glue on another diamond, you don't get a bigger diamond. Lisp is like a ball of mud. Add more and it's still a ball of mud – it still looks like Lisp.

Moses strongly denies this, claiming he instead called Lisp a bean bag because it always returns to its original shape.[3]

See also

  • Design pattern
  • Spaghetti code
  • Technical debt

Notes

1. ^http://www.laputan.org/mud/mud.html#BigBallOfMud
2. ^{{cite journal| title=The Evolution of Lisp | author=Richard P. Gabriel and Guy L. Steele | journal=ACM History of programming languages—II | pages=233–330 | year=1996 | url=http://portal.acm.org/citation.cfm?id=154766.155373| doi=10.1145/155360.155373| volume=28| issue=3}}
3. ^{{cite journal| title=Supplemental material from HOPL II | author=Thomas J. Bergin and Richard J. Gibson | journal=ACM SIGPLAN Notices | pages=9–20 | year=1996 | url=http://portal.acm.org/citation.cfm?id=1198155| doi=10.1145/240964.1198155}}

References

  • Guy L. Steele, Jr. & Richard P. Gabriel The Evolution of Lisp  , note on reference 128
  • Brian Foote and Joseph Yoder, Big Ball of Mud Fourth Conference on Patterns Languages of Programs (PLoP '97/EuroPLoP '97) Monticello, Illinois, September 1997

4 : Anti-patterns|Lisp (programming language)|Software engineering folklore|Software engineering papers

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/11/12 12:02:39