跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Go 适合做函数式编程吗?
未分類
14 7 月 2020

Go 适合做函数式编程吗?

Go 适合做函数式编程吗?

資深大佬 : szzhiyang 38

Go 官方说挺适合的,我想听听大家的见解。

大佬有話說 (28)

  • 資深大佬 : zhuangzhuang1988

    搞牛逼技术吧, FP 就是放屁,

  • 資深大佬 : Mohanson

    之前看一个 wasm 虚拟机,4000 行代码,只有函数没有任何 class, 当时觉得真难阅读啊草,几个月后去看已经重构了。

    这个项目是 eth2.0 虚拟机 py 版本,因为它叫 py-wasm, 和我的 pywasm 就差一个横杆所以特别关注过。

    我觉得面向对象是邪说,函数式是歪理,只有 c 的过程式才是永恒的… 别打我。

  • 資深大佬 : dandycheung

    @Mohanson 面向对象并非歪理邪说,它是基于过程式的实践发展出来的。只是主要应用场景不同。不同规模的问题需要对应不同的技术手段。

  • 資深大佬 : Mohanson

    @dandycheung 同意的,适用场景不同

  • 資深大佬 : cmdOptionKana

    @szzhiyang 在你给出的链接里,并没有说 “挺适合”。而且,开篇就非常清晰地列举了 Go 具体支持函数式编程之中的哪几个特性。

    也就是说,支持程度已经非常清晰了。

  • 資深大佬 : pisc

    不适合,别搞。

  • 資深大佬 : pisc

    @zhuangzhuang1988 大哥你要不要搞个 PL 的博士再来大放厥词

  • 資深大佬 : xcstream

    不适合,别搞。
    cpu 指令就是过程式的

  • 資深大佬 : wellsc

    不适合

  • 資深大佬 : TransAM

    任何支持一等函数的语言都适合。

  • 資深大佬 : nguoidiqua

    golang 适合,但不知道你适不适合。

  • 資深大佬 : yuk1no

    不适合,FP 基础设施不够

  • 主 資深大佬 : szzhiyang

    @cmdOptionKana
    @wellsc
    @yuk1no
    @pisc
    @xcstream

    请问 Go 缺少了哪些函数式编程的特性和基础设施使得它不适合做函数式编程?

  • 主 資深大佬 : szzhiyang

    @nguoidiqua 我适合。

  • 資深大佬 : FireFoxAhri

    golang 新手,Scala/Java 开发。我觉得 Go 的基础的数据结构似乎都没有支持 map filter reduce fold 这类操作,而且写代码的时候似乎也是指令式的,一般使用变量。而写 Scala 的时候基本可以做到不使用 var 了,集合操作都用标准库提供的 map fold 来完成,不使用 while

  • 資深大佬 : CosimoZi

    typeclass monad

  • 資深大佬 : ConradG

    支持函数指针 /高阶函数的理论上都能做 FP,无非方便程度的差距
    golang 写 fp 的短板主要是它是强类型语言但类型系统又不够强。这本身也并不阻碍做 fp,但是别的 fp 语言或者有泛型,或者有类型推断,或者有偏特化,相比下 go 就显得不那么适合了。

  • 資深大佬 : reus

    挺好的,记得用 reflect 。

  • 資深大佬 : yukiloh

    if nil…………

  • 資深大佬 : pisc

    @szzhiyang 不要看它支持 first-class function 就说它很“FP”,它支持这个是因为这是一个很基础、有用且重要的 feature 罢了,在 go 的设计里,很多都是反 FP 的理念和设计的,你不信的话你把主流 FP 语言( ML 、Haskell 、Scheme )一些常见的代码试图用 go 来实现你就知道了,主流的 FP 语言都会很强调可组合性,能这么做的前提是要么有灵活的动态类型系统、要么有强大的静态类型系统,go 的静态类型系统太弱鸡了,实现起来很费劲,比如 filter/map/fold 等等(这些只是小例子,很有很多更复杂的)在 FP 很容易实现,在 go 里就很鸡毛,“gopher”们会告诉你 for 一把梭,另外比如像
    @reus 会告诉用 reflect,然而 reflect 是金手指两面刀肥猪拱墙,本质就是用动态类型的方式解决弱鸡的静态类型系统。

    总而言之,不合适,不搭,别搞。

    要玩 FP 就老老实实在主流 FP 里玩,小清新就玩 Scheme 、要血统就玩 SML 、要逼格玩 Haskell 、要振兴 type theory 就玩 Coq/Agda 。

  • 資深大佬 : ica10888

    没有 arrow function,写起来难受。没有泛型,没法类型推断,高阶函数每次用的时候都写一次类型?map 和 slice 我都不知道怎么来支持 map/filter/fold…

  • 資深大佬 : optional

    @szzhiyang 泛型,类型推断

  • 主 資深大佬 : szzhiyang

    @ConradG
    @pisc
    @FireFoxAhri

    感谢你们。感觉你们都认为是 Go 泛型的缺失使其不适合函数式编程,那等 Go 支持泛型后它应该就能适合了吧?

  • 資深大佬 : alphatoad

    https://twitter.com/mosheroperandi/status/856946180810354688?s=21

  • 資深大佬 : pisc

    @szzhiyang 你没理解我的话,我全文都没提过泛型,参数多态只是一个很基础的东西而已,我说的是设计,go 的很多设计是反 FP 的,就算支持泛型也没办法改变,你要不信你可以去玩玩,如果你觉得还不错,那我只能认为你没怎么写过 FP 代码。

  • 資深大佬 : shadownet

    没有肉车 只有肉人 深入研究没什么不可能 有坑填 无轮造

  • 資深大佬 : tairan2006

    Go 和函数式编程没啥关系吧,你不能说支持 function 就支持函数式编程…主你写过 Haskell 么?

  • 資深大佬 : outoftimeerror

    为啥一点要搞函数式,我之前写 scala,我最烦同事引用 scalaz 和 cats 这两个库,后面他跑路了代码都没人维护。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具