Redian新闻
>
静态类型和动态类型之争何时尘埃落定?
avatar
静态类型和动态类型之争何时尘埃落定?# Programming - 葵花宝典
s*m
1
【 以下文字转载自 shopping 讨论区 】
发信人: slim (小时候胖), 信区: shopping
标 题: Anyone used Amex extended warranty service?
发信站: BBS 未名空间站 (Tue May 31 21:35:47 2011, 美东)
my laptop's cooling fan quit working. manufacturer's one year warranty is
over. it's 1 year and 4 months old and was purchased with Amex card. I want
to claim the extended warranty.
how does it work?
what do i need to provide (statement? receipt? etc)
What's the available options/outcomes (fix, refund, etc)?
Thanks for your help.
avatar
m*a
2
明显比Android强的一个OS,硬生生被HP糟蹋了。
avatar
m*n
3
动态类型很有意思
最早是为了解放程序员而生成的语法糖,也便于管理各类型变量杂居的整体对象
但是现在成了Python发展的桎梏了
第一个车祸现场是真正投入生产的项目,大家都强迫症的注释函数输入的变量类型,甚
至得先检查变量类型
第二个车祸现场是哪怕单机版的科研项目,阿三搞了个静态类型的Julia再装入Python
,绝对速度也提高不少
我看这个动态类型的语法糖的正当性快顶不住了
avatar
x*c
4
打电话问

want

【在 s**m 的大作中提到】
: 【 以下文字转载自 shopping 讨论区 】
: 发信人: slim (小时候胖), 信区: shopping
: 标 题: Anyone used Amex extended warranty service?
: 发信站: BBS 未名空间站 (Tue May 31 21:35:47 2011, 美东)
: my laptop's cooling fan quit working. manufacturer's one year warranty is
: over. it's 1 year and 4 months old and was purchased with Amex card. I want
: to claim the extended warranty.
: how does it work?
: what do i need to provide (statement? receipt? etc)
: What's the available options/outcomes (fix, refund, etc)?

avatar
N*w
5
HP 本来就不适应软件行业
要是 palm 早卖给狗狗还有点戏

【在 m****a 的大作中提到】
: 明显比Android强的一个OS,硬生生被HP糟蹋了。
avatar
i*9
6
要么就别写文档和注释,要么就老老实实把类型加上。
动态类型加一堆文档和注释去解释参数类型,属于脱裤子放屁。
avatar
E*a
7
直接打电话去amex,他们会告诉你怎么办的
那边会给你个case #,
需要你当时买电脑的收据,
电脑的warranty信息(你不知道的话,他们会帮你查)
信用卡的消费记录,
你修了之后还是用那个amex卡付款,再把这个收据和上面那些一起email给amex就行,
下个statement钱就到信用卡上了。
avatar
S*h
8
WebOS從在Palm手里就一直被世人遺忘 被HP認養了一年賣6周賣不出去 CEO就不耐煩決定把它賤價出清了
要不是藉這次機會世人都還沒機會好好認識它呢
avatar
w*g
9
不能同意更多。动态语言注释里加类型,这是个笑话吗?

【在 i*****9 的大作中提到】
: 要么就别写文档和注释,要么就老老实实把类型加上。
: 动态类型加一堆文档和注释去解释参数类型,属于脱裤子放屁。

avatar
m*a
10
恐怕还是太晚了,

決定把它賤價出清了

【在 S*******h 的大作中提到】
: WebOS從在Palm手里就一直被世人遺忘 被HP認養了一年賣6周賣不出去 CEO就不耐煩決定把它賤價出清了
: 要不是藉這次機會世人都還沒機會好好認識它呢

avatar
j*w
11
Type annotation 可以接受,type 注释就是 joke 了。
avatar
T*i
12
写给自己看当然是joke。
但是如果是写API文档给别人看,不是很正当么?你不写类型让人家咋用?
avatar
f*t
13
哈哈,自然界总有各种奇葩的存在

【在 i*****9 的大作中提到】
: 要么就别写文档和注释,要么就老老实实把类型加上。
: 动态类型加一堆文档和注释去解释参数类型,属于脱裤子放屁。

avatar
j*w
14
1 手工写注释容易跟源码 out of sync,源码改动的时候也需要同时改动注释,这就引
入不必要的成本。解决办法是用类型推导自动生成类型说明 (如 Haskell?);
2 动态类型的初衷是让程序员省去输入类型的工作量,但是现在又来在注释中写类型,
这就 defeat the purpose;而且这个信息对编译器没什么用,见 3;
3 注释不是程序的一部分,在 parse 阶段就会被编译器丢弃;在注释中的类型不能在
编译时用来做类型检查;
4 要写类型的话可以用 type annotation,比如 TypeScript 风格的:name: String;
type annotation 是程序的一部分,会在编译时用来做类型检查。
所以,要写类型的话,放在 annotation,不要在注释。

【在 T********i 的大作中提到】
: 写给自己看当然是joke。
: 但是如果是写API文档给别人看,不是很正当么?你不写类型让人家咋用?

avatar
T*i
15
不懂。我写一套几十个API的Lua库。你说怎么type annotation能让编译器不报错?


: 1 手工写注释容易跟源码 out of sync,源码改动的时候也需要同时改动注释,
这就引

: 入不必要的成本。解决办法是用类型推导自动生成类型说明 (如 Haskell?);

: 2 动态类型的初衷是让程序员省去输入类型的工作量,但是现在又来在注释中写
类型,

: 这就 defeat the purpose;而且这个信息对编译器没什么用,见 3;

: 3 注释不是程序的一部分,在 parse 阶段就会被编译器丢弃;在注释中的类型
不能在

: 编译时用来做类型检查;

: 4 要写类型的话可以用 type annotation,比如 TypeScript 风格的:name:
String;

: type annotation 是程序的一部分,会在编译时用来做类型检查。

: 所以,要写类型的话,放在 annotation,不要在注释。



【在 j*****w 的大作中提到】
: 1 手工写注释容易跟源码 out of sync,源码改动的时候也需要同时改动注释,这就引
: 入不必要的成本。解决办法是用类型推导自动生成类型说明 (如 Haskell?);
: 2 动态类型的初衷是让程序员省去输入类型的工作量,但是现在又来在注释中写类型,
: 这就 defeat the purpose;而且这个信息对编译器没什么用,见 3;
: 3 注释不是程序的一部分,在 parse 阶段就会被编译器丢弃;在注释中的类型不能在
: 编译时用来做类型检查;
: 4 要写类型的话可以用 type annotation,比如 TypeScript 风格的:name: String;
: type annotation 是程序的一部分,会在编译时用来做类型检查。
: 所以,要写类型的话,放在 annotation,不要在注释。

avatar
T*i
16
Mozilla的javascript文档,也都要标注出类型的。没类型的话,让用户去吃屎么?


: 不懂。我写一套几十个API的Lua库。你说怎么type annotation能让编译器不报
错?

: 这就引

: 类型,

: 不能在

: String;



【在 T********i 的大作中提到】
: 不懂。我写一套几十个API的Lua库。你说怎么type annotation能让编译器不报错?
:
:
: 1 手工写注释容易跟源码 out of sync,源码改动的时候也需要同时改动注释,
: 这就引
:
: 入不必要的成本。解决办法是用类型推导自动生成类型说明 (如 Haskell?);
:
: 2 动态类型的初衷是让程序员省去输入类型的工作量,但是现在又来在注释中写
: 类型,
:
: 这就 defeat the purpose;而且这个信息对编译器没什么用,见 3;
:
: 3 注释不是程序的一部分,在 parse 阶段就会被编译器丢弃;在注释中的类型
: 不能在

avatar
j*w
17
我说的是假想的在设计语言时候要做的 tradeoffs,从设计语言特性的角度来看。作为
用户的话,如果在现实中必须要用某种动态类型语言比如 JS,给参数加类型注释那也
是没有办法的事,比没有的好。
但是并不是说这是最好的办法:你在注释中添加的类型无法参与类型计算,出错了也不
知道。
微软后来出了个 TypeScript,可能是更好的办法。在参数后面加类型声明。这样类型
可以参与类型计算,理论上不可能出错。

【在 T********i 的大作中提到】
: 不懂。我写一套几十个API的Lua库。你说怎么type annotation能让编译器不报错?
:
:
: 1 手工写注释容易跟源码 out of sync,源码改动的时候也需要同时改动注释,
: 这就引
:
: 入不必要的成本。解决办法是用类型推导自动生成类型说明 (如 Haskell?);
:
: 2 动态类型的初衷是让程序员省去输入类型的工作量,但是现在又来在注释中写
: 类型,
:
: 这就 defeat the purpose;而且这个信息对编译器没什么用,见 3;
:
: 3 注释不是程序的一部分,在 parse 阶段就会被编译器丢弃;在注释中的类型
: 不能在

avatar
T*i
18
既然你承认态类型语言注释给参数加类型是没有办法的事,那应该是必须的。有什么好
笑话的呢?
我个人认为动态类型语言,除了Lua以外,都是扯淡。但是也架不住人家就是流行,而
且越来越流行不是?

【在 j*****w 的大作中提到】
: 我说的是假想的在设计语言时候要做的 tradeoffs,从设计语言特性的角度来看。作为
: 用户的话,如果在现实中必须要用某种动态类型语言比如 JS,给参数加类型注释那也
: 是没有办法的事,比没有的好。
: 但是并不是说这是最好的办法:你在注释中添加的类型无法参与类型计算,出错了也不
: 知道。
: 微软后来出了个 TypeScript,可能是更好的办法。在参数后面加类型声明。这样类型
: 可以参与类型计算,理论上不可能出错。

avatar
i*9
19
因为弱智程序猿比不弱智的多呀。这年头修弱智程序员制造的bug产生的工作岗位,可
比做新feature创造的岗位多多了。。。

:既然你承认态类型语言注释给参数加类型是没有办法的事,那应该是必须的。有什么
好笑话的呢?
avatar
C*l
20
GUido肯定想的是加入type,但是目前如果贸然加入就是2和3那样的巨大裂横

【在 w***g 的大作中提到】
: 不能同意更多。动态语言注释里加类型,这是个笑话吗?
avatar
C*l
21
静态类型占上风已经converge了,如果python现在是一个新语言,现在肯定会加入静态
类型和编译功能。

【在 i*****9 的大作中提到】
: 因为弱智程序猿比不弱智的多呀。这年头修弱智程序员制造的bug产生的工作岗位,可
: 比做新feature创造的岗位多多了。。。
:
: :既然你承认态类型语言注释给参数加类型是没有办法的事,那应该是必须的。有什么
: 好笑话的呢?
: :

avatar
W*n
22
python最需要的不是类型而是let/var
avatar
m*n
23
你批评了另一个语法糖

【在 W*********n 的大作中提到】
: python最需要的不是类型而是let/var
avatar
m*n
24
是啊,而且如果是面向外网的接口
可能还要专门写个类型判断,防止网络攻击
所以省下的类型还得加回来,一点都没省事
程序是个工程,不是篇文章
Python把它定位为“轻松”的文章
的确是力图给程序员减负
可惜工程的本质制约了在一些环节根本就减不了负
Python有些语法糖是惊为天人的,例如list comprehension
但是动态类型这个语法糖,实在是越来越鸡肋了
特别是阿三程序员搞了个Julia,证明了单机版的计算密集型项目,动态类型也是败笔
那么动态类型的应用场景还有多少?

【在 T********i 的大作中提到】
: 既然你承认态类型语言注释给参数加类型是没有办法的事,那应该是必须的。有什么好
: 笑话的呢?
: 我个人认为动态类型语言,除了Lua以外,都是扯淡。但是也架不住人家就是流行,而
: 且越来越流行不是?

avatar
C*l
25
大型项目没有类型就是灾难

【在 m*****n 的大作中提到】
: 是啊,而且如果是面向外网的接口
: 可能还要专门写个类型判断,防止网络攻击
: 所以省下的类型还得加回来,一点都没省事
: 程序是个工程,不是篇文章
: Python把它定位为“轻松”的文章
: 的确是力图给程序员减负
: 可惜工程的本质制约了在一些环节根本就减不了负
: Python有些语法糖是惊为天人的,例如list comprehension
: 但是动态类型这个语法糖,实在是越来越鸡肋了
: 特别是阿三程序员搞了个Julia,证明了单机版的计算密集型项目,动态类型也是败笔

avatar
w*g
26
一种语言流行了以后不甘局限于自己原来的niche,然后就开始引入原来没有的特性,
变得越来越generic,而语言自身又有天生的缺陷使得没法变得generic,然后灾难就来
了。
我是说python。

【在 C*****l 的大作中提到】
: 大型项目没有类型就是灾难
avatar
C*l
27
所以Guido只是让加了annotation而不是强制上类型。

【在 w***g 的大作中提到】
: 一种语言流行了以后不甘局限于自己原来的niche,然后就开始引入原来没有的特性,
: 变得越来越generic,而语言自身又有天生的缺陷使得没法变得generic,然后灾难就来
: 了。
: 我是说python。

avatar
n*w
29

想看评论,结果disabled了。

【在 n***p 的大作中提到】
: https://youtu.be/2V1FtfBDsLU
: Watch from the 40th minutes

avatar
g*t
30
python持续不断的有很多创造性的应用的。
本身python就是各种lib强大。
另外如大家所说,Python语言本身问题很大。所以不如
重点看看新的各种lib,向年轻人学习。
之前不久java,python,Perl, C sharp四个语言创始人有个访谈。有一句话我觉得是对
的。就是说编程语言的知识这个东西和数学,以及物理知识类似。变化很慢。所以我觉
得再不合理,也很难有办法。
avatar
h*i
31
看是什么用例。
商业应用程序,也就是说程序主要是用来处理人类用户关心的信息的,动态类型是必须
的,理由就是Rich Hicky 说的这些。
系统程序,也是涚程序主要用来处理人类用户不关心的让系统运行的信息的,应该用静
态类型。
就这么简单个事。
所以,现实的说,百分之九十九点九的程序员应该用动态类型。
但大多数人不知道自己是干嘛的,所以就有我们在这儿看到的现象…


: https://youtu.be/2V1FtfBDsLU

: Watch from the 40th minutes



【在 n***p 的大作中提到】
: https://youtu.be/2V1FtfBDsLU
: Watch from the 40th minutes

avatar
h*i
33
我认为99%的说“我需要静态类型"的程序猿属于下面这个评论说的这种:
Having introduced many developers to Clojure myself what I could observe is
that those who said "Yeah its a neat language but I miss types" didn't care
about "programming" in the sense Rich described. From their perspective the
job would be described like this: 1. Get assignment 2. Find a design pattern
and define some types 3. Write tests. 4. Fill out the resulting "form" with
code, assisted by the oh so clever IDE. I haven't asked everyone of them,
but I can assure you that none of them were ever held responsible for a "
situated" program in the way Rich described. Otherwise they'd know.
也就是说,他们其实只是想要个程序猿的工作和工资,其实对程序没有什么兴趣,对程
序也不负任何责任。这与Rich Hickey这种“我是个手艺人,编程序是我的手艺,我要
对我的产品负责任”其实完全不是一会事。
所以说,讨论这些问题之前,先要把自己的立场摆一摆,否则鸡同鸭讲。

【在 h*i 的大作中提到】
: 看是什么用例。
: 商业应用程序,也就是说程序主要是用来处理人类用户关心的信息的,动态类型是必须
: 的,理由就是Rich Hicky 说的这些。
: 系统程序,也是涚程序主要用来处理人类用户不关心的让系统运行的信息的,应该用静
: 态类型。
: 就这么简单个事。
: 所以,现实的说,百分之九十九点九的程序员应该用动态类型。
: 但大多数人不知道自己是干嘛的,所以就有我们在这儿看到的现象…
:
:
: https://youtu.be/2V1FtfBDsLU

avatar
n*p
34
同意,对于那些说static type是大project必须的,我认同RH的观点,因为你的data都
在type里面,type改了要到处找code,需要intellisense enabled的IDE. 如果data用
clojure immutable map或者Json, data变化了也不需要到处改code,intellisense的
功能大打折扣。
Static type用到那99%的project,只是给自己找麻烦,需要上一堆frame work比如
spring,hibernate,etc. 对clojour程序员来讲,都是脱裤子放屁。当然对于大部分程
序员来讲,东西越复杂,自己的工作越难被替代。所以选择简洁的solution,对公司是
好事,对自己未必

is
care
the
pattern
with

【在 h*i 的大作中提到】
: 我认为99%的说“我需要静态类型"的程序猿属于下面这个评论说的这种:
: Having introduced many developers to Clojure myself what I could observe is
: that those who said "Yeah its a neat language but I miss types" didn't care
: about "programming" in the sense Rich described. From their perspective the
: job would be described like this: 1. Get assignment 2. Find a design pattern
: and define some types 3. Write tests. 4. Fill out the resulting "form" with
: code, assisted by the oh so clever IDE. I haven't asked everyone of them,
: but I can assure you that none of them were ever held responsible for a "
: situated" program in the way Rich described. Otherwise they'd know.
: 也就是说,他们其实只是想要个程序猿的工作和工资,其实对程序没有什么兴趣,对程

avatar
a*i
35
python不是duck typing的吗
不是完全的动态
需要类型的时候,不是照PEP 3107写的吗?注释里写是什么鬼
def pick(l: list, index: int = 0) -> int:

Python

【在 m*****n 的大作中提到】
: 动态类型很有意思
: 最早是为了解放程序员而生成的语法糖,也便于管理各类型变量杂居的整体对象
: 但是现在成了Python发展的桎梏了
: 第一个车祸现场是真正投入生产的项目,大家都强迫症的注释函数输入的变量类型,甚
: 至得先检查变量类型
: 第二个车祸现场是哪怕单机版的科研项目,阿三搞了个静态类型的Julia再装入Python
: ,绝对速度也提高不少
: 我看这个动态类型的语法糖的正当性快顶不住了

avatar
m*n
36
现在已经有这种语法了???
需要import什么库么?

【在 a****i 的大作中提到】
: python不是duck typing的吗
: 不是完全的动态
: 需要类型的时候,不是照PEP 3107写的吗?注释里写是什么鬼
: def pick(l: list, index: int = 0) -> int:
:
: Python

avatar
m*o
37
Python 3

【在 m*****n 的大作中提到】
: 现在已经有这种语法了???
: 需要import什么库么?

avatar
g*t
38
python現在有這四個東西:
Function type annotation
Variable type annotation
Type hints
Type comments
这楼早先批评的可能是下面这样的风格,就是type comments。
import math
def circumference(radius):
# type: (float) -> float
return 2 * math.pi * radius
还有这种:
headlines.py
def headline(
text, # type: str
width=80, # type: int
fill_char="-", # type: str
): # type: (...) -> str
return f" {text.title()} ".center(width, fill_char)


: Python 3



【在 m*****o 的大作中提到】
: Python 3
avatar
g*t
39
这个说法无法认同。
第一:
类型系统可以在编译时,或者静态分析时,找出来很多bug以及corner cases。code
review 也很有帮助。
第二:
简单直接的类型系统例如go,不会给开发者带来很高的注意力负担。
所以简要但是高效的类型系统,性价比可以很高。golang的一大优势就在这里。
我这里不是说的class


: 我认为99%的说“我需要静态类型"的程序猿属于下面这个评论
说的这种:

: Having introduced many developers to Clojure myself what I could
observe is

: that those who said "Yeah its a neat language but I miss
types" didn't
care

: about "programming" in the sense Rich described. From
their
perspective the

: job would be described like this: 1. Get assignment 2. Find a
design
pattern

: and define some types 3. Write tests. 4. Fill out the resulting
"form
" with

: code, assisted by the oh so clever IDE. I haven't asked
everyone of
them,

: but I can assure you that none of them were ever held
responsible for
a "

: situated" program in the way Rich described. Otherwise they
'd know.

: 也就是说,他们其实只是想要个程序猿的工作和工资,其实对程序没有什
么兴趣
,对程



【在 h*i 的大作中提到】
: 我认为99%的说“我需要静态类型"的程序猿属于下面这个评论说的这种:
: Having introduced many developers to Clojure myself what I could observe is
: that those who said "Yeah its a neat language but I miss types" didn't care
: about "programming" in the sense Rich described. From their perspective the
: job would be described like this: 1. Get assignment 2. Find a design pattern
: and define some types 3. Write tests. 4. Fill out the resulting "form" with
: code, assisted by the oh so clever IDE. I haven't asked everyone of them,
: but I can assure you that none of them were ever held responsible for a "
: situated" program in the way Rich described. Otherwise they'd know.
: 也就是说,他们其实只是想要个程序猿的工作和工资,其实对程序没有什么兴趣,对程

avatar
m*o
40
用注释是Python 2不得已而为之的

【在 g****t 的大作中提到】
: python現在有這四個東西:
: Function type annotation
: Variable type annotation
: Type hints
: Type comments
: 这楼早先批评的可能是下面这样的风格,就是type comments。
: import math
: def circumference(radius):
: # type: (float) -> float
: return 2 * math.pi * radius

avatar
j*w
41
Right.

【在 g****t 的大作中提到】
: python現在有這四個東西:
: Function type annotation
: Variable type annotation
: Type hints
: Type comments
: 这楼早先批评的可能是下面这样的风格,就是type comments。
: import math
: def circumference(radius):
: # type: (float) -> float
: return 2 * math.pi * radius

avatar
h*i
42
无法认同什么?
我都说了很多遍了,复杂的商业应用程序,处理人类用户关心的信息,所谓RH的
situated programming, 是我讨论的用例,这其实是99%以上的职业程序员的时常工作
,只是大多数程序员不愿面对和承认而已。这种编程,大多是由PHB (pointy haired
boss) 驱动的,也就是由不懂技术的PM决定的,他们今天要这个,明天要那个,这个和
那个可能连逻辑都不自洽,但他们就要这样,广大程序员们没有任何办法,日常工作就
是搞这些屎一样的东西。大家扪心自问,是不是这样?
Clojure的哲学,是让搞这些东西也可以搞得很开心,让你的编程生涯轻松和愉快。你
不一定非要去搞政治,其实搞技术也可以自己很开心,同时让老板也很开心,给你高工
资。根据stackoverflow调查,Clojure是工资最高的编程语言。
Clojure哲学代表的这种追求,其实是一种职业工匠的追求,是程序员们应该追求的方
向。而不是反方向, 把编程搞成流水线工作,个人完全没有任何自主权,如果都要靠
工具好用才能编程,工业化了,谁都可以被替代,那可不就996什么都来了。对不对?
资本家当然想把编程变成流水线工作,但程序员还跟着吆喝,是不是有点傻?

【在 g****t 的大作中提到】
: 这个说法无法认同。
: 第一:
: 类型系统可以在编译时,或者静态分析时,找出来很多bug以及corner cases。code
: review 也很有帮助。
: 第二:
: 简单直接的类型系统例如go,不会给开发者带来很高的注意力负担。
: 所以简要但是高效的类型系统,性价比可以很高。golang的一大优势就在这里。
: 我这里不是说的class
:
:
: 我认为99%的说“我需要静态类型"的程序猿属于下面这个评论

avatar
h*c
43
不愿意写类型的为啥不去写ocaml这种Hindley-Milner系统的语言?我就不懂为什么
ocaml没火起来。
avatar
a*a
44
one reason was lack of multi-core support

【在 h**c 的大作中提到】
: 不愿意写类型的为啥不去写ocaml这种Hindley-Milner系统的语言?我就不懂为什么
: ocaml没火起来。

avatar
h*c
45
good point

【在 a****a 的大作中提到】
: one reason was lack of multi-core support
avatar
s*y
46
争这种有意思吗? 争个十年也不会有结果 能抓住老鼠的就是好猫 有这个争的
功夫 公司做上市了
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。