【问题标题】:What was the origin of Variadic Functions?可变参数函数的起源是什么?
【发布时间】:2011-11-09 13:29:29
【问题描述】:

Variadic functions 是否源自特定语言、数学、科学文章……?有什么想法吗?

【问题讨论】:

  • “类型理论是对类型系统的研究,尽管编程语言的具体类型系统源于计算机体系结构、编译器实现和语言设计的实际问题。” -- en.wikipedia.org/wiki/Type_system
  • @tripleee 抱歉,我说的是可变参数函数的概念,而不是类型论。
  • 很抱歉没有解释我的思路。我基本上想说的是(我的直觉是)当编程语言开始进行类型检查(带有类型参数的函数签名)时,它们自然而然地出现了,而且我认为你找不到参考更详细地证明这一点。但我真的不知道答案,我只是猜测。当我研究这个时,维基百科的引用出现了,似乎在某种程度上证实了我的想法。
  • @tripleee 我明白了。确实有道理。

标签: history variadic-functions


【解决方案1】:

There are many mathematical and logical operations that come across naturally as variadic functions. For instance, the summing of numbers or the concatenation of strings or other sequences are operations that can logically apply to any number of operands.

尽管标签 可变参数函数 听起来很现代,但它的概念可能与车轮一样古老。好吧,也许没那么多,但它的逻辑演变是如此合乎逻辑,以至于它可能在此过程中被重新发现多次。

Watcom 编译器 may have been the first 为 C 语言实现它:

可变参数函数回退到基于 Watcom 堆栈的调用约定。

Watcom C/C++ 编译器是计算机编程语言 C 和 C++ 的编译器,可生成适用于多个平台和操作系统的可执行程序。它为 MS-DOS 生成的代码执行速度非常快。它是最早支持 Intel 80386“保护模式”的编译器之一。在 1990 年代中期,一些技术上最雄心勃勃的 DOS 游戏,例如 DoomDescentDuke Nukem 3D 都是使用 Watcom C 构建的。在 SciTech Software 的帮助下,Watcom C/C++ 编译器和 Watcom Fortran 编译器不再由 Sybase 进行商业销售,以 free and open source Open Watcom 包的形式提供

也就是说,我认为这个问题更适合math.stackexchange.com

【讨论】:

    【解决方案2】:

    他们想要 printf() 和 scanf()。

    【讨论】:

    • 是的。很明显,编程语言理论是在大多数现代计算机语言之后创建的。
    • Seva Alekseyev:在这种情况下,它具有可变参数功能。你有意见吗?
    • 设计目标:将控制台 I/O 作为库函数,而不是语言结构。期望的行为: FORTRAN 中的 READ/WRITE 行为,它可以根据需要获取尽可能多的参数。实现:一流的可变参数函数 printf() 和 scanf()。
    • 抱歉,“他们想要”是指他们是 C 语言中这个函数的原创?
    • AFAIK,printf 等效项 (writef) 出现在 C 的前身 BCPL 中,并带有 % 前缀的格式说明符。必须检查 Algol 是否拥有它们……但 FORTRAN 肯定没有它们。
    【解决方案3】:

    BCPL、Algol 68 以及 Fortran 和 COBOL(从某种角度来看)具有可变参数功能:

    http://en.wikipedia.org/wiki/Printf_format_string

    可变参数作为“可变数量的参数”是一个数学概念,无论如何都要古老得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多