由买买提看人间百态

topics

全部话题 - 话题: immutable
1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
g*****g
发帖数: 34805
1
immutable string is not a problem, you just need a mutable string
builder when you need efficiency. Actually immutable string improves
memory efficiency, there's only one copy in the VM.
For java you can find StringBuilder/StringBuffer, I guess python
would have something similar.
c*m
发帖数: 1114
2
.net里面的string也是immutable的,这个好像是趋势。原因是string支持连接等操作,
定义成immutable可以避免出现一个string一部分在内存这里,一部分在那里的内存处理
麻烦。。
分片连起来的话可以用stringbuilder,不影响效率。
p*****2
发帖数: 21240
3
来自主题: Programming版 - 一直不习惯immutability
FP的immutability的卖点就是解决多线程的数据同步问题,但是在Node里只是单线程,
不存在数据冲突问题,因此immutability优势瞬间失效。所以学习Node才是王道。Vert
.x也copy了Node的单线程pattern,因此也可学之。
p***p
发帖数: 559
4
来自主题: Java版 - immutable list
I have writen some config data in a List and have to immutable reference,
how? or create a clone copy?
r****t
发帖数: 10904
5
Seriously, strings in python need to be immutable, otherwise they cannot
be used as keys of dicts. I did not know 3.0 has string mutable now.
For your need, StringIO/struct may work just fine. Its there for years. Or
maybe you need to switch to use list instead of string.
h*******c
发帖数: 248
6
3.0有bytearray。这个显然是mutable的。我不反对string immutable,但2.x没有一个
类似buffer的结构,还是很不方便。我这几天一直在反思自己是不是被c之类的
variable概念毒害太深了。实际上我大概想要的是个bytearray,或者buffer,不是
string.
p***o
发帖数: 1252
7
来自主题: Programming版 - 一直不习惯immutability
单线程用immutability防止人犯错是王道。所以你别看java里没有C++的const,
最后还不是整出了unmodifiable colllection这种玩意。

Vert
c******o
发帖数: 1277
8
来自主题: Programming版 - 一直不习惯immutability
unmodifiable is not immutability.
p***o
发帖数: 1252
9
来自主题: Programming版 - 一直不习惯immutability
凑合着用,要不然我想用个immutable的HashSet还得自己造轮子不成 ...
d*******r
发帖数: 3299
10
来自主题: Programming版 - 一直不习惯immutability
但是我觉得单线程(或者单进程)还是只适合 IO bound 的需求吧 (比如 large number
of concurrent connection).
CPU bound 的需求,还是要开多线程和进程的。那样的话 immutability / mutability
还是要考虑的。

Vert
z****e
发帖数: 54598
11
这么做是不是因为依赖了akka的缘故?
immutable真是一个十分无聊的设计
对这个feature实在是无爱
flink只要能改掉这个设计,俺们就换flink
要不然一下storm一下spark的,有些蛋疼
c*********e
发帖数: 16335
12
immutable就是这个值不能变。

发帖数: 1
13
see below:
For example, with the function type
A -> B // functional notation
public B meth(A arg) // how this looks in Java
we have the following:
Let C be a subtype of A, and D be a subtype of B. Then the following is
valid:
B b = meth(new C()); // B >= B, C < A
Object o = meth(new C()); // Object > B, C < A
but the follwoing are invalid:
D d = meth(new A()); // because D < B
B b = meth(new Object()); // because Object > A
hence, to check whether ... 阅读全帖
N*n
发帖数: 456
14
来自主题: Programming版 - 也谈OOP跟FP之争

wasn
我自己查了一下。。总算明白immutable 所指
以下转引
*************************
FP中的函数中的所有变量不允许进行再绑定。在FP中一个变量x当他被赋予一个值1以后
他永远就是1。那么x就被称为是immutable的。相反在imperative语言的里x却是
mutable的,那么当你执行imperative 语言中的某个函数A(x,y)。其x,y会受到某个"遥
远"变量的影响而使得A的结果出现任何一种你未曾经预料到的情况。这称为"side-
effection"-边界效应。而FP中A(1,2)的结果是不会改变的,有什么样的输入一定会有
什么样的输出,因此他是"no side-effection"。
Ajoo这位前人对immutable编程的经验
1。对象状态不会变化,程序bug就会少很多。有一个mutable set函数,在set前和set
后对象就处于两个不同的状态。所以说immutable减少了对象的状态。
2。没有变化,就没有线程同步问题。对象自然是线程安全的。这和用同步(包括用
shared_ptr)不同,后者是通过额外的,需要一定... 阅读全帖
k**********g
发帖数: 989
15

我认为最大贡献其实是 immutability 和 data-flow thinking (value-based
thinking)。
These have contributed changes to database architectures, as well as
application programming. They also make multicore programming easier.
These ideas can be brought back into imperative (procedural) or OO languages.
To bring them back into OO languages, there need to be a kind of immutable
classes: (similar to C++ const keyword)
(1) all class fields are marked "immutable" keyword
(2) if class fields contain references to anot... 阅读全帖
z****e
发帖数: 54598
16
来自主题: Programming版 - 对 (im)mutability 的误解和深度理解
还有一点
对于immutable的目的没有表述出来
因为如果不设置成immutable
在多线程的环境中
就会出现不确定性
那就是输入一致的时候,输出不同
同一个东西有可能出现两种结果
所以干脆全部弄成immutable的,不让你改
所以为了保证这一点
每一次出现新的value,都需要重新生成一个新的变量
这个真心不适合一些特别活跃的物体
适合数字文本处理这些,能够赋值一次,走完整个生命周期
然后销毁,不过这个确定性也可以挪用到其他地方去
oop也可以做成这样,无非包多一层,不要用static var就好了
但是oop一般不要求你做成immutable的,所以不同的状态下
有可能函数结果不同,但是这个东西无非是一个留意嘛
也就是说做成immutable容易搞嘛,oop其实也可以这么做
但是immutable对于那种状态非常活跃的对象,十分不合适啊
需要声明其为mutable heap object,而这么做的话
就不能绝对保证多线程环境下的确定性了,就不是pure fp了
我相信这种东西还是会出现的,比如游戏,游戏实在是不适合做fp
越是即时的越不合适,batch倒是比较适合immut... 阅读全帖
h*i
发帖数: 3446
17
来自主题: Programming版 - 面向数据的编程与面向对象的编程
这个immutable数据结构可不是const, readonly这么简单的概念,也不是小trick,可
见你并不理解immutable是啥意思。
immutable不是说不能改东西,而是说,不在*原地*改东西。所谓改东西,其实是产生
一个新东西。在数据库上用,就是append only,在kafka这种东西上用,就叫
persistent queue.
真正在概念上类似的东西,是copy on write,就是不管改什么,都先copy一个,原来
的不变,在copy上面改。当然如果真copy的话,性能是会很差的。所以immutable数据
结构的技术难点就是如何让人在概念上觉得是copy了,但其实没有copy,至少没有全
copy。实现的办法就是所谓的structure sharing,就是用一个树来track改动,只是
copy改动的树的路径。上述的的算法,最早是Bagwell在2000年的一篇文章《Ideal
Hash Tree》提出的: https://infoscience.epfl.ch/record/64398/files/
idealhashtrees.pdf
Cloju... 阅读全帖
N********n
发帖数: 8363
18
来自主题: Programming版 - 面向数据的编程与面向对象的编程

identity啥的都是说辞。其实就是FP/immutable没那么神。race condition
导致处理mutable问题很复杂。immutable号称可以简化编程。那好,OOP靠边
站,请FP露一手吧。用immutable方式操作银行账户,把原地操作换成FP指定
的copy/append,楼上折腾半天结果连基本的存储操作都搞错。mutable环境下
头疼的RC问题换immutable照样没招,那些copy/append都是无用功。
至于保存immutable数据做audit,那不就是版本控制么。那是软件系统需求,
跟程序语言有啥关系?常用的github / svm / tfs / cvs / perforce 就是
典型的immutable存储。需要的话OOP照样写一个,又不是FP独有的概念。
世界上不是一切都是mutable,但也不是一切都immutable。你开车去加油站,
你的油箱是变成新油箱了,还是就在原箱加满油?你的车轮每转一圈就被复制
成新轮子了,还是原来的老轮子?凡事量身而做,把immutable当成真理然后去
生搬硬套,那是书呆子本末倒置闹笑话。
g****t
发帖数: 31659
19
来自主题: Programming版 - 面向数据的编程与面向对象的编程
所有的数学书,物理书里面的map 都是不改
变量的,函数内也没有状态一说,immutable的思路不能轻视。
从实践来讲。我多年前写的有的code因为是reference transpancy,避免过一次编译器
重大事故。我并不知道什么是fp.
所以我个人看法,凡是明确描述数学物理模型的
代码,尽量和数学定义的函数一致。这样避免自造轮子。
如果需要算法
变种,用别的办法lift up到高一层,不要两种函数混一起。


: identity啥的都是说辞。其实就是FP/immutable没那么神。race
condition

: 导致处理mutable问题很复杂。immutable号称可以简化编程。那好,OOP
靠边

: 站,请FP露一手吧。用immutable方式操作银行账户,把原地操作换成FP
指定

: 的copy/append,楼上折腾半天结果连基本的存储操作都搞错。mutable环
境下

: 头疼的RC问题换immutable照样没招,那些copy/append都是无用功。

: 至于保存immutable数据做audit,那不就是版本控... 阅读全帖
a*****e
发帖数: 1700
20
来自主题: Programming版 - 对 (im)mutability 的误解和深度理解
首先,没有任何 FP 语言是不支持 mutable 的!持有这种观点的,请先去补习一下基
础知识。
鉴别 FP (其实是 declarative)和 imperative 的关键是看它们对 mutability 的区分:
A. every variable is mutable. 多数 duck typed 脚本语言都是这类。
B. mutable by default, immutable by declaration. Java, C, C++ 等勉强属于这类。
C. immutable by default, mutable by declaration. SML, Clojure,
Haskell 属于这类。
然后 B 和 C 都还可以进一步细分,根据 declaration 到底是说变量,还是类型,还
是操作,以下是一些例子。但这之前,有必要先讲讲闭包歧义这个问题:
闭包(Closure)是说将一个函数体里面的非本地变量的值和当前环境(lexical scope
)变量的值做绑定。要弄清楚这里面的语义,在大多数语言里都势必牵涉到一个实现的
问题,就是如果当前环境里一个局部变量... 阅读全帖
o**2
发帖数: 168
21
来自主题: Programming版 - FMP vs ExecutorService/Future
关于immutable objects
首先我要指出的是:immutable objects即不是FMP的goal,也不是FMP的feature,它们
和FMP没有关系。
多线程编程需要immutable objects,这样可以减轻出错的机会。因为你编这些object
的时候,不需要考虑thread safe了。
FMP中的每一个active object都是一个独立的处理中心,FMP保证每一个active object
的impl object及其用到的所有objects,都将运行在同一个单线程环境中。于是,
objects是不是immutable已经不是一个concern了。
FMP的message里的objects是要暴露在不同的线程里的,至少在一个caller object和一
个impl object里,这样就有两个thread了。
FMP的应对是允许用户选择他们觉得合适的messenger implementation。FMP是一个spec
,不同的software vendor可以提供不同的messenger impl。因为messenger impl的成
本很低,比如... 阅读全帖
h*i
发帖数: 3446
22
来自主题: Programming版 - 面向数据的编程与面向对象的编程
你还是概念不清,混淆了两个我前面已经指出的不同概念:mutable变量,一个客观对
象(identity)的属性的变化,这是两个不同的东西。前者是一个具体的计算机实现,
而后者是一个功能需求。
如果你的“inherently mutable”是指一个对象的属性会发生变化,也就是指一个功能
需求,那么,你提这个“inherently mutable”的东西是不能用来作为immutable数据
的反例的,因为immutable数据也是用来实现这种功能需求的一种方法。
如果你的“inherently mutable”是指mutable变量这个具体实现,那么你是可以提这
个来做反例。但是,你没有提出任何问题是mutable变量能解决,而immutable数据不能
解决的。你提到的银行账号问题,这两个实现都有一样的问题,因此你的论证失败了。
我也是基于你的“inherently mutable”是指mutable变量的假设来说这句“没有什么
是inherently mutable的东西“的。我的意思是说,mutable的变量是现实世界中不存
在的东西,是人想出来的概念,然后用一种计算机实现来模拟... 阅读全帖
j*****7
发帖数: 10575
23
来自主题: TrustInJesus版 - [马丁路德-意志的捆绑] 9 神的主权
Sect. IX. — THIS, therefore, is also essentially necessary and wholesome
for Christians to know: That God foreknows nothing by contingency, but that
He foresees, purposes, and does all things according to His immutable,
eternal, and infallible will. By this thunderbolt, “Free-will” is thrown
prostrate, and utterly dashed to pieces. Those, therefore, who would assert
“Free-will,” must either deny this thunderbolt, or pretend not to see it,
or push it from them. But, however, before I establish th... 阅读全帖
a*****e
发帖数: 1700
24
来自主题: Programming版 - functional programming?
如果你要问我,我会说几乎没有什么是 FP 不适合的,就连内核以及嵌入式,FPGA 等
都有 FP 的解决方案。
这里我并不是说内核或者嵌入设备去跑 FP 语言的 runtime,而是说用 FP 的工具设计
的 DSL 跑在内核和嵌入设备上。比如你可以搜一下 se4L,它的一个实现是用 Haskell
写的,被用于证明所生成的内核的正确性。
I'm a big believer in DSL. 合理设计的 DSL 能够快速完成目标 domain 的编程要求
,所需要的只是一个有效的 DSL 开发环境,FP 在这方面非常适合。就象是一套合理设
计的库函数或者框架什么的,能够大幅度提高开发效率。但是库函数的组合调用通常都
是写在源程序里,写好就不可以改动。而 DSL 则是它本身可以被分析重组,写好之后
,还可以用程序处理变换,验证性质,生成高效代码等。元语言 (meta programming)
的技术目前也在抬头,但我认为还是 DSL 更灵活,因为 meta programming 所操作的
对象还是一个 general purpose 的语言所写的程序结构,很多时候我们只需要 domai... 阅读全帖
a*****e
发帖数: 1700
25
来自主题: Programming版 - functional programming?
如果你要问我,我会说几乎没有什么是 FP 不适合的,就连内核以及嵌入式,FPGA 等
都有 FP 的解决方案。
这里我并不是说内核或者嵌入设备去跑 FP 语言的 runtime,而是说用 FP 的工具设计
的 DSL 跑在内核和嵌入设备上。比如你可以搜一下 se4L,它的一个实现是用 Haskell
写的,被用于证明所生成的内核的正确性。
I'm a big believer in DSL. 合理设计的 DSL 能够快速完成目标 domain 的编程要求
,所需要的只是一个有效的 DSL 开发环境,FP 在这方面非常适合。就象是一套合理设
计的库函数或者框架什么的,能够大幅度提高开发效率。但是库函数的组合调用通常都
是写在源程序里,写好就不可以改动。而 DSL 则是它本身可以被分析重组,写好之后
,还可以用程序处理变换,验证性质,生成高效代码等。元语言 (meta programming)
的技术目前也在抬头,但我认为还是 DSL 更灵活,因为 meta programming 所操作的
对象还是一个 general purpose 的语言所写的程序结构,很多时候我们只需要 domai... 阅读全帖
h*i
发帖数: 3446
26
去年底的调查表明,78%以上的Clojure用户是在用Clojure来写Web。
Clojure的哲学是用简单小型的模块来自己组装应用,所以node, rails, djingo那种包
含一切的Web框架不是很流行,不过也是有的,比如说immutant,底层用的是undertow。
在server端的,ring是大部分Clojure Web共用的底层模块,在ring的基础上,
compojure是常见的routing模块, hiccup是很常用的html DSL,等等。其他的各种web
有关的小的库很多,几乎什么功能都有几种不同的选择,看你自己的需求。
Browser端,现在基于react.js的ClojureScript框架很火(om和reagent),原因是
clojurescrip的immutable数据可以让diffing算法比native javascript要快很多。
这样的话,基于react.js的clojurescript框架比react.js本身还要快,听起来这是很
counter-intuitive的,但理解了immutable data, 就会发现其实很自然。di... 阅读全帖
z****e
发帖数: 54598
27
会依次对比node.js, fp, spring, ejb和vert.x的解决方案,然后自己看哪个最好
从最基本的说起,所有语言都一定会有两个东西
一个是变量,我们用var(variable)来表示
另外一个是方法/函数,用func(function)表示
假设有一个函数和一个变量
var var1;
func func1(){
var1 = 0;
return var1+1;//应该是1
}
那现在如果有多个线程并发
那结果会怎样?
那在func1执行完var1 = 0;之后
就有可能有其他线程插入,把var1改成其他值
比如改成var1 = 2; 或者var1 = "goodbug乱入";
那瞬间func1返回值不再是1了,那这个显然是不可接受的
那怎么办?
第一种是fp的做法,fp说,把变量做成immutable
也就是var -> val(value),把var1改成
val1 = 0;
return val1+1;//就一定是1鸟
但是这样为了多线程把所有的参数都搞成immutable鸟
然后你写代码时候,需要时刻提醒自己
常量啊,常量啊,常量啊……
第二种是node.js等... 阅读全帖
z****e
发帖数: 54598
28
会依次对比node.js, fp, spring, ejb和vert.x的解决方案,然后自己看哪个最好
从最基本的说起,所有语言都一定会有两个东西
一个是变量,我们用var(variable)来表示
另外一个是方法/函数,用func(function)表示
假设有一个函数和一个变量
var var1;
func func1(){
var1 = 0;
return var1+1;//应该是1
}
那现在如果有多个线程并发
那结果会怎样?
那在func1执行完var1 = 0;之后
就有可能有其他线程插入,把var1改成其他值
比如改成var1 = 2; 或者var1 = "goodbug乱入";
那瞬间func1返回值不再是1了,那这个显然是不可接受的
那怎么办?
第一种是fp的做法,fp说,把变量做成immutable
也就是var -> val(value),把var1改成
val1 = 0;
return val1+1;//就一定是1鸟
但是这样为了多线程把所有的参数都搞成immutable鸟
然后你写代码时候,需要时刻提醒自己
常量啊,常量啊,常量啊……
第二种是node.js等... 阅读全帖
z****e
发帖数: 54598
29
来自主题: Programming版 - go也是三种paradigm混合的语言
是这样的呀,不同的语言在不同的地方选择了不同的option
最后变成了不同的东西,以满足不同人物的需要
简单说就是oop部分是java(static+mutable),fp部分是clj(dynamic+immutable)
脚本部分是groovy(dynamic+mutable),scala部分是(static+immutable)
当然不是绝对,但是提倡时这样,很好玩啊,四个东西分开了
然后各种框架是j2ee那些,但是这里面scala最有野心
scala最好玩的就是尝试把这一切都给做了,做成一个super超集
变成java+clj+j2ee,甚至现在开始打算包括脚本了,结果很热闹
一切的争议其实都是围绕着object的存在感
object在fp中是被批判的,因为会隐藏其内部属性
所以建议都用map/list etc.
但是我不同意这种看法,我觉得object应该存在
因为diversity,把人简化成一个map/list
变成一组冷冰冰的数字和符号,那这个有些不太对
我相信从属关系才是本质,就像我们人这个皮囊包括了很多内脏一样
上帝造人的时候就是oop啊,细胞也是一个包一个
还有就是... 阅读全帖
h*i
发帖数: 3446
30
immutable是会有存储和运行时间上的overhead,但这些都会被硬件进步和优化技术解
决。研究各种优化技术是计算机科学应该搞的正事,也是计算机科学进步的动力。
目前来说,对绝大多数应用,现有的immutable data structure的效率足够用了。以
Clojure为例,我还从来没听说过有人抱怨过Clojure运行慢的(抱怨启动速度慢的很多
,那是Clojure编译器在JVM上实现的问题,在Javascript上就没有这么明显的问题)。
存储空间的话,我的经验是Clojure程序和一般的Java程序内存消耗差不多。其实如果
仔细研究一下immutable的工作原理,就会发现, 其实它并不会占用更多内存,因为用
不到的数据都会被垃圾回收,而用到的数据immutable和mutable没有太多区别。当然
immutable对垃圾回收器的压力要大些。Clojure有transducer这类技术,可以减少计算
中间结果数据的产生。
除了函数可以被传来传去,还有就是函数都是带closure的,我觉得这很重要。
N********n
发帖数: 8363
31
来自主题: Programming版 - 面向数据的编程与面向对象的编程

append
immutable
"IMMUTABLE"概念在C++/C#/JAVA早有了,那些const/readonly/final关键字
就是干这个用的。"IMMUTABLE"不是万能药,因为RACE CONDITION往往是逻辑
上的错误,不是用几个"IMMUTABLE"变量就能避免的。
如果两个操作同时在一个账户上存钱且彼此之间没有任何同步,那这个账户的
数目最终有可能是错的。账目数字就是个“inherently mutable”的东西,解
决的方式就是要写同步机制代码,强制这两个操作在串行状态下执行。逻辑上
问题,不是弄个IMMUTABLE,append-only之类的小trick就能避免的。
h*i
发帖数: 3446
32
来自主题: Programming版 - 面向数据的编程与面向对象的编程
你还是概念不清楚。
你把变量和identity搞混淆了。identity是逻辑上的一个东西。实现一个逻辑上的东西
及其变化,有两种实现办法,1.用一个变量。2.用一个指针来指向immutable的量。
这两种办法,在逻辑上是一样的。变量你懂, 我就不讲了。
用immutable的数据如何实现一个identity的变化?具体来说,如何实现一个帐户数目
的变化?简单,用指针啊。变化前,指向immutable数A,变化后,指向imutable数B,
就这么简单。所谓immutable数据结构,其实是在玩指针的游戏。明白了么?
至于同时操作一个帐户怎么做,简单,数据库Transaction怎么做的,这儿也同样的办
法。比如两个操作,同时来,其中一个可能要被roll back的,或者retry。这些与
mutable, immutable是没有关系的,两者做法一样,无非是一个是改数,一个是改指针
指向。
z****e
发帖数: 54598
33
来自主题: Programming版 - coroutine comes to Java - Project Loom

immutable还是有用的,verticle之间需要immutable,用cglib做immutable object
type无所谓,用verticle封死就无所谓到底是static还是dynamic,就那点代码,随便玩
然后coroutine/async/await
实践中,对于java程序猿,没有接触过其他环境的java程序猿,纯后端出身的程序猿
我们一般建议先从groovy开始接触其他环境,一般半个小时后就能开始写了
动态类型并没有什么问题,前提是写verticle,然后元数据编程很好用
一个@immutable就能作出immutable了,都不需要自己倒腾cglib了,虽然cglib也不难
如果是以前做安卓的,则建议从kotlin开始接触其他环境
最近idea社区版支持scala啦,开始逐步接触尝试尝试
同时建议写点ruby啊什么的,来锻炼一下脚本的语法糖,蛮好玩的
目标成就:vert.x上全语言制霸
z****e
发帖数: 54598
34
static所处的方法区在最新的jvm impl里面已经被划归到了heap中去了
你就算说它不属于object,就算ide会抛warning,你还是不能改变一个事实
就是写代码可以通过object访问static成员,而且干活的时候这种写法还不少见
static成员也是在类加载的时候才会放入内存,又不是说上来就往内存里面放
多线程环境里面访问static成员也不是什么新鲜事
properties就很喜欢扔给static去存放,而且还都是public final的
这就是immutable
说到底控制的都只是stack的权限,其实多线程说白了,要想控制并发冲突
最简单的就是加synchronized关键字,这个就是对heap加锁做控制
@Immutable这个annotation在jpa中用得比较多
其实现依赖于entity framework本身,你需要一个类似hibernate一样的东西
那怎么写,还不是你自己控制的,immutable这个annotation只是一个标示
本身并不确保这个class是immutable的,但是一般你这么写
就依赖了一个framework,比如hibe... 阅读全帖
j*****7
发帖数: 10575
35
来自主题: TrustInJesus版 - [马丁路德-意志的捆绑] 10 神的主权
Sect. X. — I COULD wish, indeed, that we were furnished with some better
term for this discussion, than this commonly used term, necessity, which
cannot rightly be used, either with reference to the human will, or the
divine. It is of a signification too harsh and ill-suited for this subject,
forcing upon the mind an idea of compulsion, and that which is altogether
contrary to will; whereas, the subject which we are discussing, does not
require such an idea: for Will, whether divine or human, do... 阅读全帖
j*****7
发帖数: 10575
36
来自主题: TrustInJesus版 - [马丁路德-意志的捆绑] 12 神的主权
Sect. XII. — I OBSERVE further, not only how true these things are (
concerning which I shall speak more at large hereafter out of the Scriptures
) but also how religious, pious, and necessary it is to know them; for if
these things be not known there can be neither faith, nor any worship of God
ignorance salvation, it is well known, cannot consist. For if you doubt, or
disdain to know that God foreknows and wills all things, not contingently,
but necessarily and immutably, how can you believe c... 阅读全帖
C*****e
发帖数: 367
37
来自主题: TrustInJesus版 - Glossary to the Westminster Confession
【 以下文字转载自 Church 俱乐部 】
发信人: CCBible (神同在圣经), 信区: Church
标 题: Glossary to the Westminster Confession
发信站: BBS 未名空间站 (Tue Apr 24 21:16:33 2012, 美东)
Glossary to the Westminster Confession
Explanations of all archaic and uncommon words, usages, and expressions, in
the order in which they occur.
Title Confession. n. Public statement of religious beliefs.
1.1 Providence. n. Divine care. Manifest. v. Show. Are they. idiom. T
hey are. Unto. prep. With regard to. Sundry. adj. Separate. D... 阅读全帖
r*****l
发帖数: 2859
38
Well, Java and C++ are not comparable. They focus on
different markets.
Immutable objects have advantages, like:
- thread safe, hence better performance
- sample cache
One example, immutable objects can be used as the keys
of a map w/o worrying too much. If you use mutable
objects as key, you will have huge headache.
A good Java practice: if a class can be made immutable,
then make it immutable. For all classes, it's good to
make them less mutable.

looks
c******o
发帖数: 1277
39
来自主题: Java版 - functional programming why? (转载)
【 以下文字转载自 Programming 讨论区 】
发信人: coltzhao (coltzhao), 信区: Programming
标 题: functional programming why?
发信站: BBS 未名空间站 (Fri Nov 1 14:53:02 2013, 美东)
编了一段FP的code了,来说说我的理解。
FP其实不是编程方式的不同,是实现你想法到working code的方法不同。
大家说起FP,一般都先想到function first.没错,但是FP还有很多很重要但是不为人
了解的侧重点。
1. immutability (不变性),这个很多人说不实用,没错,在某些意义上是不适用。
但是对于非IO瓶颈的项目,你总能把你最看重的那部分分离出来做纯FP,immutable.其
他的继续imperative.其实实际编程时考究的主要是建模/抽象/算法,把它变成
parallellable,其他都容易,FP就是让它容易的工具。让你能多想建模/抽象/算法。
2. lazy evaluation,这个其实也是各种FP强调的一点。也很好,和 immutabi... 阅读全帖
c******o
发帖数: 1277
40
来自主题: Java版 - functional programming why? (转载)
【 以下文字转载自 Programming 讨论区 】
发信人: coltzhao (coltzhao), 信区: Programming
标 题: functional programming why?
发信站: BBS 未名空间站 (Fri Nov 1 14:53:02 2013, 美东)
编了一段FP的code了,来说说我的理解。
FP其实不是编程方式的不同,是实现你想法到working code的方法不同。
大家说起FP,一般都先想到function first.没错,但是FP还有很多很重要但是不为人
了解的侧重点。
1. immutability (不变性),这个很多人说不实用,没错,在某些意义上是不适用。
但是对于非IO瓶颈的项目,你总能把你最看重的那部分分离出来做纯FP,immutable.其
他的继续imperative.其实实际编程时考究的主要是建模/抽象/算法,把它变成
parallellable,其他都容易,FP就是让它容易的工具。让你能多想建模/抽象/算法。
2. lazy evaluation,这个其实也是各种FP强调的一点。也很好,和 immutabi... 阅读全帖
p*****3
发帖数: 488
41
Immutable, pre-compute for query, 不知道为什么还有种加上idempotent的冲动.
http://nathanmarz.com/blog/how-to-beat-the-cap-theorem.html
感觉思路不错,很多地方好像太适合。
好像immutable是个大的原则,就像concurrent hashmap一下。以前是一个vector
clock然后merge, 现在打上个时间戳倒是immutable了,但是在business logic level
还是得merge啊,不是啥玩意打个time stamp就解决了,business level上conflict了
就是conflict了,要merge了还是得merge, Partition了以后不同的地方只能得到不同
的部分immutable的entry再merge,就不consistent了。
Available只是写,读操作没提啊。
batch level建立在hadoop上,也就是hadoop有啥CAP上的限制,这个System就有上限制
,这层都没提.
很好的思想是real time ... 阅读全帖
c******o
发帖数: 1277
42
来自主题: Programming版 - functional programming why?
编了一段FP的code了,来说说我的理解。
FP其实不是编程方式的不同,是实现你想法到working code的方法不同。
大家说起FP,一般都先想到function first.没错,但是FP还有很多很重要但是不为人
了解的侧重点。
1. immutability (不变性),这个很多人说不实用,没错,在某些意义上是不适用。
但是对于非IO瓶颈的项目,你总能把你最看重的那部分分离出来做纯FP,immutable.其
他的继续imperative.其实实际编程时考究的主要是建模/抽象/算法,把它变成
parallellable,其他都容易,FP就是让它容易的工具。让你能多想建模/抽象/算法。
2. lazy evaluation,这个其实也是各种FP强调的一点。也很好,和 immutability 在
一起,能大大简化模型/算法,
2.1 不会有多余的不需要的计算,只有用到的时候才算,而且immutability可以缓存。
2.2 因为只有用到的时候才算,你可以构造无限大小的数据结构。
2.3 很新奇的就是,你还可以用lazy evaluation来构造control ... 阅读全帖
a*****e
发帖数: 1700
43
来自主题: Programming版 - 对 (im)mutability 的误解和深度理解
你如果转而谈论 immutable data structure,那是一个不同的问题,和所有的 data
structure 设计一样,immutable data structure 有它适用的场景(比如实现
persistency),也有它不适用的场景(比如反复 allocation 是一种浪费)。在恰当
的环境下选用恰当的 data structure,无论你用什么语言,都是必须的。
但从语言设计的角度,根本不是什么 immutable data structure 的问题,就是
mutable variable vs immutable variable 的问题,或者进一步说,是 mutability
是否应该反映到 type 层面的问题。
w***g
发帖数: 5958
44
来自主题: Programming版 - FP更接近人的思维
我查了一下,要copy所有的ancester。IP的话tree一般就是用指针实现了,删除操作可
以有效得多。immutable的牛B之处是没有同步问题。当然不能纯immutable。但是
按immutable的套路做data structure,几乎可以做到lock free。C++要有个
immutable的container库就好了。
z****e
发帖数: 54598
45
来自主题: Programming版 - nodejs cluster和vert.x比较怎么样?
verticle之间一般不share data
如果需要share data,则需要通过msg bus来完成
先将需要share的data转换成json,然后发送给其他的verticle
因为json是所有语言都能接受的这么一个数据格式
那json自然就是immutable的,在发送和接收过程中是无法被更改的
好吧,至少msg bus不会尝试去更改msg,这样就不需要lock了
原理跟fp的多线程原理是一样的
但是vert.x很巧妙滴用这种方式,绕开了immutable这个概念
你不知不觉中就用了fp的多线程的那种方式,就是actor model
但是这种方式呢,有些人会说,太麻烦
ok,那就用map这些来分享data
那这个时候就需要做成immutable的object了
因为actor model之间的share datas必需是immutable的
否则会破坏single threadness
但是这个技能有些高级,一般人可以不用
如果需要用的话,这个就很容易理解
另外,vert.x的lock也有,是Cluster-wide locks
不是threads之间share data... 阅读全帖
z****e
发帖数: 54598
46
microservice不是什么只有某个东西才有的概念
你用ejb一样可以microservice
你用习惯了akka,所以觉得akka简单
但是对于新手来说,这个可未必简单
而且概念满天飞,vert.x很少说概念
但是一切又那么自然,比如把final/immutable -> msg
你不需要知道什么是immutable,只需要理解msg
而msg的immutable就很直观,很少有人吃饱了去改什么msg的
并发改就更不可能了,同一个msg改了之后就是另外一个msg
一般人都这么理解的,排除少数吹毛求p的
但是obj可不是immutable的哦
其实很多公司的内部系统,你了解了之后,就会发现
其实就是vert.x,它们自己实现的而已,vert.x也没啥
就是到处抄一抄,然后总结一下
v*****n
发帖数: 30
47
来自主题: Programming版 - 一个用java写spark应用的问题
如题
guava的immutable collection在组合的时候,比如concatenation的时候都是
defensive copy,这和scala的immutable collection在组合的时候行为完全不一样,
我想这主要是因为java没有val,全都是var
java下有没有什么immutable collection能和scala的immutable collection行为一样
呢?谢谢
h*i
发帖数: 3446
48
来自主题: Programming版 - 面向数据的编程与面向对象的编程
race condition和我们讨论的问题没有什么关系。没有人说immutable数据结构是用来
solve race condition的。
我来回顾一下,尝试诊断一下你的思维过程。我在说OOP的封装在数据是immutable的情
况下,会成为不必要的限制。你说没有封装就不能抽象了, 我说没有封装也能抽象。
然后你说immutable是const,readonly啥的小trick,不能解决race
condition.。这个跳跃就很奇怪了,如果你的论证试图是说mutable OOP能解决race
condition, immutable不能,那还情有可原,但你又不是在说这个。总之,你随意从一
个问题跳跃到另一个完全无关的问题,说明你的思维方式很不严谨,不适合做技术工作。
稍微发挥一下。很多老中在技术工作中被认为表达能力不强,表面上说是英文不好。我
个人观察,其实不是英文不好,而是思维方式不符合逻辑,其中文表达的能力也不强。
我说的留美学生大多没文化的现象,可能与语言表达能力和思维方式都有关系。所以我
说教育小孩,特别在早期,要重文轻理,否则问题很大。
h*i
发帖数: 3446
49
来自主题: Programming版 - 面向数据的编程与面向对象的编程
我说immutable让很多编程问题更简单。然后你提出一个编程问题,是immutable与
mutable都有同样的毛病的,这能说明什么呢?如果你认为这就成了immutable不行的“
反例”(你的用词),说明你逻辑思维能力不行。
在计算机上表示加满油的油箱,与空的油箱,必须要用两个不同的数据表征,这没有任
何问题。你提这个来说明immutable是不对的,再次证明你思维有点乱。因为你主观上
觉得这是同一个油箱,与在计算机上需要把他们表示为两个不同的油箱,是没有关系的
。我们在讨论计算机上如何表示更好。
h*i
发帖数: 3446
50
不是文章,而是本书,博士论文很长的。
https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf
但目前实用的函数式数据结构都不是okasaki的这种,而是从Bagwell的ideal hash
tree发展出来的。 https://lampwww.epfl.ch/papers/idealhashtrees.pdf
Bagwell的ideal hash tree本来不是immutable的,Rich Hickey发现它可以很容易变成
immutable的,所以就在这个基础上搞了immutable的vector, map,等等,作为Clojure
的基础数据结构。然后其他的FP语言,比如Scala也开始效仿,在ideal hash tree的基
础上搞了自己的immutable的数据结构。
1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)