Chinaunix

标题: VLA(variable length array)该如何翻译? 召唤英语帝、 ISO党 [打印本页]

作者: OwnWaterloo    时间: 2010-12-22 14:11
标题: VLA(variable length array)该如何翻译? 召唤英语帝、 ISO党
本帖最后由 OwnWaterloo 于 2010-12-22 14:17 编辑

VLA(variable length array), 这术语以前也没仔细想过应该如何翻译。
C99的中文资料不多, 印象中那些资料对这个术语也是保留原文。

单就这个术语的"字面含义"而言, 给我的感觉是:
1. 它是数组
2. 它的尺寸是可变的

也就是类似std::vector那样的东西。

但VLA实际上是尺寸不需由常量表达式指定的固定尺寸数组:
1. 尺寸可由变量指定
2. 一旦指定, 不可再改变


所以一直对这个术语耿耿于怀, 词不达意啊……


------ ------ ------ ------ 以上背景 ------ ------ ------ ------

刚看到《狂人C》对这个翻译的观点: 选择"变量长度数组", 而不是"可变长数组"。

变量长度数组, 咋一看, 脑海中浮现的是good good study…… 拼凑流……
但多想想, 以及看看书中的解释, 又好像就应该是这样的。


------ ------ ------ ------ 以下问题 ------ ------ ------ ------

1. VLA应该如何翻译:
1.1 可变长数组
1.2 变量长度数组

2. VLA的本意?
其实我纠结的就是这个问题……
是我对ISO的术语理解错误了?  还是(如果没理解错, 那一定就是)ISO脑残了?


投票吧, 欢迎参与 :
认为翻译为"可变长数组",  且ISO就是这个含义的(长度可变) —— 显然、ISO脑残了 —— 请选1。
认为翻译为"变量长度数组", 且ISO含义为长度可变 —— 翻译负负得正, 太给力 —— 请选2。
认为翻译为"变量长度数组", 且这是ISO本意 (长度可由变量指定), 请选3。



作者: jamesr    时间: 2010-12-22 14:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: jamesr    时间: 2010-12-22 14:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: rubylc_unix    时间: 2010-12-22 14:24
第三项,参与了
作者: hellioncu    时间: 2010-12-22 14:28
看了好几遍,2、3不是一样的么?{:3_198:}
作者: OwnWaterloo    时间: 2010-12-22 14:32
回复 5# hellioncu

区别在于ISO的本意是什么。
如果是"长度可变", 那显然与事实不符; 翻译与本意不符, 但准确描述了事物本身。
如果是"长度由变量指定", 那翻译与本意相符, 且都准确描述了事物本身。
作者: ecjtubaowp    时间: 2010-12-22 14:43
arraylist or vector?
作者: huxk    时间: 2010-12-22 14:48
本帖最后由 huxk 于 2010-12-22 14:56 编辑

variable length 是定语 我瞎说的 如果 分解成 variable + length array 似乎缺少语境了 翻译成 长度可变数组
作者: 幻の上帝    时间: 2010-12-22 15:34
attributive noun phrase...
作者: FightForWin    时间: 2010-12-22 16:04

作者: ypyf3000    时间: 2010-12-22 16:33
variable 作形容词,可变的
作名词,变量
作者: langue    时间: 2010-12-22 17:05
换个讲法,variable-sized array 不就清楚了,variable 很明显是名词。
作者: Rex237    时间: 2010-12-22 17:06
variable-destined length array
作者: donotblock    时间: 2010-12-22 17:36
回复 1# OwnWaterloo


    这个要看上下文语境,1,3都可以。 ISO用这个说法的时候肯定有语境的吧,没看过ISO原文。 单独拿出来看的话我觉得应该是1
作者: sunboxinan    时间: 2010-12-22 17:44
长度为变量的数组??
作者: KBTiller    时间: 2010-12-22 19:54
关心结果
作者: fender0107401    时间: 2010-12-22 20:13
VLA(variable length array), 这术语以前也没仔细想过应该如何翻译。
C99的中文资料不多, 印象中那些资料 ...
OwnWaterloo 发表于 2010-12-22 14:11



作者: fender0107401    时间: 2010-12-22 20:14
在这里variable length应该是用来修饰array的吧。
作者: KBTiller    时间: 2010-12-22 21:00
在这里variable length应该是用来修饰array的吧。
fender0107401 发表于 2010-12-22 20:14

这个问题不大
核心问题是variable是名词(变量)还是形容词(可变的)
作者: bluewaterray    时间: 2010-12-22 21:11
变长数组
作者: KBTiller    时间: 2010-12-22 22:30
C89要求定义数组时,数组的尺寸必须是整数类型常量表达式
C99则可以是变量
实际上这种数组的尺寸并不是可以变来变去的
变长数组根本说不通
作者: tyc611    时间: 2010-12-22 23:19
好吧,我一直叫它“变长数组”
作者: welf    时间: 2010-12-23 09:26
敢发隐藏贴,TJJTDS啦...
{:3_183:}本贴由隐藏贴回复机快速回复
作者: pandaiam    时间: 2010-12-23 09:31
我感觉翻译的话就用1吧。
作者: srdgame    时间: 2010-12-23 09:39

作者: antonym55    时间: 2010-12-23 15:36
Gan Fa Yin Cang Tie, TJJTDS...
{:3_183:}FireFox版隐藏贴回复机自动回复
作者: ahui886    时间: 2010-12-23 16:10
选3
作者: d19890104    时间: 2010-12-23 17:07
围观!{:3_205:}
作者: KBTiller    时间: 2010-12-23 19:58
本帖最后由 KBTiller 于 2010-12-23 19:59 编辑

名不正则言不顺
记得有位大牛说程序设计语言会影响到我们的思维
自然语言就更加如此

记得楼主有过一个抱怨“堆栈”的帖子,记忆犹新
作者: davelv    时间: 2010-12-24 11:10
ISO手册这里没怎么在意,因为无论是GCC还是其他编译器对这个特性支持的都不是很到位。
先来学习下。
作者: davelv    时间: 2010-12-24 11:33
看了之后我觉得应该翻译成可变长度数组,因为没有规定表示数组长度一定是变量,而是非常量表达式。
int a[m];可以认为m是个变量,但如果是int a[m+1]; m+1不能当作变量吧,只能说表达式的值是可变的,所以变量长度数组我认为会给人造成误解,认为只能用变量作为长度,这点还是变长数组更适合。
作者: davelv    时间: 2010-12-24 11:34
本帖最后由 davelv 于 2010-12-24 11:43 编辑
C89要求定义数组时,数组的尺寸必须是整数类型常量表达式
C99则可以是变量
实际上这种数组的尺寸并不是可 ...
KBTiller 发表于 2010-12-22 22:30


sizeof()对VLA运算的时候,是属于运行时计算,这点ISO手册也有提及,也就是说,长度可变。
当然在对象的生命周期内是长度固定的,但这点无论是翻译成变长数组还是翻译成变量长度数组,都可能会引起歧义,都要提及的,或者提前统一说明:C语言任何类型的对象的长度(sizeof)在对象的生命周期内大小不变(不知道我这句话对不对,大家可以挑刺)。

6.5.3.4 The sizeof operator

2.The sizeof operator yields the size (in bytes) of its operand, which may be an
expression or the parenthesized name of a type. The size is determined from the type of
the operand. The result is an integer. If the type of the operand is a variable length array
type, the operand is evaluated; otherwise, the operand is not evaluated and the result is an
integer constant.
作者: KBTiller    时间: 2010-12-24 11:42
回复 32# davelv

我觉得
数组在定义时确定尺寸
以后尺寸就固定了
这一点两者是一样的
只不过VLA的空间是在运行时才确定的
但一旦确定就不可以再改变了
基于这个理由我不赞成用可变数组,这很容易让人以为这个数组的尺寸可以多次改变
作者: davelv    时间: 2010-12-24 11:46
回复 33# KBTiller
KBTiller兄回复帖子的时候我整好在编辑帖子,可以看我编辑后的内容。对象在其生命周期内不可变,这是需要提示的。
翻译成变量长度数组,难道大家就不能理解成生命周期内长度可变么?在语义上这么理解完全说得过去。
作者: KBTiller    时间: 2010-12-24 12:45
回复  KBTiller
对象在其生命周期内不可变,这是需要提示的。
davelv 发表于 2010-12-24 11:46


这个同意您的看法


回复  KBTiller
翻译成变量长度数组,难道大家就不能理解成生命周期内长度可变么?在语义上这么理解完全说得过去。
davelv 发表于 2010-12-24 11:46


在语义上我认为那个“variable”是名词
作者: davelv    时间: 2010-12-24 13:06
这个同意您的看法




在语义上我认为那个“variable”是名词
KBTiller 发表于 2010-12-24 12:45


但是很明显,VLA的意思不只是把变量作为长度,而是可变值的表达式。如果翻译成“变量”,该“变量”和C语言中的变量也不是一回事,这就更需要提示+说明了。
最常见的是 形容词+名字的修饰方法,名词修饰名词的词组比较少见,尤其是当把variable length array三个都作为名词的情况更是罕见。
作者: KBTiller    时间: 2010-12-24 13:13
回复 36# davelv


    懂您的意思了.看来目前我们都无法说服对方
    我们不妨再听听其他网友的看法吧
作者: davelv    时间: 2010-12-24 13:21
回复 37# KBTiller
很多问题深入探讨就会引起分歧,就像上次说的那个多级指针一样。但是只要把意思解释清楚,随着信息的反复完善和筛选,这也分歧慢慢就消失了。
那咱们就等高人来提出精辟的解释吧
作者: KBTiller    时间: 2010-12-24 13:23
回复 38# davelv


    呵呵,目前我方人数占优(虽然这不足以说明对错)
作者: ChiyuT    时间: 2010-12-24 15:43
变量长度数组,简称 变长数组。
作者: chenyinsen    时间: 2010-12-24 16:30
{:3_183:}
作者: hugegrass    时间: 2010-12-24 18:25
本帖最后由 hugegrass 于 2010-12-24 18:27 编辑

From Wikipedia, the free encyclopedia

In programming, a variable-length array (or VLA) is an array data structure of automatic storage duration whose length is determined at run time (instead of at compile time).

看这个意思,明显是变长数组(长度变化的数组相对于编译时固定数组长度)。
运行时确定数组长度。

variable是个形容词,没有“可变”的意思,只有变化的意思。
作者: OwnWaterloo    时间: 2010-12-24 19:03
回复 31# davelv

>> 没有规定表示数组长度一定是变量,而是非常量表达式。
>> int a[m];可以认为m是个变量,但如果是int a[m+1]; m+1不能当作变量吧

确实如此……  此处"变量"也不妥了……
但"可变"也很牵强……  也容易误解为std::vector那样的东西……

一开始就取类似 "runtime (determined) length array" 的名字……
多好……
作者: OwnWaterloo    时间: 2010-12-24 19:24
回复 29# KBTiller

确实曾经被"堆栈"迷糊过……
直到看到有人解释说: "堆栈"只在极少的时候代表两者的统称(这种情况一般说成"堆和栈"), 大部分时候都指"栈"而非堆。
但依然不知其所以然, 直到中英文对照看了一些资料才发现原来是翻译失误……

btw: 最近出了一个新闻, 说什么"中文出版物"中不能夹杂英文什么的。
技术书籍算"中文出版物"么? 情何以堪啊……
翻译更是需要传神才行……
作者: KBTiller    时间: 2010-12-24 20:55
本帖最后由 KBTiller 于 2010-12-24 21:37 编辑

回复 38# davelv


    我补充个理由
    记得VB里有种东西
    可以反复ReDim ,每次长度都可以改变
    我觉得这样的东西才算是“变长数组”
    而VLA显然不是这样的东西
作者: diffo    时间: 2010-12-24 21:10
我是来看隐藏的
作者: liubingqian    时间: 2010-12-24 21:22
我觉得用“动态数组”这个名字更恰当
作者: KBTiller    时间: 2010-12-24 21:36
From Wikipedia, the free encyclopedia

In programming, a variable-length array (or VLA) is an array data structure of automatic storage duration whose length is determined at run time (instead of at compile time).

hugegrass 发表于 2010-12-24 18:25

我觉得这句话的重点在于后面半句
尤其是determined,这就把“可变”完全排除了
作者: KBTiller    时间: 2010-12-24 21:41
回复 44# OwnWaterloo


    目前的多数翻译,准确的硬译都很难得,更不要说传神了。

    那个const的译法也很纠葛
作者: tpro    时间: 2010-12-25 13:33
{:3_182:}
作者: davelv    时间: 2010-12-25 15:17
回复  davelv


    我补充个理由
    记得VB里有种东西
    可以反复ReDim ,每次长度都可以改变
   ...
KBTiller 发表于 2010-12-24 20:55


这个问题其实说过了,无论是变长数组还是变量长度数组都 可能会让读者误解为数组长度在生命周期内可变。
就拿变量长度数组来说int a[m]; 我定义后m++,那么a的长度是不是也++了?这自然不是,但是如果不说明,读者怎么会知道?
这和变长数组在解释这点上所花费的功夫与变量长度这个翻译是等同的,不存在孰优孰劣之分。
在这个歧义的避免方面,上述两个翻译方案都不甚恰当。
作者: zerg_    时间: 2010-12-25 16:01

作者: tang115    时间: 2010-12-26 09:01
提示: 作者被禁止或删除 内容自动屏蔽
作者: jhui66    时间: 2010-12-26 09:17
第三种么?呵呵
作者: KBTiller    时间: 2010-12-26 10:03
这个问题其实说过了,无论是变长数组还是变量长度数组都 可能会让读者误解为数组长度在生命周期内可变。
就拿变量长度数组来说int a[m]; 我定义后m++,那么a的长度是不是也++了?这自然不是,但是如果不说明,读者怎么会知道?
这和变长数组在解释这点上所花费的功夫与变量长度这个翻译是等同的,不存在孰优孰劣之分。
在这个歧义的避免方面,上述两个翻译方案都不甚恰当。
davelv 发表于 2010-12-25 15:17

说明是一定要的。
但是“变长数组”给我的先入为主的印象就是数组长度可变
而变量长度数组对我来说则不是这样,我会思考一下什么叫“变量长度数组”
作者: JohnBull    时间: 2010-12-26 10:11

准变长数组

作者: KBTiller    时间: 2010-12-26 10:30
这个词也许应该放在更大的范围内讨论
Variably modiied type
这个我翻译成“变量修饰类型”
不知道赞成“可变数组”的网友怎么翻译这个词?
作者: jerrymy    时间: 2010-12-26 13:01
敢发隐藏贴,TJJTDS啦...
{:3_183:}本贴由隐藏贴回复机快速回复
作者: pwang046    时间: 2010-12-26 15:08

作者: id_for_fun    时间: 2010-12-26 18:43
挖掘隐藏项
作者: leming915    时间: 2010-12-27 16:45
我承认我脑残
作者: folklore    时间: 2010-12-29 00:17
变长数组
即时适应数组
运行时数组
....


阿门
作者: sbc19861004    时间: 2010-12-30 09:39
什么玩意儿还隐藏?!
作者: xiaonanln    时间: 2010-12-30 13:45
我认为"variable length array"应该翻译为“可变长数组”,并且它的含义也是“可变长数组”。
作者: 狗气球    时间: 2010-12-31 09:28
本帖最后由 狗气球 于 2010-12-31 09:33 编辑

总觉得从语义上讲变量长度还是怪怪的

如果说variable当变量讲的话,
a[n]是VLA,
a[n+1]也是VLA,
那么V到底指的是n还是n+1?
L指的是n还是n+1?
作者: wb112200    时间: 2010-12-31 17:08
不知道为什么有这么个投票...
作者: KBTiller    时间: 2010-12-31 18:22
我认为"variable length array"应该翻译为“可变长数组”,并且它的含义也是“可变长数组”。
xiaonanln 发表于 2010-12-30 13:45


VLA本质上无非是运行时确定自己的内存空间而已
其实长度并不“可变”
作者: davelv    时间: 2010-12-31 19:04
可不可变是角度不同,站在调用者的角度,传入不同的值,其数组长度不同,可变。
在被调用者的角度,无论你传什么进来,我一旦确定长度后在这个栈中就不能更改,不可变。
作者: KBTiller    时间: 2010-12-31 20:01
总觉得从语义上讲变量长度还是怪怪的

如果说variable当变量讲的话,
a[n]是VLA,
a[n+1]也是VLA,
那 ...
狗气球 发表于 2010-12-31 09:28

或许应该把V理解为变量表达式?
作者: 狗气球    时间: 2011-01-03 14:03
本帖最后由 狗气球 于 2011-01-03 14:10 编辑
或许应该把V理解为变量表达式?
KBTiller 发表于 2010-12-31 20:01



    variable解释成变量表达式……
    非要说variable在这里就是形容词转名词所以是变量我就忍了,还要拿variable当变量表达式来说,这也太夸张了吧。

    另外VM怎么解释。Variably Modified type。“变量地被修改的类型”么?
作者: KBTiller    时间: 2011-01-03 14:30
variable解释成变量表达式……
    非要说variable在这里就是形容词转名词所以是变量我就忍了,还要拿variable当变量表达式来说,这也太夸张了吧。
    另外VM怎么解释。Variably Modified type。“变量地被修改的类型”么?
狗气球 发表于 2011-01-03 14:03


variable也有名词用法
至于“拿variable当变量表达式来说”,我的看法是也许一个名词太面面俱到就太啰嗦了
Variably Modified type,我的看法是“变量表达式修饰的类型”或“变量修饰类型”

当然,只是一家之言而已
作者: 狗气球    时间: 2011-01-03 17:17
本帖最后由 狗气球 于 2011-01-03 17:24 编辑

回复 71# KBTiller


    我知道variable有名词用法。问题是这个名词本身就是形容词衍生的。英语里这种现象很常见。
    既然是衍生而非原生含义,形态(拼写和读音)又与原本的形容词一样,使用时就应该有相应的限制。
    毕竟英语这种变格特别弱的语言,容易出歧义嘛。

    我的意思是说,这种场合下variable不应该按照衍生义(名词)来看待。

    至于你给的variably的解释,我也觉得有点绕太多了。让我想起《1984》:Newspeak的Minilovely(友爱部的),Minilovelywise(友爱部地)……好吧我扯远了。
作者: KBTiller    时间: 2011-01-03 20:54
回复 72# 狗气球


    谢谢!懂您的意思了
作者: 狗气球    时间: 2011-01-04 09:48
回复 73# KBTiller


    也只是个人理解吧,对C99协议也没有通读过……
作者: KBTiller    时间: 2011-01-04 09:56
回复 74# 狗气球


    见仁见智。再正常不过了
作者: zentodone    时间: 2011-03-17 11:11
本帖最后由 zentodone 于 2011-03-17 11:15 编辑
From Wikipedia, the free encyclopedia

In programming, a variable-length array (or VLA) is an array data structure of automatic storage duration whose length is determined at run time (instead of at compile time).
hugegrass 发表于 2010-12-24 18:25

运行时确定数组长度
可不可变是角度不同,站在调用者的角度,传入不同的值,其数组长度不同,可变。
在被调用者的角度,无论你传什么进来,我一旦确定长度后在这个栈中就不能更改,不可变。
davelv 发表于 2010-12-31 19:04


作者: rover12421    时间: 2011-03-17 11:21
被绕晕了~~
作者: zongyaotang    时间: 2011-03-17 16:12
按 76 楼的原文来说。由运行时决定的长度,相对于编译时决定长度的情况来说。后者为定长。
前者为无法确定的长度。即可能要变的。可能要变的即可变长。1!
作者: KBTiller    时间: 2011-03-17 21:29
前者为无法确定的长度。即可能要变的。可能要变的即可变长。1!zongyaotang 发表于 2011-03-17 16:12


    感觉说起来有点绕
    “无法确定”不准确,是运行时确定
作者: amarant    时间: 2011-03-18 07:59
偏選第一項
作者: k8king    时间: 2011-03-18 13:08

作者: 不能解决的巴哥    时间: 2011-04-07 12:02
Gan Fa Yin Cang Tie, TJJTDS...
{:3_183:}FireFox版隐藏贴回复机自动回复




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2