显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

为着理想勇敢前进

 
 
 
 
 
 

基于Stateless Future的Scala异步编程(四)await、for和yield

2014-7-29 9:32:28 阅读10 评论0 292014/07 July29

本文首发在岂凡技术小站

forawait的冲突

Scala提议标准scala.async有个缺陷:不支持for循环1。比如,类似这样的代码无法编译:

import scala.async.Async._ val xs = Seq(1, 2, 3) async { for (x <- xs) { await(async(x * 2)) // 编译错误 } }

作者  | 2014-7-29 9:32:28 | 阅读(10) |评论(0) | 阅读全文>>

基于Stateless Future的Scala异步编程(三)欠条的状态

2014-7-17 13:11:30 阅读38 评论0 172014/07 July17

本文首发在岂凡技术小站

欠条可以分为两类:无状态欠条和有状态欠条。

有状态欠条

有状态欠条的类型为Future.Stateful,从Future派生。

有状态欠条表示正在进行中的操作。可以通过value

作者  | 2014-7-17 13:11:30 | 阅读(38) |评论(0) | 阅读全文>>

基于Stateless Future的Scala异步编程(二)欠条

2014-7-2 22:28:48 阅读63 评论0 22014/07 July2

本文首发在岂凡技术小站


Future是指尚未完成的操作。在异步编程中,这些操作结果将来会在操作完成后,再传给回调函数。换句话说,一个Future对象,就是一张将来可能兑现的欠条

兑现欠条

有两种语法等待一张欠条兑现,awaitfor推导式1风格。

await等待欠条兑现

调用await方法的语义是导致执行流暂停,一直等到欠条兑现才返回。await的返回值就是欠条兑现的结果。我在前一节中讲过,await会被Future宏替换成onComplete

作者  | 2014-7-2 22:28:48 | 阅读(63) |评论(0) | 阅读全文>>

基于Stateless Future的Scala异步编程(一)初印象

2014-6-26 14:33:49 阅读71 评论0 262014/06 June26

Stateless Future是我为岂凡开发的异步编程框架,是岂凡下一代QForce游戏引擎的服务器基础库。

本文首发在岂凡技术小站

我们岂凡也一直在招聘,如果你有意,请看看招聘需求。我很期待能与牛人成为伙伴。


前些日子,岂凡已经将Stateless Future及其相关的工具库开源。Stateless Future用途广泛,我们认为,在网络和文件IO、Actor模型的并行计算、基于状态机的人工智能领域中,如果应用Stateless Future的异步模型,都能比传统的Java/Scala的同步风格或事件风格的代码,更为简练,更易于学习和维护。


初印象

Scala一门静态类型语言,融合了函数式和面向对象的编程范式

作者  | 2014-6-26 14:33:49 | 阅读(71) |评论(0) | 阅读全文>>

老诗新译

2014-4-19 0:02:11 阅读134 评论4 192014/04 Apr19

我把一首脍炙人口的古诗翻译成了英文。

Future Song

The Future flatMaps a Future.
The Future tailcalls forever.
My life to await the Future.
It comes OutOfMemoryError.

能猜到是哪首诗吗?

答案在这里:https://github.com/Atry/stateless-future#future-song

作者  | 2014-4-19 0:02:11 | 阅读(134) |评论(4) | 阅读全文>>

Justin Donaldson博士点评几大Haxe异步框架

2013-2-24 2:39:11 阅读576 评论0 242013/02 Feb24

译者按:Justin Donaldson博士是牙买加卫生部的技术顾问,BigML公司的创始人。他最近发布了一个开源库Promhx,通常用来控制node.js等异步流程。

接着就有人问:您的大作和haxe-continuationhx-async相比如何?(注:haxe-continuation是鄙人拙作,在Haxe+Node.js+continuation打造高性能高开发效率服务器架构中介绍过)

Justin Donaldson博士做出了以下答复:

作者  | 2013-2-24 2:39:11 | 阅读(576) |评论(0) | 阅读全文>>

Dotsies是加速英文阅读的神器吗?

2012-12-16 1:59:24 阅读658 评论2 162012/12 Dec16

最近我花了不少时间来学习Dotisies。Dotsies是用点构成的拉丁字母。比如这一句用Dotsies写的文字:

Dotsies是加速英文阅读的神器吗? - 杨博 - 为着理想勇敢前进

它其实相当于英文的dotsies is here

以下是Dotsies的字母表,和拉丁字母一一对应:

Dotsies是加速英文阅读的神器吗? - 杨博 - 为着理想勇敢前进

官网说Dotisies节省横向空间,学熟了以后认单词都是认整个轮廓的,所以读得很爽。听起来很有道理吧,我想以后用它编程省空间啊,一个屏幕可以竖排好几个编辑窗口,还可以提高我阅读代码的速度。所以我就决定去学Dotsies了!


学了一会发现不对劲,咋这单词就这么难认呢?从我使用的感受而言,dotsies甚至比英文的识别性更差。

作者  | 2012-12-16 1:59:24 | 阅读(658) |评论(2) | 阅读全文>>

那么,尼古拉斯的Haxe支持自动CPS转换吗?

答案是,不提供原生支持。

还记得上篇中提到的抽象语法树宏吗?有了宏,我们根本不需要Haxe原生支持CPS转换,我们可以自己为Haxe添加语言特性。haxe-continuation正是一个基于宏实现的CPS转换

安装

至此,Haxe+Node.js+continuation都已经介绍完毕。最后,我将介绍这三大技术开发环境搭建的完整过程:

  1. 下载并安装Node.js:http://nodejs.org/download/
  2. 下载并安装Haxe:

作者  | 2012-11-24 18:16:19 | 阅读(1296) |评论(2) | 阅读全文>>

我在Haxe+Node.js+continuation打造高性能高开发效率服务器架构(上)中谈过了JavaScript的第一个死穴——功能弱。今天谈谈第二个死穴——Callback Hell

Callback Hell

假如你想用Node.js创建一个文件夹,然后在这个文件夹中建立五个文件,大概你需要这样写:

writeAll = function(fd,content,callback) {
var totalWritten = 0;
var continue5 = null;
continue5 = function() {

作者  | 2012-11-13 0:14:42 | 阅读(1294) |评论(0) | 阅读全文>>

目前存在许多服务器框架,它们的上手难度有高有低,性能也有高有低。但是,现在在地球上开发复杂逻辑的应用服务器时,能达到顶级异步IO性能,同时只需要低水平程序员就能理解和维护的技术架构的,只有Haxe+Node.js+continuation

Node.js的优势和死穴

最近Node.js很流行。Node.js的优势是:

  • 使用JavaScript语言。JavaScript很简单,学习难度低。
  • 性能好。全部采用异步IO,性能

作者  | 2012-10-27 18:26:42 | 阅读(1710) |评论(7) | 阅读全文>>

今天去工商局办事,别人送我的桌游

2012-8-10 21:54:52 阅读395 评论2 102012/08 Aug10

这两天办公司注册,跑工商局好累。最后他们奖给我一副连连看的桌面游戏:
连连看的桌面游戏! - 杨博 - 为着理想勇敢前进

动画版:
连连看的桌面游戏! - 杨博 - 为着理想勇敢前进

好玩极了

作者  | 2012-8-10 21:54:52 | 阅读(395) |评论(2) | 阅读全文>>

只要能修好我的硬盘,我甘愿成为一名好人

2012-8-4 1:50:34 阅读315 评论2 42012/08 Aug4

老外有个软件叫ISO to USB,号称可以把光盘映像放到U盘或移动硬盘上启动。

我把移动硬盘分了两个区,我打算把一张启动盘做到其中一个新分区上。于是我就高兴的打开了ISO to USB,然后选择了新的那个分区。然后……

我的移动硬盘两个区上的所有东西就都没了……

在这万念俱灰的时刻,我想起了一句古老的咒语:

只要能修好我的硬盘,我甘愿成为一名好人 - 杨博 - 为着理想勇敢前进
好人修电脑,坏人床上搞

只要能修好我的硬盘,恢复我的数据,我甘愿成为一名好人。我在好人卡前宣誓:

作者  | 2012-8-4 1:50:34 | 阅读(315) |评论(2) | 阅读全文>>

Debian squeeze的PPTP VPN客户端配置翻墙

2012-8-1 11:47:02 阅读510 评论0 12012/08 Aug1

apt-get install ppp pptp-linux resolvconf

必须安装resolvconf不然DNS会出问题。

因为我们是为了翻墙,所以要修改/etc/resolvconf/interface-order,把VPN的DNS优先级设置得高一些。这样做可以避免DNS污染。

vim /etc/resolvconf/interface-order
# interface-order(5)
lo.inet*
lo.dnsmasq
lo.pdnsd
lo.!(pdns|pdns-recursor)
lo
tun*

作者  | 2012-8-1 11:47:02 | 阅读(510) |评论(0) | 阅读全文>>

怎样玩《跑跑龟》才能欺负人

2012-5-13 12:34:03 阅读346 评论0 132012/05 May13

怎样玩《跑跑龟》才能欺负人 - 杨博 - 为着理想勇敢前进

《跑跑龟》是个很简单的桌游。基本上接触过桌游的人都玩过吧。看上去《跑跑龟》没啥策略性,输赢也就看运气而已。这么想你就错了,跑跑龟其实是个浅度策略游戏,如果你按以下方式玩,胜率可以达到80%。(注:本文是按“同时到终点时上面的乌龟赢”的规则来写的)

  • 中前期没用的牌可以随便出,但有用的牌要留着。所有的牌按有用程度排序如下:
    1. 任意颜色乌龟前进两格
    2. 自己颜色乌龟前进两格
    3. 任意颜色乌龟前进一格
    4. 自己颜色乌龟前进一格
    5. 任意颜色乌龟后退一格
    6. 特定颜色乌龟后退一格
    7. 最后一名乌龟前进两格
    8. 其他颜色乌龟前进两格
    9. 最后一名乌龟前进一格
    10. 其他颜色乌龟前进一格

作者  | 2012-5-13 12:34:03 | 阅读(346) |评论(0) | 阅读全文>>

简单还是复杂?

2012-4-25 20:16:54 阅读556 评论0 252012/04 Apr25

作者:Martin Odersky

译者:杨博

原文:Simple or Complicated ? 

最近我们在激烈讨论,有人说Scala对正常程序员来说很复杂,有人说Scala其实是一门编码很简单的语言。有两个帖子在讨论(http://michid.wordpress.com/http://warpedjavaguy.wordpress.com/2010/08/02/the-scala-is-t

作者  | 2012-4-25 20:16:54 | 阅读(556) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 

License

 
 
模块内容加载中...
 
 
 
 
 
 
 
 

广东省 深圳市 双鱼座

 发消息  写留言

 
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
日志评论
评论列表加载中...
 
 
 
 
 
 我要留言
 
 
 
留言列表加载中...
 
 
 
 
 

八方来客

 
 
模块内容加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2014

创建博客 登录  
 加关注