cpp那template系統值得研究

c
chebyshev
楼主 (未名空间)

我並無cpp之release經驗。生產實際不講。
以單人寫程序研究下的角度而言。cpp那template非常值得研究。
我猜測:
(1)其可以方便的進行symbolic computation。例如對一個多元多項式求符號積分。
微分。化簡多項式。分部積分法等等。
(2)cimpiler可用來做相當複雜的計算。用模板可以寫出game of life之類的東西。

最有意思的是,這些能力未必是其設計之初衷。
p
pptwo

SFINAE这种奇技淫巧都给人琢磨出来,只能说是过头了。

【 在 chebyshev (......) 的大作中提到: 】
: 我並無cpp之release經驗。生產實際不講。
: 以單人寫程序研究下的角度而言。cpp那template非常值得研究。
: 我猜測:
: (1)其可以方便的進行symbolic computation。例如對一個多元多項式求符號積分。
: 微分。化簡多項式。分部積分法等等。
: (2)cimpiler可用來做相當複雜的計算。用模板可以寫出game of life之類的東西。
: 最有意思的是,這些能力未必是其設計之初衷。

g
guvest

(1)已经有人研究过了。

Given a positive integer N and an algebraic function of multiple variables, the compiler generates executable code for the Nth partial derivatives of
the function.
https://arxiv.org/abs/1705.01729

能行此事者,除了专用数学软件之外,
其他的Functional programming language也许更方便。但没有Cpp 经历之实战测试多。

【 在 pptwo(pp) 的大作中提到: 】

: SFINAE这种奇技淫巧都给人琢磨出来,只能说是过头了。

g
guvest
https://www.iue.tuwien.ac.at/pdf/ib_2010/Rupp_ISSAC.pdf

模版算符号积分。

【 在 guvest(我爱你老婆Anna) 的大作中提到: 】

: (1)已经有人研究过了。

: Given a positive integer N and an algebraic function of multiple
variables,

: the compiler generates executable code for the Nth partial derivatives of

: the function.

: https://arxiv.org/abs/1705.01729

: 能行此事者,除了专用数学软件之外,

: 其他的Functional programming language也许更方便。但没有Cpp 经历之实战
测试多。

g
guvest

研究ocaml, F#之类functional programming者,似乎还不如练下Cpp 模版实用。

【 在 guvest(我爱你老婆Anna) 的大作中提到: 】

: https://www.iue.tuwien.ac.at/pdf/ib_2010/Rupp_ISSAC.pdf

: 模版算符号积分。

: variables,

: of

: 测试多。

C
Caravel

关键是class template可以生成新的type,感觉等价于lambda演算,lambda numerals
那套东西都可以用template搞出来。

基础只有1个:compiler的type match,template specialization

【 在 chebyshev (......) 的大作中提到: 】
: 我並無cpp之release經驗。生產實際不講。
: 以單人寫程序研究下的角度而言。cpp那template非常值得研究。
: 我猜測:
: (1)其可以方便的進行symbolic computation。例如對一個多元多項式求符號積分。
: 微分。化簡多項式。分部積分法等等。
: (2)cimpiler可用來做相當複雜的計算。用模板可以寫出game of life之類的東西。
: 最有意思的是,這些能力未必是其設計之初衷。

g
guvest

我猜:如果一个人几样皆熟悉。他
可以把Haskell ,F#什么的不费力的转成Cpp template。

当然,这种代码估计没法看也没法调试。
但这可能也表明,有些CS学者会对cpp会有持久的兴趣。

Ken Thompson 基本上说CPP是heap of garbage, 原因是BS谁的意见都听,不取舍。什
么都加进去。但是... 这么干的后果
...不是显然的。

【 在 Caravel(克拉维尔) 的大作中提到: 】

: 关键是class template可以生成新的type,感觉等价于lambda演算,lambda
numerals

: 那套东西都可以用template搞出来。

: 基础只有1个:compiler的type match,template specialization

n
netghost

呵呵,你可以用是mathematica能算的中等难度的符号计算让这个模版库算一下。

这种反正一个demo不上税的paper,爱怎么写怎么写了。

一般来说compile time来作serious的计算纯粹行为艺术,这个道理稍微有点sense就能搞明白的把。
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: (1)已经有人研究过了。
: Given a positive integer N and an algebraic function of multiple variables,
: the compiler generates executable code for the Nth partial derivatives of : the function.
: https://arxiv.org/abs/1705.01729
: 能行此事者,除了专用数学软件之外,
: 其他的Functional programming language也许更方便。但没有Cpp 经历之实战测试
多。
:
: SFINAE这种奇技淫巧都给人琢磨出来,只能说是过头了。
:

C
Caravel

c++的这个template meta programming对比其他语言比如python来说,感觉是更“自组织”一点,不那么依靠hardcode。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 呵呵,你可以用是mathematica能算的中等难度的符号计算让这个模版库算一下。
: 这种反正一个demo不上税的paper,爱怎么写怎么写了。
: 一般来说compile time来作serious的计算纯粹行为艺术,这个道理稍微有点sense就能
: 搞明白的把。
: ,
: 多。

g
guvest

更具体一些的thoughts:
[1]
例如你要写一个尺规定义的平面几何的theorem prover,那么Cpp 20
可能是很好的选择。——相比于haskell 等等压根没有装机量,维护与测试成谜的编译系统而言。

有工程能力的人应可以越过Cpp 20语法等不便。但是装机量以及有经验之社区人数是个人无法跨越的。

[2]
Mathematica确实可能是最强大的语言。然而wolfram 之人品让其吸引力基本降低到负
数。——你写个文章,假如引用了他找人证明了的101自动机,说不定哪天
其问你收专利费。你用了他的程序,其运行结果说不定他要收版权。
我印象里此人赞助过一个专门搞专利官司的公司。我当初找工作还phone interview过。

[3]

第一层的语言:c,Cpp, java, C sharp, python, js
之地位皆不可动摇。于其中能写theorem prover的还就是Cpp 之模版。而且其还不停的往里添加东西。于top 1 tier的这几个系统里面,Cpp还真是面向研究(而不是实用)
的特点最鲜明。
[就不提各种functional programming 的高远之论。只说定理证明器这一条。谁比谁更functional那都是虚的。]

【 在 Caravel(克拉维尔) 的大作中提到: 】
<br>: c 的这个template meta programming对比其他语言比如python来说,感觉是更
“自组
<br>: 织”一点,不那么依靠hardcode。
<br>

C
Caravel

c++的TMP更像是一种emergent phenomenon,它赖以成立的条件并不是直接target图灵
完备。TMP跟compile time calculation本质上还不是一回事情。 compile time
calculation可以通过compiler的一些特殊功能来实现,比如compiler完全可以support一套syntax,让人直接写compile time的函数,就像constexpr那样。这样实现就比较
trivial。 TMP也可以实现compile time calculation,但是用了完全不同的办法。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 更具体一些的thoughts:
: [1]
: 例如你要写一个尺规定义的平面几何的theorem prover,那么Cpp 20
: 可能是很好的选择。——相比于haskell 等等压根没有装机量,维护与测试
: 成谜的编译系统而言。
: 有工程能力的人应可以越过Cpp 20语法等不便。但是装机量以及有经验之社区人数是个
: 人无法跨越的。
: [2]
: Mathematica确实可能是最强大的语言。然而wolfram 之人品让其吸引力基本降低到负
: 数。——你写个文章,假如引用了他找人证明了的101自动机,说不定哪天
: ...................

T
TeacherWei

没啥可研究的。cpp模板是图灵完备的。已经理论证明了。

TypeScript的type也是。

其实图灵完备挺麻烦的。因为能造成编译器不停机。哈哈哈。

TypeScript解决方案异常简单。如果一个类型“太复杂”,编译器报错。根本不管类型解析是否停机。焊死的最多拐弯50次。

这些图灵完备不是By design,而是凑巧就赶上了。

我做物联网的操作系统。对图灵完备这个问题非常敏感。一切都开始于别人做的东西都图灵不完备。

g
guvest
https://devblogs.microsoft.com/cppblog/c20-concepts-are-here-in-visual-
studio-2019-version-16-3/

我认为,多数程序员都同意,目前只有以下几个语言系统是第一层次语言:
C,Cpp, C sharp, Java, python, JS
(也许加上aapl专有的objective C swift。)

Meta programming 啥的方向其实是 Cpp独有的努力方向,
且也获得了一定之认可。
https://devblogs.microsoft.com/cppblog/c20-concepts-are-here-in-visual-
studio-2019-version-16-3/

Cpp 23正在路上,据我看到的一点点资料。此方向还在加强。

以theorem prover而论,每年也有一些新的研究。但是都非常小众。例如以较新的LEAN来讲,谁愿意学呢?

Cpp现有用户群体强大,这是个实际的优势。

【 在 Caravel(克拉维尔) 的大作中提到: 】
<br>: c 的TMP更像是一种emergent phenomenon,它赖以成立的条件并不是直接
target图灵
<br>: 完备。TMP跟compile time calculation本质上还不是一回事情。
compile time
<br>: calculation可以通过compiler的一些特殊功能来实现,比如compiler完
全可以
support
<br>: 一套syntax,让人直接写compile time的函数,就像constexpr那样。这
样实现
就比较
<br>: trivial。 TMP也可以实现compile time calculation,但是用了完全不
同的办
法。
<br>

r
rgg

编译时期进行的运算,不知有什么劣势, stack的深度如何? CPU利用的如何?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: https://devblogs.microsoft.com/cppblog/c20-concepts-are-here-in-visual-
: studio-2019-version-16-3/
: 我认为,多数程序员都同意,目前只有以下几个语言系统是第一层次语言:
: C,Cpp, C sharp, Java, python, JS
: (也许加上aapl专有的objective C swift。)
: Meta programming 啥的方向其实是 Cpp独有的努力方向,
: 且也获得了一定之认可。
: https://devblogs.microsoft.com/cppblog/c20-concepts-are-here-in-visual-
: studio-2019-version-16-3/
: Cpp 23正在路上,据我看到的一点点资料。此方向还在加强。
: ...................

c
chebyshev

See:

[1]
Annex B recommends lower bounds on the capacity of conforming
implementations.

----cpp standard

[2]https://docs.microsoft.com/en-us/cpp/cpp/compiler-limits?view=msvc-160

【 在 rgg (rgg) 的大作中提到: 】
: 编译时期进行的运算,不知有什么劣势, stack的深度如何? CPU利用的如何?

C
Caravel

BS好像说过,有很多限制,不能搞db,必须一个个translation unit独立,。。。,外界依赖减小到最少。

【 在 rgg (rgg) 的大作中提到: 】
: 编译时期进行的运算,不知有什么劣势, stack的深度如何? CPU利用的如何?