由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 最近喜欢上了把人类输入和语言逻辑分开的风格
相关主题
今天看一段spark程序快吐了C++ IDE under Linux
一年多前我发了几个贴子关于FP的想法你身边有这样的人吗?--- code stylist
如何建立比较好的文档系统?写Java程序不用IDE,那心灵得多强大啊
谁能说说Perl, Python, Tcl各自的优缺点?主要应用场合?FP的教材是怎么误导人的
Refactoring long class step by step (2)对PyCharm屈服了……
请问一下Matlab GUI 里面 调用目录下一个network.mat的问题CUDA 和 Hadoop 是不是算并行和分布的两个比较有前途的技术?
inline functions in C++akka/scala/jvm
Refactoring long class step by step (1)MapReduce 过时了?Google 发布 Cloud Dataflow
相关话题的讨论汇总
话题: tuple话题: 逻辑话题: c#话题: 风格话题: 数据
进入Programming版参与讨论
1 (共1页)
n******7
发帖数: 12463
1
我也不知道这算是什么风格
举个例子,对不同类型数据进行一些操作
有些共同的处理,也有些类型特异的操作
具体还需要根据数据有些部分做一些分支判断
直接写就是各种if/for 语句,最多做些refactoring增强可读性。
我感觉这样做人类的逻辑被编程语言的语法给稀释了
很难在脑子里面建立一个清楚的处理逻辑
这样就有可以引入bug,维护代码也比较头疼
我的做法是对这样数据格式化,用一种统一的形式表示它们
然后把所有的语言处理逻辑写在一起,就是给出一条格式化过的数据,经过一套处理就
得到结果了。
具体到我用的C#,我一般用一个tuple来统一的表示格式化的数据
用一堆func/action的组合来表示处理过程,这个组合最后就是一个大的func/action
整个处理过程就是给一个tuple的集合,挨个用这个func/action加工一下就好
这个tuple本身就包含了输入数据以及对加工处理方法的一些高级指示
只要看看tuple的内容就基本明白这坨代码是要怎么工作了
希望我表述清楚了
我挺喜欢这种方式,不知道有没有什么术语就是描述这种风格的?
如果有,我想深入学习一下
g****t
发帖数: 31659
2
Tuple是只读的吧?你的function没有状态吧?不然组合起来很麻烦。
Immutable 数据结构,加上无状态的函数组合,就是functional 编程
(无类型那种)吧。看一下lisp, clojure ?
另外也许还可以看下data flow programming。
另外你描述的这套办法,对GUI应该很难使用。backend类似于信号处理的地方我觉得可
以用。
n******7
发帖数: 12463
3
对,没有状态,其实就是数据处理机
其实包括function的建立,也可以用一组tuple来描述
我最近做的是一个事情就是用一个binary decision tree(不知道有这个名词没)
来描述一个数据处理的逻辑
而每个逻辑分支都是用一个tuple描述:(test,if-true, if-false)
这样用一组tuple就描述了整个处理逻辑
不用写一堆if-else判断一层套一层了
所有的逻辑一屏不到就看完了,觉得很适合内存不大的人脑
我一直喜欢clojure,虽然一直处于入门状态
不过我们在dotnet上开发
不知道F#能不能一战
另外clojure是动态语言
我用C#这样写的时候总觉得静态类型有些局限
但是我的老大禁止我用reflection,因为performance的缘故,也确实是没必要,如果
我不非要这样写的话。

【在 g****t 的大作中提到】
: Tuple是只读的吧?你的function没有状态吧?不然组合起来很麻烦。
: Immutable 数据结构,加上无状态的函数组合,就是functional 编程
: (无类型那种)吧。看一下lisp, clojure ?
: 另外也许还可以看下data flow programming。
: 另外你描述的这套办法,对GUI应该很难使用。backend类似于信号处理的地方我觉得可
: 以用。

n******7
发帖数: 12463
4
看了下data flow programming,感觉有那么点意思
但是再一看语言,居然基本都没见过,除了simulink和VHDL
VHDL还是最近从FPGA组刚听来的。。

【在 g****t 的大作中提到】
: Tuple是只读的吧?你的function没有状态吧?不然组合起来很麻烦。
: Immutable 数据结构,加上无状态的函数组合,就是functional 编程
: (无类型那种)吧。看一下lisp, clojure ?
: 另外也许还可以看下data flow programming。
: 另外你描述的这套办法,对GUI应该很难使用。backend类似于信号处理的地方我觉得可
: 以用。

p***o
发帖数: 1252
5
远有hadoop/spark近有tensorflow/pytorch

【在 n******7 的大作中提到】
: 看了下data flow programming,感觉有那么点意思
: 但是再一看语言,居然基本都没见过,除了simulink和VHDL
: VHDL还是最近从FPGA组刚听来的。。

n******7
发帖数: 12463
6
tensorflow/pytorch不是做DL的吗
也算data flow?
data 流过一层层网络?

【在 p***o 的大作中提到】
: 远有hadoop/spark近有tensorflow/pytorch
p***o
发帖数: 1252
7
是这样,就是个可以用GPU加速还可以对某些输入求导的DFG。

【在 n******7 的大作中提到】
: tensorflow/pytorch不是做DL的吗
: 也算data flow?
: data 流过一层层网络?

n******7
发帖数: 12463
8
这个不够通用啊

【在 p***o 的大作中提到】
: 是这样,就是个可以用GPU加速还可以对某些输入求导的DFG。
n******7
发帖数: 12463
9
搜到一篇文章,虽然有点旧
Basics of Dataflow Programming in F# and C#
https://www.codeproject.com/articles/107121/basics-of-dataflow-programming-
in-f-and-c
g****t
发帖数: 31659
10
这文章不太靠谱。
我的浅见:
1。有状态的类里面不搞啥纯函数了。放public void updateX(double[][] x)之类的
用reference的update方法。
2。纯函数单独放一个类。参考下Java自带的math类。
3。全部贯彻纯函数不太现实。因为需要大量的copy。
函数参数假如是个高维数组,多数语言进去函数里面都是地址。
数组小的话,函数里第一行copy一下就好。大的话,只能用reference了。
最后,一个功能模块一个写法更合适。一个办法写到底是很难搞的。oo在很多地方是必
须的。functional的办法写信号transfer方便易懂。但是大量数据有时候要copy。会乱
。另外functional无法方便的处理GUI,传感器信号IO listener等等。画图更不用说了。
最后。一个办法写上几万行,自然就碰到毛病和各种修了。我认为具体大于抽象,不宜
执着。

【在 n******7 的大作中提到】
: 搜到一篇文章,虽然有点旧
: Basics of Dataflow Programming in F# and C#
: https://www.codeproject.com/articles/107121/basics-of-dataflow-programming-
: in-f-and-c

相关主题
inline functions in C++你身边有这样的人吗?--- code stylist
Refactoring long class step by step (1)写Java程序不用IDE,那心灵得多强大啊
C++ IDE under LinuxFP的教材是怎么误导人的
进入Programming版参与讨论
g****t
发帖数: 31659
11
tensorflow方法论混乱。越来越乱。

【在 n******7 的大作中提到】
: 这个不够通用啊
d******c
发帖数: 2407
12
专家系统的规则集合
if else不嵌套是好事

【在 n******7 的大作中提到】
: 我也不知道这算是什么风格
: 举个例子,对不同类型数据进行一些操作
: 有些共同的处理,也有些类型特异的操作
: 具体还需要根据数据有些部分做一些分支判断
: 直接写就是各种if/for 语句,最多做些refactoring增强可读性。
: 我感觉这样做人类的逻辑被编程语言的语法给稀释了
: 很难在脑子里面建立一个清楚的处理逻辑
: 这样就有可以引入bug,维护代码也比较头疼
: 我的做法是对这样数据格式化,用一种统一的形式表示它们
: 然后把所有的语言处理逻辑写在一起,就是给出一条格式化过的数据,经过一套处理就

n******7
发帖数: 12463
13
嗯,今天仔细看了一下这个文章
对于我的需要overkill了
我是实用主义派,那种写法简洁高效优雅就怎么写
我们大组有个project,虽然也是C#的,但是通篇functional style, monads啥的
我是看的挺累
写这个的高手升职了,后来maintain这个项目的小哥苦不堪言
感觉就是文言和白话的区别

【在 g****t 的大作中提到】
: 这文章不太靠谱。
: 我的浅见:
: 1。有状态的类里面不搞啥纯函数了。放public void updateX(double[][] x)之类的
: 用reference的update方法。
: 2。纯函数单独放一个类。参考下Java自带的math类。
: 3。全部贯彻纯函数不太现实。因为需要大量的copy。
: 函数参数假如是个高维数组,多数语言进去函数里面都是地址。
: 数组小的话,函数里第一行copy一下就好。大的话,只能用reference了。
: 最后,一个功能模块一个写法更合适。一个办法写到底是很难搞的。oo在很多地方是必
: 须的。functional的办法写信号transfer方便易懂。但是大量数据有时候要copy。会乱

l******t
发帖数: 55733
14
pattern match?
n*w
发帖数: 3393
15
写企业应用要自己定义monad的机会不多。一直做对此有刚需的项目。
n******7
发帖数: 12463
16
update一下
还没有code review,只是standup提了一下
有同事表示阅读有困难
想想没必要当个强推自己风格的asshole
又花了点时间改成一般的oop风格
改的过程中就因为各种判断逻辑东一块西一块
老要对照改之前的一片描述逻辑的code来写
感觉还是喜欢自己的风格
另一个感觉是C#不适合这种写法
实现的很丑,跟自己水平有限也有关系吧
这也是同事不喜欢的原因之一
Lisp应该好很多,不过我估计没机会用clojure
计划再把F#捡起来看看能不能一战
1 (共1页)
进入Programming版参与讨论
相关主题
spark就是因为吃饱了要做rdd成immutable导致了无法实现真正意义上的stream processing吧?Refactoring long class step by step (2)
有人熟悉google cloud dataflow吗请问一下Matlab GUI 里面 调用目录下一个network.mat的问题
狗的dataflow是什么inline functions in C++
Apache Beam bs Apache sparkRefactoring long class step by step (1)
今天看一段spark程序快吐了C++ IDE under Linux
一年多前我发了几个贴子关于FP的想法你身边有这样的人吗?--- code stylist
如何建立比较好的文档系统?写Java程序不用IDE,那心灵得多强大啊
谁能说说Perl, Python, Tcl各自的优缺点?主要应用场合?FP的教材是怎么误导人的
相关话题的讨论汇总
话题: tuple话题: 逻辑话题: c#话题: 风格话题: 数据