我们正在努力恢复Google Play商店上的Unionpedia应用程序
传出传入
🌟我们简化了设计以优化导航!
Instagram Facebook X LinkedIn

元编程

指数 元编程

元編程(英語:Metaprogramming),又譯超編程,是指某类计算机程序的编写,这类计算机程序编写或者操纵其它程序(或者自身)作为它们的資料,或者在运行时完成部分本应在编译时完成的工作。多数情况下,与手工编写全部代码相比,程序员可以获得更高的工作效率,或者给与程序更大的灵活度去处理新的情形而无需重新编译。 编写元程序的语言称之为元语言。被操纵的程序的语言称之为「目标语言」。一门编程语言同时也是自身的元语言的能力称之为「反射」或者「自反」。 反射是促进元编程的一种很有价值的语言特性。把编程语言自身作为一級資料類型(如LISP、Forth或Rebol)也很有用。支持泛型编程的语言也使用元编程能力。 元编程通常通过两种方式实现。一种是通过应用程序编程接口(APIs)将运行时引擎的内部信息暴露于编程代码。另一种是动态执行包含编程命令的字符串表达式。因此,“程序能够编写程序”。虽然两种方式都能用于同一种语言,但大多数语言趋向于偏向其中一种。.

目录

  1. 14 关系: ACL2反射 (计算机科学)代码复用Elixir面向语言的程序设计计算机程序语法制导翻译F*F♯LISPMetaprogrammingNimRacket模板超編程

ACL2

ACL2(A Computational Logic for Applicative Common Lisp,应用 Common Lisp 计算逻辑)是由一个程序语言、一套一阶逻辑的可拓理论、以及一个机械化的定理证明器所组成的软件系统。ACL2从设计上支持基于归纳逻辑理论的自动推理,可应用于软件或硬件系统的验证。ACL2的编程语言与实现基于 Common Lisp。ACL2是基于BSD授权发布的开源软件。 ACL2程序语言可看作是一个函数式(无任何副作用)的 Common Lisp 变体。和Lisp一样,ACL2使用动态类型。ACL2中所有的函数均是完整的()——意即,每一个函数均在ACL2的全集中将各个对象(输入)映射到另一个对象(输出)。 ACL2的基础理论将其程序语言的语义及其内置函数全部公理化。而程序语言中满足定义原则(definitional principle)的用户自定义部分在扩展该理论的同时亦能保持其逻辑自洽性。 ACL2定理证明器的核心基于项重写(term rewriting)系统,此核心高度可扩展,用户已证得的定理可以在后续的猜想中被用作现成的数学证明。 ACL2设计的目标是成为 Boyer–Moore 定理证明器 NQTHM 的一个“工业级别”版本。为了达成此目标,ACL2涵盖了支持许多数学和计算理论之工程学应用的有趣特性。ACL2因为基于 Common Lisp 实现而继承了其高效率;作为归纳验证基础的同一规范亦可以被编译器编译及优化,进而在本地执行。 2005年,Boyer-Moore 系列证明器(包括 ACL2)的开发者获得了ACM软件系统奖,获奖理由是“作为最高效的定理证明器的先驱和工程师……开发了能够用于验证硬件和软件可靠性的形式化工具。”.

查看 元编程和ACL2

反射 (计算机科学)

在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。见。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。 要注意术语“反射”和“内省”(type introspection)的关系。内省(或称“自省”)机制仅指程序在运行时对自身信息(称为元数据)的检测;反射机制不仅包括要能在运行时对程序自身信息进行检测,还要求程序能进一步根据这些信息改变程序状态或结构。.

查看 元编程和反射 (计算机科学)

代码复用

代码复用,也被称作软件复用。就是再利用已有的代码,或者相关的知识去编写新的代码来构造软件。.

查看 元编程和代码复用

Elixir

Elixir是一个基于Erlang虚拟机的函数式、面向并行的通用编程语言。Elixir以Erlang为基础,支持分布式、高容错、实时应用程序的开发,亦可通过宏实现元编程对其进行扩展,并通过协议支持多态。.

查看 元编程和Elixir

面向语言的程序设计

面向语言的程序设计(Language-Oriented Programming,LOP),指一种程序设计范型,通过元编程而非通用编程语言解决问题。程序员首先为问题编写一种或多种领域特定语言,然后再在这些语言中解决问题。这个概念具体描述于Martin Ward题为的论文和Sergey Dmitriev题为的文章。 这个概念的具体实现包括:.

查看 元编程和面向语言的程序设计

计算机程序

计算机程序(Computer Program)是指一组指示计算机或其他具有訊息处理能力装置每一步动作的指令,通常用某种程序设计语言编写,运行于某种目标体--结构上。打个比方,一个程序就像一个用汉语(程序设计语言)写下的红烧肉菜谱(程序),用于指导懂汉语(編譯器)同時也會烹饪手法的人(体--结构)来做这道菜。 通常,以英文文本為基礎的计算机程序要经过編譯和連結而成为一种人们不易看清而计算机可解讀的一連串數字的格式,然后放入运行。未经编译就可运行的程序,通常称之为脚本程序(script)。.

查看 元编程和计算机程序

语法制导翻译

语法制导翻译 是指一种源语言代码的翻译完全由 语法分析器 驱动的 编译器 的实现方法。 一个常见的语法制导翻译方法是将输入字符串通过把相应的动作附加到每一条语法规则上的方法翻译为一连串的动作。 因此,对于一个基于某语法的字符串的解析会产生一个对于规则的应用序列。语法制导分析提供了一种将语义附加到任何一种语法上的简单方法。.

查看 元编程和语法制导翻译

F*

F*是一个由微软研究院开发的基于F♯的依赖类型函数式程序语言。它可被编译到.NET的CIL或JavaScript。 F*的类型系统较之于F#更加丰富,它允许可被半自动化检查的功能正确性规范。.

查看 元编程和F*

F♯

F#是由微软发展的为.NET语言提供运行环境的程序设计语言,是函數程式語言(FP,Functional Programming),函數程式語言最重要的基礎是Lambda Calculus。它是基于OCaml的,而OCaml是基于ML函数程式语言。有時F#和OCaml的程式是可以交互編譯的。 F#已經接近成熟,支援高阶函数、柯里化、惰性求值、Continuations、模式匹配、闭包、列表处理和元编程。这是一个用于显.NET在不同编程语言间互通的程序设计,可以被.NET中的任意其它代碼編譯和調用。 2002年微软開始由Don Syme帶領研發F#,從C#,LINQ和Haskell中獲取了經驗,2005年推出第一個版本,2007年7月31日释出1.9.2.9版。2007年底,微軟宣布F#進入產品化的階段。 F#已被集成在Visual Studio 2010中,版本是2.0,含有对.Net Framework的完全支持。 F#现在在Visual Studio 2015中,版本是4.0。 F#现在在Visual Studio 2017中,版本是4.1。.

查看 元编程和F♯

LISP

LISP是具有悠久歷史的計算機編程語言家族,有獨特和完全括號的前綴符號表示法。起源於西元1958年,是現今第二悠久而仍廣泛使用的高階編程語言。只有FORTRAN編程語言比它更早一年。LISP編程語族已經演變出許多種方言。現代最著名的通用編程語種是Common Lisp和Scheme。 LISP最初創建時受到阿隆佐·邱奇的lambda演算的影響,用來作為計算機程序實用的數學表達。因為是早期的高階編程語言之一,它很快成為人工智能研究中最受歡迎的編程語言。在計算機科學領域,LISP開創了許多先驅概念,包括:.

查看 元编程和LISP

Metaprogramming

#重定向 元编程.

查看 元编程和Metaprogramming

Nim

Nim 是一个命令式、多范式支持、静态类型、编译型的程序设计语言,由 Andreas Rumpf 设计和开发,设计目标是高效、富有表现力以及优雅。Nim 支持元编程、函数式、消息传递、面向过程以及面向对象编程。.

查看 元编程和Nim

Racket

Racket (原名 PLT Scheme) 是個通用、多範型,屬於Lisp家族的函數式程序设计語言,它的設計目之一是為了提供一種語言創造、設計與實作的平台,Racket被廣泛應用在腳本程式設計、通用程式設計、電腦科學教育和學術研究等不同領域。 Racket有一個實作平台,包含了執行環境、函数庫、即時編譯器(JIT compiler)等等,還有提供一個以Racket本身寫成的開發環境 DrRacket (原名 DrScheme)。 Racket平台的發行版本是免費且開放原始碼的,以授權發行,所有由社群所編寫的擴充功能和套件都會被上傳到 PLaneT(一個網頁套件發佈系統)。.

查看 元编程和Racket

模板超編程

模板超編程(Template metaprogramming,縮寫:TMP)是一種超編程技術,編譯器使用模板產生暫時性的源碼,然後再和剩下的源碼混合並編譯。這些模板的輸出包括編譯時期常數、資料結構以及完整的函式。如此利用模板可以被想成編譯期的執行。這種技術被許多語言使用,最為知名的當屬C++,其他還有Curl、D、Eiffel,以及语言扩展,如。.

查看 元编程和模板超編程