贫血到什么程度会晕倒| 伯邑考为什么不姓姬| 自费是什么意思| 鸡汤放什么调料| 食管炎有什么症状| 攫住是什么意思| 耳鸣用什么药治疗效果最好| 一直打哈欠是什么原因| 七月是什么生肖| o型血和什么血型最配| 结界是什么意思| 家五行属什么| 高血钾有什么症状| 碘131是什么| 经常生气会得什么病| 竹心泡水喝有什么功效| 什么是强直性脊柱炎| 谵语是什么意思| 姑婆的儿子叫什么| 牛百叶是什么| 大黄泡水喝有什么功效| 3月18日什么星座| 更年期提前是什么症状| 晁盖的绰号是什么| 甲功五项是什么意思| 郭德纲什么学历| 减肥期间可以吃什么水果| 考虑黄体是什么意思| 什么的蚂蚁| q币有什么用| 才能是什么意思| 冠心病做什么检查| 高考都考什么| 梦见下雨是什么预兆| 为什么经常流鼻血| 九月十号是什么节日| 甲胄是什么意思| 7月27号是什么星座| 腐败什么意思| 白兰地是属于什么酒| 什么病才吃阿昔洛韦片| 臭男人是什么意思| 富是什么生肖| 鼻毛变白什么征兆| 甲亢吃什么| 男生喜欢女生有什么表现| 四九城是什么意思| 柳仙是什么仙| 荔枝可以做什么| 烧心吃什么| 肝喜欢什么食物有哪些| 孩子嗓子疼吃什么药| 免是什么意思| 胎盘能治什么病| 子宫腺肌症有什么症状| 逸夫是什么意思| 6月5日是世界什么日| lpp什么意思| 土土心念什么| 诺如病毒吃什么药最有效| 左侧后背疼是什么原因男性| 音乐制作人是干什么的| 女人喜欢黑色代表什么| 补气吃什么好| 长孙是什么意思| 转氨酶偏高吃什么药| 屁多是什么原因造成的| 草莽是什么意思| 凤五行属性是什么| 生菜是什么菜| 怀孕生化了是什么原因| 热伤风感冒吃什么药好| 过期的酸奶有什么用| 肝钙化灶是什么意思| 周杰伦属什么| 6月30日是什么日子| 什么布剪不断| 结肠炎吃什么药效果最好| 空明什么意思| 知了的学名叫什么| 舌头发麻是什么情况| peep是什么意思| 今年什么时候起伏| 海纳百川什么意思| 秘辛是什么意思| 拔牙后吃什么药| 阴道壁是什么样的| 为什么突然得了荨麻疹| 闪回是什么意思| 腱鞘炎去医院挂什么科| 什么是国企单位| 做梦房子倒塌什么预兆| 甲状腺2类是什么意思| 猿人头是什么牌子| 甄别是什么意思| 叙字五行属什么| 什么是iga肾病| 十月是什么月| 福晋是什么意思| 茄子是什么形状| 康熙的儿子叫什么| 什么情况要割包皮| 慢性荨麻疹是什么原因引起的| 多吃丝瓜有什么好处和坏处| 端坐呼吸常见于什么病| 贫血吃什么药补血最快| 6月份有什么节假日| 静谧什么意思| 熟练的反义词是什么| 阁字五行属什么| 什么叫排卵期| 氯吡格雷治什么病| 拜读是什么意思| 感冒为什么会头痛| 疝囊是什么| 甲亢多吃什么食物比较好| 198什么意思| 四大皆空是指什么| 眼有眼屎是什么原因| 根管治疗是什么意思| 万能血型是什么血型| ga是什么| 变色龙吃什么食物| 吃什么败火| 夜宵吃什么| 牙疼吃什么饭菜比较好| 什么是佝偻病有什么症状| 运营商是什么意思| 嘴里起血泡是什么原因| 做梦梦到搬家什么意思| 吃红薯有什么好处| 胆脂瘤是什么病| 科技皮是什么皮| 菠菜炒什么好吃| 什么是洗钱| 重庆有什么特产| 身上长小红痣是什么原因| 长方形脸适合什么发型| 鲍鱼是什么| 雷诺综合症是什么病| 长期吃避孕药有什么危害| 别无他求是什么意思| 五行属什么怎么看| 左侧卵巢多囊样改变什么意思| 天贵星是什么意思| 手指腱鞘炎是什么原因造成的| 看病人买什么水果| 复方对乙酰氨基酚片是什么药| 牛仔是什么面料| 23年属什么生肖| 谦虚的什么| 木兮是什么意思| 头疼是因为什么| 甲亢是什么原因引起的| 新生儿上户口需要什么资料| 子不孝父之过下一句是什么| 县副局长是什么级别| 胃食管反流吃什么药| 屁股痒是什么原因| 上将相当于什么级别| 农历十二月是什么月| 财神爷叫什么名字| 脂肪肝什么意思| 最近天气为什么这么热| 发财树用什么肥料最好| 天蝎是什么动物| 君子兰不开花是什么原因| 甲状腺一般吃什么药| 感染幽门螺旋杆菌吃什么药| 寒碜是什么意思| 响屁多是什么原因| 减肥吃什么油| iphone5什么时候出的| 胃反流吃什么药效果好| 下巴长闭口是什么原因| 丑指什么生肖| 嘴唇舌头发麻什么病兆| 虫合读什么| 宴字五行属什么| 回声结节什么意思| 钱癣用什么药膏最好| bdsm什么意思| 癫痫是什么症状| 打了封闭针后要注意什么事项| 总是放响屁是什么原因| 神经性皮炎是什么原因引起的| 人造珍珠是什么材质| 环比是什么| 身份证后六位代表什么| 低血压吃什么补得最快| 尿急尿痛吃什么药| 为什么要小心AB型血的人| 牙龈炎吃什么药最有效| 日落西山是什么生肖| 梦见吃西瓜是什么征兆| 什么牌的笔记本电脑好| qq2g在线是什么意思| 口疮吃什么药| 尿蛋白高吃什么食物好| 长期打嗝是什么原因| 发呆表情是什么意思| 蛋疼是什么原因引起的| 梦见针是什么意思| 刮痧不出痧是什么原因| 副总经理是什么级别| yj是什么意思| 中学校长什么级别| 艾草泡脚有什么好处| 客服是什么意思| 什么鸡没有翅膀| 西兰花不能和什么一起吃| 三堂会审是什么意思| 扌字旁的字和什么有关| 牙龈是什么| 晚上十点是什么时辰| ti是什么意思| 真言是什么意思| 气血不足吃什么食物最好| 子宫内膜增厚是什么原因| 换手率什么意思| 客厅用什么灯具好| 什么是白内障症状| 端午节吃什么食物| 知了什么时候叫| 预防中暑喝什么水| 什么补血最快| 百什么争什么| 糖宝是什么意思| 性激素六项挂什么科| 卩是什么意思| 肝fnh是什么病| 白羊女和什么星座最配| 化气行水是什么意思| 样板间是什么意思| 家里为什么有跳蚤| sm是什么意思啊| 牛腩炖什么好吃| 喝红酒对身体有什么好处| 乳房边缘疼是什么原因| 肚脐左侧按压疼是什么原因| mj是什么单位| 子宫肌瘤变性是什么意思| 黄金属于五行属什么| 绝望的绝是什么意思| 什么是刑事拘留| 小肝癌是什么意思| 面面俱到是什么意思| 什么时候期末考试| 缪斯什么意思| 山川是什么意思| 做腋臭手术挂什么科室| 申酉是什么时间| 净字五行属什么| 字字珠玑什么意思| 重庆有什么特产| 幼儿园什么时候报名| 为什么总是放屁很频繁| 女人气血不足吃什么补| 心静自然凉是什么意思| 壮阳是什么意思| 铁皮石斛能治什么病| 淼怎么读什么意思| 美国的国宝是什么动物| 色盲色弱是什么意思| 百度

北京市长是什么级别

(Redirected from Extensible languages)
百度 新房价格环比上涨%,同比上涨%,从济南房价走势来看,济南新房价格在两年内基本翻番,尤其是2017年更是高歌猛进,涨势不少。

In computer science, extensible programming is a style of computer programming that focuses on mechanisms to extend the programming language, compiler, and runtime system (environment). Extensible programming languages, supporting this style of programming, were an active area of work in the 1960s, but the movement was marginalized in the 1970s.[1] Extensible programming has become a topic of renewed interest in the 21st century.[2]

Historical movement

edit

The first paper usually[1][3] associated with the extensible programming language movement is M. Douglas McIlroy's 1960 paper on macros for high-level programming languages.[4] Another early description of the principle of extensibility occurs in Brooker and Morris's 1960 paper on the compiler-compiler.[5] The peak of the movement was marked by two academic symposia, in 1969 and 1971.[6][7] By 1975, a survey article on the movement by Thomas A. Standish[1] was essentially a post mortem. The Forth was an exception, but it went essentially unnoticed.

Character of the historical movement

edit

As typically envisioned, an extensible language consisted of a base language providing elementary computing facilities, and a metalanguage able to modify the base language. A program then consisted of metalanguage modifications and code in the modified base language.

The most prominent language-extension technique used in the movement was macro definition. Grammar modification was also closely associated with the movement, resulting in the eventual development of adaptive grammar formalisms. The Lisp language community remained separate from the extensible language community, apparently because, as one researcher observed,

any programming language in which programs and data are essentially interchangeable can be regarded as an extendible [sic] language. ... this can be seen very easily from the fact that Lisp has been used as an extendible language for years.[8]

At the 1969 conference, Simula was presented as an extensible language.

Standish described three classes of language extension, which he named paraphrase, orthophrase, and metaphrase (otherwise paraphrase and metaphrase being translation terms).

  • Paraphrase defines a facility by showing how to exchange it for something formerly defined (or to be defined). As examples, he mentions macro definitions, ordinary procedure definitions, grammatical extensions, data definitions, operator definitions, and control structure extensions.
  • Orthophrase adds features to a language that could not be achieved using the base language, such as adding an input/output (I/O) system to a base language formerly with no I/O primitives. Extensions must be understood as orthophrase relative to some given base language, since a feature not defined in terms of the base language must be defined in terms of some other language. This corresponds to the modern notion of plug-ins.
  • Metaphrase modifies the interpretation rules used for pre-existing expressions. This corresponds to the modern notion of reflective programming (reflection).

Death of the historical movement

edit

Standish attributed the failure of the extensibility movement to the difficulty of programming successive extensions. A programmer might build a first shell of macros around a base language. Then, if a second shell of macros is built around that, any subsequent programmer must be intimately familiar with both the base language, and the first shell. A third shell would require familiarity with the base and both the first and second shells, and so on. Shielding a programmer from lower-level details is the intent of the abstraction movement that supplanted the extensibility movement.

Despite the earlier presentation of Simula as extensible, by 1975, Standish's survey does not seem in practice to have included the newer abstraction-based technologies (though he used a very general definition of extensibility that technically could have included them). A 1978 history of programming abstraction from the invention of the computer until then, made no mention of macros, and gave no hint that the extensible languages movement had ever occurred.[9] Macros were tentatively admitted into the abstraction movement by the late 1980s (perhaps due to the advent of hygienic macros), by being granted the pseudonym syntactic abstractions.[10]

Modern movement

edit

In the modern sense, a system that supports extensible programming will provide all of the features described below[citation needed].

Extensible syntax

edit

This simply means that the source language(s) to be compiled must not be closed, fixed, or static. It must be possible to add new keywords, concepts, and structures to the source language(s). Languages which allow the addition of constructs with user defined syntax include Coq,[11] Racket, Camlp4, OpenC++, Seed7,[12] Red, Rebol, and Felix. While it is acceptable for some fundamental and intrinsic language features to be immutable, the system must not rely solely on those language features. It must be possible to add new ones.

Extensible compiler

edit

In extensible programming, a compiler is not a monolithic program that converts source code input into binary executable output. The compiler itself must be extensible to the point that it is really a collection of plugins that assist with the translation of source language input into anything. For example, an extensible compiler will support the generation of object code, code documentation, re-formatted source code, or any other desired output. The architecture of the compiler must permit its users to "get inside" the compilation process and provide alternative processing tasks at every reasonable step in the compilation process.

For just the task of translating source code into something that can be executed on a computer, an extensible compiler should:

  • use a plug-in or component architecture for nearly every aspect of its function
  • determine which language or language variant is being compiled and locate the appropriate plug-in to recognize and validate that language
  • use formal language specifications to syntactically and structurally validate arbitrary source languages
  • assist with the semantic validation of arbitrary source languages by invoking an appropriate validation plug-in
  • allow users to select from different kinds of code generators so that the resulting executable can be targeted for different processors, operating systems, virtual machines, or other execution environment.
  • provide facilities for error generation and extensions to it
  • allow new kinds of nodes in the abstract syntax tree (AST),
  • allow new values in nodes of the AST,
  • allow new kinds of edges between nodes,
  • support the transformation of the input AST, or portions thereof, by some external "pass"
  • support the translation of the input AST, or portions thereof, into another form by some external "pass"
  • assist with the flow of information between internal and external passes as they both transform and translate the AST into new ASTs or other representations

Extensible runtime

edit

At runtime, extensible programming systems must permit languages to extend the set of operations that it permits. For example, if the system uses a byte-code interpreter, it must allow new byte-code values to be defined. As with extensible syntax, it is acceptable for there to be some (smallish) set of fundamental or intrinsic operations that are immutable. However, it must be possible to overload or augment those intrinsic operations so that new or additional behavior can be supported.

Content separated from form

edit

Extensible programming systems should regard programs as data to be processed. Those programs should be completely devoid of any kind of formatting information. The visual display and editing of programs to users should be a translation function, supported by the extensible compiler, that translates the program data into forms more suitable for viewing or editing. Naturally, this should be a two-way translation. This is important because it must be possible to easily process extensible programs in a variety of ways. It is unacceptable for the only uses of source language input to be editing, viewing and translation to machine code. The arbitrary processing of programs is facilitated by de-coupling the source input from specifications of how it should be processed (formatted, stored, displayed, edited, etc.).

Source language debugging support

edit

Extensible programming systems must support the debugging of programs using the constructs of the original source language regardless of the extensions or transformation the program has undergone in order to make it executable. Most notably, it cannot be assumed that the only way to display runtime data is in structures or arrays. The debugger, or more correctly 'program inspector', must permit the display of runtime data in forms suitable to the source language. For example, if the language supports a data structure for a business process or work flow, it must be possible for the debugger to display that data structure as a fishbone chart or other form provided by a plugin.

Examples

edit

See also

edit

References

edit
  1. ^ a b c Standish, Thomas A., "Extensibility in Programming Language Design", SIGPLAN Notices 10 no. 7 (July 1975), pp. 18–21.
  2. ^ Gregory V. Wilson, "Extensible Programming for the 21st Century", ACM Queue 2 no. 9 (Dec/Jan 2004–2005).
  3. ^ Sammet, Jean E., Programming Languages: History and Fundamentals, Prentice-Hall, 1969, section III.7.2
  4. ^ McIlroy, M.D., "Macro Instruction Extensions of Compiler Languages", Communications of the ACM 3 no. 4 (April 1960), pp. 214–220.
  5. ^ Brooker, R.A. and Morris, D., "A General Translation Program for Phrase Structure Languages", Journal of the ACM 9 no. 1 (January 1962), pp. 1–10. The paper was received in 1960.
  6. ^ Christensen, C. and Shaw, C.J., eds., Proceedings of the Extensible Languages Symposium, SIGPLAN Notices 4 no. 8 (August 1969).
  7. ^ Schuman, S.A., ed., Proceedings of the International Symposium on Extensible Languages, SIGPLAN Notices 6 no. 12 (December 1971).
  8. ^ Harrison, M.C., in "Panel on the Concept of Extensibility", pp. 53–54 of the 1969 symposium.
  9. ^ Guarino, L.R., "The Evolution of Abstraction in Programming Languages", CMU-CS-78-120, Department of Computer Science, Carnegie-Mellon University, Pennsylvania, 22 May 1978.
  10. ^ Gabriel, Richard P., ed., "Draft Report on Requirements for a Common Prototyping System", SIGPLAN Notices 24 no. 3 (March 1989), pp. 93ff.
  11. ^ "Syntax extensions and notation scopes – Coq 8.17.0 documentation". coq.inria.fr. Retrieved 2025-08-06.
  12. ^ Zingaro, Daniel, "Modern Extensible Languages", SQRL Report 47 McMaster University (October 2007), page 16.
edit

General

edit
  1. Greg Wilson's Article in ACM Queue
  2. Slashdot Discussion
  3. Modern Extensible Languages Archived 2025-08-06 at the Wayback Machine – A paper from Daniel Zingaro

Tools

edit
  1. MetaLan extensible programming compiler engine implementation
  2. XPS – eXtensible Programming System (in development)
  3. MPS – JetBrains Metaprogramming system

Languages with extensible syntax

edit
  1. OpenZz
  2. xtc – eXTensible C
  3. English-script
  4. Nemerle Macros
  5. Boo Syntactic Macros
  6. Stanford University Intermediate Format compiler
  7. Seed7 – The extensible programming language
  8. Katahdin – a language with syntax and semantics that are mutable at runtime
  9. π – a language with extensible syntax, implemented using an Earley parser
女属羊和什么属相最配 大姨妈量少什么原因 什么样的春光 查乳腺挂什么科 9月9日什么星座
嫩黄的什么 鹿晗女朋友叫什么名字 损伤是什么意思 金黄金黄的什么填空 双相障碍是什么
立是什么意思 新疆人为什么不吃猪肉 炖鸡肉放什么调料 ca153是什么检查项目 水油是什么
伤官见官是什么意思 竹笋不能和什么一起吃 张学良为什么不回大陆 王一博是什么星座 嗓子痛吃什么药
1996年什么命hcv8jop9ns7r.cn 农历正月是什么星座hcv8jop4ns7r.cn 鱼腥草与什么相克hcv9jop6ns5r.cn 人流需要准备什么东西hcv8jop2ns5r.cn 农历10月份是什么星座hcv7jop4ns6r.cn
牙龈老是出血是什么原因引起的hcv8jop5ns1r.cn 秋葵对痛风有什么好处cl108k.com 什么植物有毒hcv9jop6ns9r.cn 622是什么星座hcv8jop1ns9r.cn 氯雷他定片主治什么hcv9jop6ns6r.cn
梨子是什么季节的水果hcv8jop2ns5r.cn 副作用是什么意思hcv8jop0ns6r.cn 呃逆是什么意思hcv9jop1ns0r.cn 尊字五行属什么hcv8jop9ns1r.cn 葛根和什么搭配泡水好hcv7jop9ns3r.cn
结肠炎是什么症状hcv8jop3ns0r.cn 子宫b超能查出什么来hcv8jop8ns2r.cn 天天想睡觉没精神是什么原因hcv8jop6ns9r.cn b型血阳性是什么意思hcv8jop5ns4r.cn 什么样的伤口需要缝针hcv8jop6ns3r.cn
百度