标签:#子程序

共 30 篇文章

X86调用约定

本條目描述x86架构微處理器的调用约定。 调用约定描述了被调用代码的接口: 原子(标量)参数或复杂参数独立部分的分配顺序 参数是如何被传递的(放置在堆栈上,或是寄存器中,亦或两者混合) 被调用者应保存调用者的哪个寄存器 调用函数时如何为任务准备堆栈,以及任务完成如何恢复 这与编程语言中对于大小和格式的分配紧密相关。另一个密切相关的是名字修饰,这决定了代码中的符号名称如何映射到链接器中的符号名。调用约定,类型表示和名称修饰这三者的统称,即…

续体

在计算机科学中,续体(,也译作计算续体、续延、延續性),是实化计算机程序的控制状态的一种抽象表示。程式在運算過程中給定一個點,其「剩餘將要執行的部分」,即為「續體」。借助程式語言中的續體特性,程式設計師不但能模組化地自訂迴圈、break陳述句、continue陳述句等基本控制結構;此外還能以更加簡練的方式實現更加複雜的控制結構或計算模式,例如:異常處理、 生成器、協程、回溯、非确定性計算、概率编程、反向传播算法、可微分编程等。 概述 對…

闭包 (计算机科学)

在计算机科学中,闭包(),又稱词法闭包()或函數閉包(),是在支持头等函数的编程语言中实现词法绑定的一种技术。闭包在实现上是一个结构体,它存储了一个函数(通常是其入口地址)和一个关联的环境(相当于一个符号查找表)。环境里是若干对符号和值的对应关系,它既要包括约束变量(该函数内部绑定的符号),也要包括自由变量(在函数外部定义但在函数内被引用),有些函数也可能没有自由变量。闭包跟函数最大的不同在于,当捕捉闭包的时候,它的自由变量会在捕捉时被…

呼叫堆疊

别称有:执行栈(execution stack)、控制栈(control stack)、运行时栈(run-time stack)与机器栈(machine stack),是電腦科學中存儲有關正在執行的子程式的訊息的堆疊。英文有時直接简称“栈”(the stack),但堆疊中不一定僅存儲子程式訊息。幾乎所有電腦程式都依賴於呼叫堆疊,而高階語言一般將呼叫堆疊的細節隱藏至後台。 呼叫堆疊最經常被用於存放子程式的返回位址。在呼叫任何子程式時,主程…

命名参数

在计算机编程中,命名参数,或关键字参数,指的是编程语言对函数调用中指明每个参数的名称的支持。 总览 使用命名参数的函数调用与常规函数调用的不同之处在于,参数是通过将每个参数与参数名称关联来传递的,而不是通过一个有序的参数列表。 例如Java或C#的方法调用不使用命名参数: window.addNewControl("Title", 20, 50, 100, 50, true); 在Python中使用命名参数可以写作以下形式: windo…

包裝函式

在計算機科學中,包裝函式()是一種電腦程式中的函式,它存在的主要目的就是用來呼叫另一個函式。在物件導向編程中,它又被稱為方法委任(method delegation)。它的存在有多種功能:可以被當成适配器模式來使用,可以當成錯誤檢查程序,也可以被當成多重繼承來使用。 程式範例 public class StackSet implements Stack, Set { private LinkedList stack; private H…

子程序

在计算机科学中,子程式(,),是一個大型程式中的某部份程式碼,由一个或多个语句块组成。它負責完成某項特定-{zh-cn:任务; zh-tw:工作;}-,而且相較於其他程式碼,具備相對的獨立性。 一般会有输入参数并有-{zh-cn:返回值; zh-tw:傳回值;}-,提供对过程的封装和细节的隐藏。这些代码通常被整合为软件库。 函数在面向过程的语言中已经出现。是结构()和類別;}-()的前身。本身就是对具有相关性语句的归类和对某过程的抽象。…

类型签名

在计算机科学中,类型签名()或类型注解()是对程序的函数、方法、子过程、以及变量等给出其类型。特别是对函数给出其输入参数数量、类型与次序及输出结果的类型。 许多编译器产生的内部使用的函数名包含了其类型特征,这称为名字修饰,為链接器辨别不同的函数提供了方便。 类型特征的现代应用: 面向对象语言使用的interface,实际上是利用了函数类型特征的模板。 C++支持的函数重载实际上用不同的类型特征来辨识。 多继承要求考虑函数特征,以避免不可…

尾调用

在计算机学,尾调用是指一个函数里的最后一个动作是返回一个函数的调用结果的情形,即最后一步新调用的返回值直接作為当前函数的返回结果。 特征与简单示例 尾调用可能位于一个函数语法上最后的位置: function foo(data) { a(data); return b(data); } 在这里,a(data)、b(data) 都是函数调用,但是 b(data) 是函式返回前的最后运行的东西,所以也是所谓的尾位置。然后,并非所有的尾调用都必…

可重入

若一個程序或子程序可以「在任意時刻被中斷然後作業系統調度執行另一段程式碼,這段程式碼又使用了該副程式不會出錯」,則稱其為可重入(reentrant 或 re-entrant)的。即當該副程式正在運作時,執行线程可以再次進入並執行它,仍然可得到符合設計時所預期的結果。與多執行緒併發執行的线程安全不同,可重入強調對單一執行緒執行時重新進入同一個子程序仍然是安全的。 可重入概念是在單執行緒作業系統的時代提出的。一個子程序的重入,可能由於自身原…

可變參數函數

在計算機程序設計,一個可變參數函數是指一個函數擁有不定引數,即是它接受一個可變數目的參數。不同的程式語言對可變參數函數的支持有很大差異。 一般而言,在設計函數時會遇到許多數學和邏輯操作,是需要一些可變功能。例如,計算數字串的總和、字符串的聯接或其他操作過程,都可以存在任意數量的參數。 另一種許多語言都實現為可變參數函數的是格式輸出函數,在C語言的printf函數和Common Lisp的format函數就是例子。這些函數都需要一個參數,…

事件 (计算)

事件在计算领域,是指系统设计用来监视的可检测到的发生或状态变化,例如用户输入、硬件中断、系统通知,或数据或条件的变化。当与事件处理程序关联时,事件会触发一个响应。处理程序可以同步运行,此时执行线程被阻塞直到事件处理程序完成其处理;也可以异步运行,此时事件可能稍后再处理。即使同步处理看似阻塞执行,许多系统的底层机制仍然是异步的,由事件循环管理。 事件可以通过多种机制实现,例如回调、消息对象、信号或中断,且事件本身与所用的实现机制是不同的。…

协程

协程()是计算机程序的一类组件,推广了协作式多任务的子例程,允许执行被挂起与被恢复。相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。协程更适合于用来实现彼此熟悉的程序组件,如协作式多任务、异常处理、事件循环、迭代器、无限列表和管道。 根据高德纳的说法,马尔文·康威于1958年发明了术语“coroutine”并用于构建汇编程序,关于协程的最初解说在1963年发表。 同子例程的比较 协程可以通过yield(取其“退让”…

头等函数

-{zh-cn:头等函数;zh-tw:一級函式;}-(first-class function;第一級函數)是指在程序设计语言中,函数被当作头等公民。这意味着,函数可以作为别的函数的参数、函数的返回值,赋值给变量或存储在数据结构中。 有人主张应包括支持匿名函数(函数字面量,function literals)。在这样的语言中,函数的名字没有特殊含义,它们被当作具有函数类型的普通的变量对待。1960年代中期,克里斯托弗·斯特雷奇在“fun…

递归 (计算机科学)

遞迴()在電腦科學中是指一種通過重複將問題分解為同類的子問題而解決問題的方法。 遞迴式方法可以被用於解決很多的電腦科學問題,因此它是電腦科學中十分重要的一個概念。 絕大多數程式語言支援函式的自呼叫,在這些語言中函式可以通過呼叫自身來進行遞迴。計算理論可以證明遞迴的作用可以完全取代迴圈,因此有很多在函數程式語言(如Scheme)中用递归来取代循环的例子。 電腦科學家尼克勞斯·維爾特如此描述遞迴: 遞迴程式 java public void…

匿名函数

匿名函数()在计算机编程中是指一类无需定义标识符(函数名)的函数或子程序,普遍存在于多种编程语言中。 1958年LISP首先采用匿名函数,自此之后,越来越多编程语言陆续采用,主流的编程语言如PHP和C++也陸續采用。 用途 排序 尝试将类按名称排序: a = [10, '10', 10.0] a.sort(lambda x,y: cmp(x.class.name, y.class.name)) print a [10.0, 10, '1…

延迟过程调用

延迟过程调用(Deferred Procedure Call)是Microsoft Windows操作系统的机制,允许高优先级任务(如)延迟所需的低优先级任务稍后执行。这使得设备驱动程序与其他低层事件消费者更快地执行其处理的高优先级部分,调度非关键的附件处理稍后以较低优先级执行。 DPC是通过DPC对象实现的。当设备驱动程序或其他内核态程序发出DPC请求时,操作系统内核创建DPC对象,投寄到DPC队列尾部。多核处理器的每个内核有自己的D…

块 (C语言扩展)

块(blocks)是由LLVM提出的类似于lambda表达式的非标准C语言扩展,亦可以应用于Objective-C与C++中。它的语法类似于这些函数中的闭包,即由大括号包括的语句块。 苹果设计块的一个目的是使设计基于Grand Central Dispatch线程结构的程序更容易,但块是独立于这一构架的,它也可以在其它程序中以与普通语句块十分相似的方式应用。苹果已经在苹果修改版的GCC编译器以及Clang LLVM编译器前端中实现了这一…

调用约定

在计算机科学中,调用约定(calling convention)是一种定义子过程从调用处接受参数以及返回结果的方法的约定。不同调用约定的区别在于: 参数和返回值放置的位置(在寄存器中;在调用栈中;两者混合) 参数传递的顺序(或者单个参数不同部分的顺序) 调用前设置和调用后清理的工作,在调用者和被调用者之间如何分配 被调用者可以直接使用哪一个寄存器有时也包括在内。(否则的话被当成ABI的细节) 哪一个寄存器被当作volatile的或者非v…

用户自定义函数

用户自定义函数(User-Defined Function,UDF)是由程序或环境的用户所提供的函数。通常在这种语境下,系统默认函数是程序或环境原生内置的。UDF通常是根据创建者的特定需求而编写的。 数据库 在关系数据库管理系统中,用户自定义函数(UDF)提供了一种扩展数据库服务器机制的方式。通过添加函数,用户可以在标准查询语言(通常是SQL)语句中对其进行调用。SQL标准将函数分为标量函数(Scalar Functions)和表函数(…