当前在线人数11744
首页 - 分类讨论区 - 电脑网络 - 葵花宝典版 - 同主题阅读文章

此篇文章共收到打赏
0

  • 10
  • 20
  • 50
  • 100
您目前伪币余额:0
未名交友
[更多]
[更多]
FP in C# or F#
[版面:葵花宝典][首篇作者:tan00001] , 2014年11月30日00:05:31 ,848次阅读,12次回复
来APP回复,赚取更多伪币 关注本站公众号:
[分页:1 ]
tan00001
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 1 ]

发信人: tan00001 (声明), 信区: Programming
标  题: FP in C# or F#
发信站: BBS 未名空间站 (Sun Nov 30 00:05:31 2014, 美东)

F#是为FP量身订做的,但讨论FP时却无人提及:

    http://www.tryfsharp.org/Learn

F#在企业中并不受欢迎,因为维护成本太高:大部分码工对FP不熟悉。

实际上在真正需要FP时,许多FP的元素已经渗入C#.例如:我们可以用IQueryable<T>来
建立一个SQL Query:

IQueryable<T> query1 = dataContext.Ts;
query1 = query1.Where(t => t.TimeStamp >= DateTime.UTCNow.AddDays(-7));
IQueryable<S> 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<T>做FP操作也许是你必须做的
。但F#?还是算了吧。

尽管EDM的dynamic query support还是很糟,但如果你懂得你想要的东西,现存的架构
已足够让你做所有你想要的东西了。山外有山,天外有天,挡得住你的困难并不一定挡
得住别人。

至于 C++ Templates,因为Runtime Compile有许多困难,比起C#,我觉得C#是更实用的
FP选择。

--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 68.]

 
pptwo
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 2 ]

发信人: pptwo (pp), 信区: Programming
标  题: Re: FP in C# or F#
发信站: BBS 未名空间站 (Sun Nov 30 00:18:10 2014, 美东)

你这充其量也就是个embedded DSL。而且同一个变量不停的赋不同的值,搞FP的人会疯
掉。

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


--

※ 来源:·BBS 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 67.]

 
echowuhao
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 3 ]

发信人: echowuhao (echo), 信区: Programming
标  题: Re: FP in C# or F#
发信站: BBS 未名空间站 (Sun Nov 30 00:31:32 2014, 美东)

轮到Ocaml 也轮不到F# 啊。



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 68.]

 
tan00001
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 4 ]

发信人: tan00001 (声明), 信区: Programming
标  题: Re: FP in C# or F#
发信站: BBS 未名空间站 (Sun Nov 30 00:48:26 2014, 美东)

我这只是想说这个“变量”其实只是相当于一个"SQL Query reference”或“monad”
,并不是一个什么普通的变量。说它是“embedded DSL”也委屈了点儿。Compile to
SQL只是一种可
能的应用,并不是唯一的可能。


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




--
※ 修改:·tan00001 於 Nov 30 00:52:54 2014 修改本文·[FROM: 68.]
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 68.]

 
tan00001
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 5 ]

发信人: tan00001 (声明), 信区: Programming
标  题: Re: FP in C# or F#
发信站: BBS 未名空间站 (Sun Nov 30 00:50:37 2014, 美东)

知道你瞧不起微软的东西,但用F#的人比Ocaml多。

【 在 echowuhao (echo) 的大作中提到: 】
: 轮到Ocaml 也轮不到F# 啊。



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 68.]

 
nacst23
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 6 ]

发信人: nacst23 (cnc), 信区: Programming
标  题: Re: FP in C# or F#
发信站: BBS 未名空间站 (Sun Nov 30 11:43:18 2014, 美东)

F# 不就是 OCa ml  改改的?


【 在 tan00001 (声明) 的大作中提到: 】
: 知道你瞧不起微软的东西,但用F#的人比Ocaml多。

--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 76.]

 
nkw
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 7 ]

发信人: nkw (非死非活), 信区: Programming
标  题: Re: FP in C# or F#
发信站: BBS 未名空间站 (Tue Dec  2 13:57:04 2014, 美东)

c# ADT support is weak. f# is also better at monad


【 在 tan00001 (声明) 的大作中提到: 】
: 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
: ...................

--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 66.]

 
tan00001
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 8 ]

发信人: tan00001 (声明), 信区: Programming
标  题: Re: FP in C# or F#
发信站: BBS 未名空间站 (Wed Dec  3 03:01:59 2014, 美东)

"c# ADT support is weak" in what way? Can you give any examples?


【 在 nkw (非死非活) 的大作中提到: 】
: c# ADT support is weak. f# is also better at monad
:  t



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 68.]

 
nkw
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 9 ]

发信人: nkw (非死非活), 信区: Programming
标  题: Re: FP in C# or F#
发信站: BBS 未名空间站 (Fri Dec  5 01:14:55 2014, 美东)

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

【 在 tan00001 (声明) 的大作中提到: 】
: "c# ADT support is weak" in what way? Can you give any examples?



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 72.]

 
tan00001
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 10 ]

发信人: tan00001 (声明), 信区: Programming
标  题: Re: FP in C# or F#
发信站: BBS 未名空间站 (Fri Dec  5 01:45:28 2014, 美东)

这其实看你的个人喜好了。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.

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



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 68.]

 
nkw
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 11 ]

发信人: nkw (非死非活), 信区: Programming
标  题: Re: FP in C# or F#
发信站: BBS 未名空间站 (Fri Dec  5 02:12:37 2014, 美东)

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.

【 在 tan00001 (声明) 的大作中提到: 】
: 这其实看你的个人喜好了。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。



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 72.]

 
tan00001
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 12 ]

发信人: tan00001 (声明), 信区: Programming
标  题: Re: FP in C# or F#
发信站: BBS 未名空间站 (Fri Dec  5 02:39:32 2014, 美东)

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.

【 在 nkw (非死非活) 的大作中提到: 】
: 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



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 68.]

 
guvest
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 13 ]

发信人: guvest (我爱你老婆Anna), 信区: Programming
标  题: FP in C# or F#
发信站: BBS 未名空间站 (Tue Sep 17 01:20:47 2019, 美东)

楼主已经不来了吧?偶然看到楼主一首诗。非常厉害。10年以上的水平。

--
※ 来源:· 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 47.]

[分页:1 ]
[快速返回] [ 进入葵花宝典讨论区] [返回顶部]
回复文章
标题:
内 容:

未名交友
将您的链接放在这儿

友情链接


 

Site Map - Contact Us - Terms and Conditions - Privacy Policy

版权所有,未名空间(mitbbs.com),since 1996