stream失败

原创 2004年09月07日 22:29:00

看到SICP中在scheme上做了个很漂亮而且很可爱的stream,实在痒痒,准备用C++/Java来做一个。结果失败,实在郁闷。

C++自然免不了试试templates,虽然平时很讨厌这个东西——变异错误老长不说,没用到的函数还不检查,实在很烦人,不过做做玩具还是可以用用的。用C++的template之后,发现整个stream做完后,求值被分为两个阶段:先由comipler编译(部分求值,确定所有需要的计算),再运行程序,从而要取得stream中的第n个元素,前n个元素,这个n都必须是编译期给定的。这让我极为不快。后来又由于不能直接推导返回类型,一怒之下不做了。实在是做出来都没用的东西……(虽说本来就是玩具)

试试看Java吧,最初感觉挺好做,但有一个难点:delay(proc, arg1, arg2, ...)返回一个Promise,对这个Promise实用promise.eval()要得到proc(arg1, arg2, ...),但arg数目又是不定的……用讨厌的枚举(没参数到n参数)??然后proc又是一个Interface Functor然后一个个派生??太messy了吧!虽说C++就是这么做的,不过现成有个boost::function可用,倒也不费事,更好的是,delay可以用boost::bind来做,实在省力。这里倒好,都要重头来……可变参数在Java 1.5才有,我也懒得弄,况且要每个proc都自己处理检查argument types也不是什么很优雅的事情……不过至少这里是可行的,但由于太丑,也没做下去。

有朝一日可能会用C#/Java1.5来做吧,C++心血来潮也可能继续,再议再议,今天就到此为止了。

?

附录:有关上面提到的stream:

首先介绍一下scheme的基本语法:(proc arg1 arg2)就是以proc为函数名,arg1, arg2分别为参数,调用这个函数,表达式的值就是proc返回的值。(cons x y)就是返回一个(x, y)的二元组,而分别可用(car (cons x y))取得x, (cdr (cons x y))取得y。就这么多了,下面是原书关于stream的连接。

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5

Hadoop Streaming的一些基本知识

Streaming工作原理: 在上面的例子里,mapper和reducer都是可执行文件,它们从标准输入读入数据(一行一行读), 并把计算结果发给标准输出。Streaming工具会创建一个M...
  • hotocde
  • hotocde
  • 2014年03月29日 16:29
  • 1263

Stream语法详解

1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and para...
  • u014082714
  • u014082714
  • 2016年05月16日 11:32
  • 8080

Java8系列--Java Stream入门篇(什么是Stream)

1 知识框架  先上一张图来说明一下Java8中”流”的引进、意义和优势。 2 传统Java集合的不足2.1 传统Java集合  集合是Java中用途十分广泛的一个集合,正是因为它对于数据的处理...
  • qq_33429968
  • qq_33429968
  • 2017年07月16日 21:33
  • 600

Stream benchmark 测试及相关参数说明

Stream介绍Stream测试是内存测试中业界公认的内存带宽性能测试基准工具,作为衡量服务器内存性能指标的通用工具。通过测试过程了解相关参数并记录如下(主要是编译过程的参数值设置),关于stream...
  • ztq157677114
  • ztq157677114
  • 2016年07月18日 12:29
  • 3695

内存测试Stream程序分析(一)--基本参数

Stream测试是内存测试中业界公认的内存带宽性能测试基准工具。作为一个服务器工程师在衡量和评比服务器的性能时,该如何从简单的一个源码使之编译成适合自己的可用的测试工具呢?让我们一起来学习这个基本过程...
  • Michaelwubo
  • Michaelwubo
  • 2015年07月16日 10:11
  • 2650

Java8新特性——StreamAPI(一)

1. 流的基本概念1.1 什么是流?流是Java8引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合。众所周知,集合操作非常麻烦,若要对集合进行筛选、投影,需要写大量的代码,而流是...
  • u010425776
  • u010425776
  • 2016年08月28日 11:41
  • 20000

Java8之Stream语法详解

1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel...
  • tomcat_2014
  • tomcat_2014
  • 2016年04月15日 19:22
  • 2694

C++ 流(stream)总结

C++中流的操作总结
  • luguifang2011
  • luguifang2011
  • 2014年11月10日 17:22
  • 5204

Java8 Stream的几种生成方式

Stream是Java8的重要特性之一。那么生成Stream的方式有哪些? 1, 通过Collections类,2,通过静态方法,例如IntStream.range,Files.walk方法等, 3,...
  • russle
  • russle
  • 2017年01月01日 12:07
  • 1189

《Java8 Stream介绍》

《Java8 Stream介绍》1、为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同...
  • u010412719
  • u010412719
  • 2016年12月08日 21:14
  • 559
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:stream失败
举报原因:
原因补充:

(最多只允许输入30个字)