由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - cpp那template系統值得研究
进入Programming版参与讨论
1 (共1页)
c*******v
发帖数: 2599
1
我並無cpp之release經驗。生產實際不講。
以單人寫程序研究下的角度而言。cpp那template非常值得研究。
我猜測:
(1)其可以方便的進行symbolic computation。例如對一個多元多項式求符號積分。
微分。化簡多項式。分部積分法等等。
(2)cimpiler可用來做相當複雜的計算。用模板可以寫出game of life之類的東西。
最有意思的是,這些能力未必是其設計之初衷。
p***o
发帖数: 1252
2
SFINAE这种奇技淫巧都给人琢磨出来,只能说是过头了。

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

g****t
发帖数: 31659
3
(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这种奇技淫巧都给人琢磨出来,只能说是过头了。



【在 p***o 的大作中提到】
: SFINAE这种奇技淫巧都给人琢磨出来,只能说是过头了。
g****t
发帖数: 31659
4
https://www.iue.tuwien.ac.at/pdf/ib_2010/Rupp_ISSAC.pdf
模版算符号积分。


: (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****t 的大作中提到】
: (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这种奇技淫巧都给人琢磨出来,只能说是过头了。
:

g****t
发帖数: 31659
5
研究ocaml, F#之类functional programming者,似乎还不如练下Cpp 模版实用。


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

: 模版算符号积分。

: variables,

: of

: 测试多。



【在 g****t 的大作中提到】
: https://www.iue.tuwien.ac.at/pdf/ib_2010/Rupp_ISSAC.pdf
: 模版算符号积分。
:
:
: (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

C*****l
发帖数: 1
6
关键是class template可以生成新的type,感觉等价于lambda演算,lambda numerals
那套东西都可以用template搞出来。
基础只有1个:compiler的type match,template specialization

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

g****t
发帖数: 31659
7
我猜:如果一个人几样皆熟悉。他
可以把Haskell ,F#什么的不费力的转成Cpp template。
当然,这种代码估计没法看也没法调试。
但这可能也表明,有些CS学者会对cpp会有持久的兴趣。
Ken Thompson 基本上说CPP是heap of garbage, 原因是BS谁的意见都听,不取舍。什
么都加进去。但是... 这么干的后果
...不是显然的。


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

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

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



【在 C*****l 的大作中提到】
: 关键是class template可以生成新的type,感觉等价于lambda演算,lambda numerals
: 那套东西都可以用template搞出来。
: 基础只有1个:compiler的type match,template specialization

n******t
发帖数: 4406
8
呵呵,你可以用是mathematica能算的中等难度的符号计算让这个模版库算一下。
这种反正一个demo不上税的paper,爱怎么写怎么写了。
一般来说compile time来作serious的计算纯粹行为艺术,这个道理稍微有点sense就能
搞明白的把。

,
多。

【在 g****t 的大作中提到】
: (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*****l
发帖数: 1
9
c++的这个template meta programming对比其他语言比如python来说,感觉是更“自组
织”一点,不那么依靠hardcode。

【在 n******t 的大作中提到】
: 呵呵,你可以用是mathematica能算的中等难度的符号计算让这个模版库算一下。
: 这种反正一个demo不上税的paper,爱怎么写怎么写了。
: 一般来说compile time来作serious的计算纯粹行为艺术,这个道理稍微有点sense就能
: 搞明白的把。
:
: ,
: 多。

g****t
发帖数: 31659
10
更具体一些的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那都是虚的。]


: c 的这个template meta programming对比其他语言比如python来说,感
觉是更
“自组

: 织”一点,不那么依靠hardcode。



【在 C*****l 的大作中提到】
: c++的这个template meta programming对比其他语言比如python来说,感觉是更“自组
: 织”一点,不那么依靠hardcode。

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

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

T********i
发帖数: 2416
12
没啥可研究的。cpp模板是图灵完备的。已经理论证明了。
TypeScript的type也是。
其实图灵完备挺麻烦的。因为能造成编译器不停机。哈哈哈。
TypeScript解决方案异常简单。如果一个类型“太复杂”,编译器报错。根本不管类型
解析是否停机。焊死的最多拐弯50次。
这些图灵完备不是By design,而是凑巧就赶上了。
我做物联网的操作系统。对图灵完备这个问题非常敏感。一切都开始于别人做的东西都
图灵不完备。
g****t
发帖数: 31659
13
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现有用户群体强大,这是个实际的优势。


: c 的TMP更像是一种emergent phenomenon,它赖以成立的条件并不是直接
target图灵

: 完备。TMP跟compile time calculation本质上还不是一回事情。
compile time

: calculation可以通过compiler的一些特殊功能来实现,比如compiler完
全可以
support

: 一套syntax,让人直接写compile time的函数,就像constexpr那样。这
样实现
就比较

: trivial。 TMP也可以实现compile time calculation,但是用了完全不
同的办
法。



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

r*g
发帖数: 3159
14
编译时期进行的运算,不知有什么劣势, stack的深度如何? CPU利用的如何?

【在 g****t 的大作中提到】
: 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*******v
发帖数: 2599
15
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

【在 r*g 的大作中提到】
: 编译时期进行的运算,不知有什么劣势, stack的深度如何? CPU利用的如何?
C*****l
发帖数: 1
16
BS好像说过,有很多限制,不能搞db,必须一个个translation unit独立,。。。,外
界依赖减小到最少。

【在 r*g 的大作中提到】
: 编译时期进行的运算,不知有什么劣势, stack的深度如何? CPU利用的如何?
1 (共1页)
进入Programming版参与讨论