golang 是函数式语言吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
alangz
V2EX    Go 编程语言

golang 是函数式语言吗?

  alangz
xyalan 2015-04-23 11:00:51 +08:00 2846 次点击
这是一个创建于 3839 天前的主题,其中的信息可能已经有所发展或是发生改变。

有了解一些函数式编程的概念,刚刚开始接触golang。自己是做Java开发的,对函数式编程还是很迷惑,虽然知道lisp、scala是函数式语言。

问题:golang是函数式语言吗?

16 条回复    2015-07-21 14:20:58 +08:00
signifox
    1
signifox  
   2015-04-23 11:06:55 +08:00
负责任的告诉你,不是。
推荐Rust或Scala
datou552211
    2
datou552211  
   2015-04-23 11:09:19 +08:00
@signifox 为什么是这两个语言。
monnand
    3
monnand  
   2015-04-23 11:15:26 +08:00 via Android
函数式语言的最大特征是没有side effect。纯粹的函数式语言是haskell。不太纯的比如lisp。go绝对不是
mingzhi
    4
mingzhi  
   2015-04-23 11:21:10 +08:00
@signifox Rust 不算函数式吧
函数式又有系别之分
Lisp家族:
LISP Scheme
ML家族 :
OCaml F#

Haskell Erlang不属于以上系别

好像是这样分的
zhyu
    5
zhyu  
   2015-04-23 11:35:05 +08:00
@mingzhi
Functional programming languages, especially purely functional ones such as Hope and Rex, have largely been emphasized in academia rather than in commercial software development. However, prominent functional programming languages such as Common Lisp, Scheme,[2][3][4][5] Clojure, Racket,[6] Erlang,[7][8][9] OCaml,[10][11] Haskell,[12][13] and F#[14][15] have been used in industrial and commercial applications by a wide variety of organizations.

http://en.wikipedia.org/wiki/Functional_programming
mingzhi
    7
mingzhi  
   2015-04-23 11:41:15 +08:00
@zhyu 你意思是 rust也算函数式?
zhyu
    8
zhyu  
   2015-04-23 11:54:58 +08:00 via iPhone
@mingzhi 我的意思是函数式不那么分系别的… 一般只分纯不纯
xua131988
    9
xua131988  
   2015-04-23 12:00:53 +08:00
绝对不是

Golang这B 感觉很难写出具有美感的代码, 吸引我的唯一地方就是, 编译成一个文件丢到服务器就搞定.
java这货, 各种依赖, 一不小心体积就到几百M了
scala那个play尼玛也是几十M
yukirock
    10
yukirock  
   2015-04-23 14:37:23 +08:00
@monnand

理解稍有偏差。

函式言最大的特徵是,函是一等公民:像其它言中的量一,函可以作其它函,可以作返回值其它函返回,可以在其它函部明。函式言依函之的用合比的。

有副作用或者有中是 __ 函式言的特徵,像 Javascript,Python 支持函式式的言然有副作用。
notcome
    11
notcome  
   2015-04-23 16:26:19 +08:00
说广一点,能把函数传的满天飞的都算是函数式编程语言了,Javascript 啊,C++ 11 啦,都可以算。

狭义一点来看,无非就是按照 Lisp/ML/Haskell 系列来分,允不允许一点副作用(Haskell 不允许,通过 monad,unsafePerformIO 不算),还有是不是惰性求值。此外,有没有类型系统,类型系统有多强也算是一个区别,Lisp 就没有类型系统,Agda 这种语言……dependent type……我是没看下去。

代表的话,Lisp 是 Clojure Scheme Racket 之流比较火;ML 无非是 SML、OCaml、F#,Haskell 系……PureScript 算吗二三三。

至于 Golang,当然不算了。
windyboy
    12
windyboy  
   2015-04-23 16:50:35 +08:00
scala 是语言
scala play 是full stack framework
两件事
njutree
    13
njutree  
   2015-04-23 17:18:23 +08:00 via iPhone
应该是过程式,函数式的概念很极端的
hooluupog
    14
hooluupog  
   2015-04-23 17:18:28 +08:00
不是,而且也不打算往那方面靠拢。
很多FP里面的东西直接拿来往Go里面套也是不行的。
比如一切都是不可变的,一切皆为表达式,DSL,continuation,curry,monad transform,global type inference,patern matching,algebraic type等等等等。Go编译器也没有做尾递优化的打算。

和java最大的不同是Go支持一等函数,Go基于组合而不是面向对象(用type embedding 和interface实现inheritance的效果)。同时Go里面一切都是通过值传递的,这也是和java不同的地方。

Go属于命令式语言。
hhkbp2
    15
hhkbp2  
   2015-04-23 23:46:42 +08:00
不是,go是命令式
tangplin
    16
tangplin  
   2015-07-21 14:20:58 +08:00
Swift 和 Rust 类似,也可以算是函数式语言.
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     908 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 26ms UTC 18:36 PVG 02:36 LAX 11:36 JFK 14:36
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86