由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - FP in C# or F#
相关主题
相对于machine code, assembly到底有啥改进?question about using Hive parameter (转载)
不明白为啥全都冲着WEB义无反顾的扎进去Querying JSON in Postgres
vim跟emacs比起来Any one knows 'Q Programming Language'?
大牛讲讲JIT和AOT的比较吧编程语言选择问题
《Entity Framework 4 实战》PDF]这是什么code?
请教一下:Javascript callback not workingI love F# (转载)
database open and closewhy functional?
Windows下大家都用什么SqlConsole啊?ocaml的一个奇怪的设计
相关话题的讨论汇总
话题: fp话题: c#话题: query1话题: sql话题: query
进入Programming版参与讨论
1 (共1页)
t******1
发帖数: 152
1
F#是为FP量身订做的,但讨论FP时却无人提及:
http://www.tryfsharp.org/Learn
F#在企业中并不受欢迎,因为维护成本太高:大部分码工对FP不熟悉。
实际上在真正需要FP时,许多FP的元素已经渗入C#.例如:我们可以用IQueryable
建立一个SQL Query:
IQueryable query1 = dataContext.Ts;
query1 = query1.Where(t => t.TimeStamp >= DateTime.UTCNow.AddDays(-7));
IQueryable query2 = dataContext.Ss;
query2 = query2.Where(s => s.Minimum >= 0);
query1 = query1.Join(query2, t => t.SID, s => s.ID,(t, s)=> new { s.ID, t
.TimeStamp });
query1 = query1.OrderBy(r => r.TimeStamp).Take(1000);
经过这么半天的折腾,我们并未从SQL Server读出任何东西。query1只是一个包含了
Join和Where Clause的SQL Query,外加Sort。只有当我们真正用query1做enumeration
时,query1才会被Compile成“SELECT TOP 1000 s.ID, t.TimeStamp FROM ...”。我
觉得这其实已经是FP了。
当年Alpha CPU问世后,许多人认为RISC CPU会大行其道,X86的CISC架构将很快消亡。
但出乎许多人的意料,X86变得面目全非,融合了许多RISC的东西,而Alpha CPU却进入
了坟墓。而今FP恐怕也会重蹈此覆辙。如果你要在你的应用里做SQL Query,而Query的
条件会因使用者的要求而千变万化,那么用IQueryable做FP操作也许是你必须做的
。但F#?还是算了吧。
尽管EDM的dynamic query support还是很糟,但如果你懂得你想要的东西,现存的架构
已足够让你做所有你想要的东西了。山外有山,天外有天,挡得住你的困难并不一定挡
得住别人。
至于 C++ Templates,因为Runtime Compile有许多困难,比起C#,我觉得C#是更实用的
FP选择。
p***o
发帖数: 1252
2
你这充其量也就是个embedded DSL。而且同一个变量不停的赋不同的值,搞FP的人会疯
掉。

t

【在 t******1 的大作中提到】
: F#是为FP量身订做的,但讨论FP时却无人提及:
: http://www.tryfsharp.org/Learn
: F#在企业中并不受欢迎,因为维护成本太高:大部分码工对FP不熟悉。
: 实际上在真正需要FP时,许多FP的元素已经渗入C#.例如:我们可以用IQueryable
: 建立一个SQL Query:
: IQueryable query1 = dataContext.Ts;
: query1 = query1.Where(t => t.TimeStamp >= DateTime.UTCNow.AddDays(-7));
: IQueryable query2 = dataContext.Ss;
: query2 = query2.Where(s => s.Minimum >= 0);
: query1 = query1.Join(query2, t => t.SID, s => s.ID,(t, s)=> new { s.ID, t

e*******o
发帖数: 4654
3
轮到Ocaml 也轮不到F# 啊。
t******1
发帖数: 152
4
我这只是想说这个“变量”其实只是相当于一个"SQL Query reference”或“monad”
,并不是一个什么普通的变量。说它是“embedded DSL”也委屈了点儿。Compile to
SQL只是一种可
能的应用,并不是唯一的可能。

【在 p***o 的大作中提到】
: 你这充其量也就是个embedded DSL。而且同一个变量不停的赋不同的值,搞FP的人会疯
: 掉。
:
: t

t******1
发帖数: 152
5
知道你瞧不起微软的东西,但用F#的人比Ocaml多。

【在 e*******o 的大作中提到】
: 轮到Ocaml 也轮不到F# 啊。
n*****3
发帖数: 1584
6
F# 不就是 OCa ml 改改的?

【在 t******1 的大作中提到】
: 知道你瞧不起微软的东西,但用F#的人比Ocaml多。
n*w
发帖数: 3393
7
c# ADT support is weak. f# is also better at monad

t

【在 t******1 的大作中提到】
: F#是为FP量身订做的,但讨论FP时却无人提及:
: http://www.tryfsharp.org/Learn
: F#在企业中并不受欢迎,因为维护成本太高:大部分码工对FP不熟悉。
: 实际上在真正需要FP时,许多FP的元素已经渗入C#.例如:我们可以用IQueryable
: 建立一个SQL Query:
: IQueryable query1 = dataContext.Ts;
: query1 = query1.Where(t => t.TimeStamp >= DateTime.UTCNow.AddDays(-7));
: IQueryable query2 = dataContext.Ss;
: query2 = query2.Where(s => s.Minimum >= 0);
: query1 = query1.Join(query2, t => t.SID, s => s.ID,(t, s)=> new { s.ID, t

t******1
发帖数: 152
8
"c# ADT support is weak" in what way? Can you give any examples?

【在 n*w 的大作中提到】
: c# ADT support is weak. f# is also better at monad
:
: t

n*w
发帖数: 3393
9
for example, c# doesn't have sum type like discriminated union. 硬要用class+
lambda也可以实现类似功能,当表达力差很多,类似于java里用匿名类pass function。

【在 t******1 的大作中提到】
: "c# ADT support is weak" in what way? Can you give any examples?
t******1
发帖数: 152
10
这其实看你的个人喜好了。Types like "discriminated union" can easily be
replaced by other things. For example, although not an ADT, "discriminated
union" can easily be replaced by a polymorphic object hierarchy. Personally
I like the latter much more.

class+
function。

【在 n*w 的大作中提到】
: for example, c# doesn't have sum type like discriminated union. 硬要用class+
: lambda也可以实现类似功能,当表达力差很多,类似于java里用匿名类pass function。

相关主题
database open and closeQuerying JSON in Postgres
Windows下大家都用什么SqlConsole啊?Any one knows 'Q Programming Language'?
question about using Hive parameter (转载)编程语言选择问题
进入Programming版参与讨论
n*w
发帖数: 3393
11
discriminated union is light weight and it's used everywhere. think about
define 10 different class hierarchies for a page of code.
even though they may be used to solve some similar problems, i'm wondering
if they are semantically the same.

Personally

【在 t******1 的大作中提到】
: 这其实看你的个人喜好了。Types like "discriminated union" can easily be
: replaced by other things. For example, although not an ADT, "discriminated
: union" can easily be replaced by a polymorphic object hierarchy. Personally
: I like the latter much more.
:
: class+
: function。

t******1
发帖数: 152
12
Light-weight is the key. If you grow your objects with more complexity,say
with more overloaded methods with different implementation for different
types, you would probably have to ditch discriminated union anyway.

【在 n*w 的大作中提到】
: discriminated union is light weight and it's used everywhere. think about
: define 10 different class hierarchies for a page of code.
: even though they may be used to solve some similar problems, i'm wondering
: if they are semantically the same.
:
: Personally

t******1
发帖数: 152
13
F#是为FP量身订做的,但讨论FP时却无人提及:
http://www.tryfsharp.org/Learn
F#在企业中并不受欢迎,因为维护成本太高:大部分码工对FP不熟悉。
实际上在真正需要FP时,许多FP的元素已经渗入C#.例如:我们可以用IQueryable
建立一个SQL Query:
IQueryable query1 = dataContext.Ts;
query1 = query1.Where(t => t.TimeStamp >= DateTime.UTCNow.AddDays(-7));
IQueryable query2 = dataContext.Ss;
query2 = query2.Where(s => s.Minimum >= 0);
query1 = query1.Join(query2, t => t.SID, s => s.ID,(t, s)=> new { s.ID, t
.TimeStamp });
query1 = query1.OrderBy(r => r.TimeStamp).Take(1000);
经过这么半天的折腾,我们并未从SQL Server读出任何东西。query1只是一个包含了
Join和Where Clause的SQL Query,外加Sort。只有当我们真正用query1做enumeration
时,query1才会被Compile成“SELECT TOP 1000 s.ID, t.TimeStamp FROM ...”。我
觉得这其实已经是FP了。
当年Alpha CPU问世后,许多人认为RISC CPU会大行其道,X86的CISC架构将很快消亡。
但出乎许多人的意料,X86变得面目全非,融合了许多RISC的东西,而Alpha CPU却进入
了坟墓。而今FP恐怕也会重蹈此覆辙。如果你要在你的应用里做SQL Query,而Query的
条件会因使用者的要求而千变万化,那么用IQueryable做FP操作也许是你必须做的
。但F#?还是算了吧。
尽管EDM的dynamic query support还是很糟,但如果你懂得你想要的东西,现存的架构
已足够让你做所有你想要的东西了。山外有山,天外有天,挡得住你的困难并不一定挡
得住别人。
至于 C++ Templates,因为Runtime Compile有许多困难,比起C#,我觉得C#是更实用的
FP选择。
p***o
发帖数: 1252
14
你这充其量也就是个embedded DSL。而且同一个变量不停的赋不同的值,搞FP的人会疯
掉。

t

【在 t******1 的大作中提到】
: F#是为FP量身订做的,但讨论FP时却无人提及:
: http://www.tryfsharp.org/Learn
: F#在企业中并不受欢迎,因为维护成本太高:大部分码工对FP不熟悉。
: 实际上在真正需要FP时,许多FP的元素已经渗入C#.例如:我们可以用IQueryable
: 建立一个SQL Query:
: IQueryable query1 = dataContext.Ts;
: query1 = query1.Where(t => t.TimeStamp >= DateTime.UTCNow.AddDays(-7));
: IQueryable query2 = dataContext.Ss;
: query2 = query2.Where(s => s.Minimum >= 0);
: query1 = query1.Join(query2, t => t.SID, s => s.ID,(t, s)=> new { s.ID, t

e*******o
发帖数: 4654
15
轮到Ocaml 也轮不到F# 啊。
t******1
发帖数: 152
16
我这只是想说这个“变量”其实只是相当于一个"SQL Query reference”或“monad”
,并不是一个什么普通的变量。说它是“embedded DSL”也委屈了点儿。Compile to
SQL只是一种可
能的应用,并不是唯一的可能。

【在 p***o 的大作中提到】
: 你这充其量也就是个embedded DSL。而且同一个变量不停的赋不同的值,搞FP的人会疯
: 掉。
:
: t

t******1
发帖数: 152
17
知道你瞧不起微软的东西,但用F#的人比Ocaml多。

【在 e*******o 的大作中提到】
: 轮到Ocaml 也轮不到F# 啊。
n*****3
发帖数: 1584
18
F# 不就是 OCa ml 改改的?

【在 t******1 的大作中提到】
: 知道你瞧不起微软的东西,但用F#的人比Ocaml多。
n*w
发帖数: 3393
19
c# ADT support is weak. f# is also better at monad

t

【在 t******1 的大作中提到】
: F#是为FP量身订做的,但讨论FP时却无人提及:
: http://www.tryfsharp.org/Learn
: F#在企业中并不受欢迎,因为维护成本太高:大部分码工对FP不熟悉。
: 实际上在真正需要FP时,许多FP的元素已经渗入C#.例如:我们可以用IQueryable
: 建立一个SQL Query:
: IQueryable query1 = dataContext.Ts;
: query1 = query1.Where(t => t.TimeStamp >= DateTime.UTCNow.AddDays(-7));
: IQueryable query2 = dataContext.Ss;
: query2 = query2.Where(s => s.Minimum >= 0);
: query1 = query1.Join(query2, t => t.SID, s => s.ID,(t, s)=> new { s.ID, t

t******1
发帖数: 152
20
"c# ADT support is weak" in what way? Can you give any examples?

【在 n*w 的大作中提到】
: c# ADT support is weak. f# is also better at monad
:
: t

相关主题
这是什么code?ocaml的一个奇怪的设计
I love F# (转载)python比java慢这么多呀
why functional?疯狂除夕夜,编程抢红包!
进入Programming版参与讨论
n*w
发帖数: 3393
21
for example, c# doesn't have sum type like discriminated union. 硬要用class+
lambda也可以实现类似功能,当表达力差很多,类似于java里用匿名类pass function。

【在 t******1 的大作中提到】
: "c# ADT support is weak" in what way? Can you give any examples?
t******1
发帖数: 152
22
这其实看你的个人喜好了。Types like "discriminated union" can easily be
replaced by other things. For example, although not an ADT, "discriminated
union" can easily be replaced by a polymorphic object hierarchy. Personally
I like the latter much more.

class+
function。

【在 n*w 的大作中提到】
: for example, c# doesn't have sum type like discriminated union. 硬要用class+
: lambda也可以实现类似功能,当表达力差很多,类似于java里用匿名类pass function。

n*w
发帖数: 3393
23
discriminated union is light weight and it's used everywhere. think about
define 10 different class hierarchies for a page of code.
even though they may be used to solve some similar problems, i'm wondering
if they are semantically the same.

Personally

【在 t******1 的大作中提到】
: 这其实看你的个人喜好了。Types like "discriminated union" can easily be
: replaced by other things. For example, although not an ADT, "discriminated
: union" can easily be replaced by a polymorphic object hierarchy. Personally
: I like the latter much more.
:
: class+
: function。

t******1
发帖数: 152
24
Light-weight is the key. If you grow your objects with more complexity,say
with more overloaded methods with different implementation for different
types, you would probably have to ditch discriminated union anyway.

【在 n*w 的大作中提到】
: discriminated union is light weight and it's used everywhere. think about
: define 10 different class hierarchies for a page of code.
: even though they may be used to solve some similar problems, i'm wondering
: if they are semantically the same.
:
: Personally

g****t
发帖数: 31659
25
楼主已经不来了吧?偶然看到楼主一首诗。非常厉害。10年以上的水平。
1 (共1页)
进入Programming版参与讨论
相关主题
python比java慢这么多呀《Entity Framework 4 实战》PDF]
疯狂除夕夜,编程抢红包!请教一下:Javascript callback not working
请推荐一本 OCaml 的入门教材。database open and close
C++ for Java programmer?Windows下大家都用什么SqlConsole啊?
相对于machine code, assembly到底有啥改进?question about using Hive parameter (转载)
不明白为啥全都冲着WEB义无反顾的扎进去Querying JSON in Postgres
vim跟emacs比起来Any one knows 'Q Programming Language'?
大牛讲讲JIT和AOT的比较吧编程语言选择问题
相关话题的讨论汇总
话题: fp话题: c#话题: query1话题: sql话题: query