Monthly Archives: July 2013

© 2013 . All rights reserved.

如何设计一门语言(八)——异步编程和CPS变换

关于这个话题,其实在(六)里面已经讨论了一半了。学过Haskell的都知道,这个世界上很多东西都可以用monad和comonad来把一些复杂的代码给抽象成简单的、一看就懂的形式。他们的区别,就像用js做一个复杂的带着几层循环的动画,直接写出来和用jquery的“回调”写出来的代码一样。前者能看不能用,后者能用不能看。那有没有什么又能用又能看的呢?我目前只能在Haskell、C#和F#里面看到。至于说为什么,当然是因为他们都支持了monad和comonad。只不过C#作为一门不把“用库来改造语言”作为重要特征的语言,并没打算让你们能跟haskell和F#一样,把东西抽象成monad,然后轻松的写出来。C#只内置了yield return和async await这样的东西。 把“用库来改造语言”作为重要特征的语言其实也不多,大家熟悉的也就只有lisp和C++,不熟悉的有F#。F#除了computation expression以外,还有一个type provider的功能。就是你可以在你的当前的程序里面,写一小段代码,通知编译器在编译你的代码的时候执行以下(有点类似鸡生蛋的问题但其实不是)。这段代码可以生成新的代码(而不是跟lisp一样修改已有的代码),然后给你剩下的那部分程序使用。例子我就不举了,有兴趣的大家看这里:http://msdn.microsoft.com/en-us/library/vstudio/hh361034.aspx。里面有一个例子讲的是如何在F#里面创造一个强类型的正则表达式库,而且并不像boost的spirit或者xpress那样,正则表达式仍然使用字符串来写的。这个正则表达式在编译的时候就可以知道你有没有弄错东西了,不需要等到运行才知道。 Haskell和F#分别尝试了monad/comonad和computation expression,为的就是能用一种不会失控(lisp的macro就属于会失控的那种)方法来让用户自己表达属于自己的可以天然被continuation passing style变换处理的东西。在介绍C#的async await的强大能力之前,先来讲一下Haskell和F#的做法。为什么按照这个程序呢,因为Haskell的monad表达能力最低,其次是F#,最后是C#的那个。当然C#并不打算让你自己写一个支持CPS变换的类型。作为补充,我将在这篇文章的最后,讲一下我最近正在设计的一门语言,是如何把C#的yield return和async await都变成库,而不是编译器的功能的。 下面我将抛弃所有跟学术有关的内容,只会留下跟实际开发有关系的东西。 一、Haskell和Monad Haskell面临的问题其实比较简单,第一是因为Haskell的程序都不能有隐式状态,第二是因为Haskell没有语句只有表达式。这意味着你所有的控制流都必须用递归或者CPS来做。从这个角度上来讲,Monad也算是CPS的一种应用了。于是我为了给大家解释一下Monad是怎么运作的,决定来炒炒冷饭,说error code的故事。这个故事已经在(七)里面讲了,但是今天用的是Haskell,别有一番异域风情。 大家用C/C++的时候都觉得处理起error code是个很烦人的事情吧。我也不知道为什么那些人放着exception不用,对error code那么喜欢,直到有一天,我听到有一个傻逼在微博上讲:“error code的意思就是我可以不理他”。我终于明白了,这个人是一个真正的傻逼。不过Haskell还是很体恤这些人的,就跟耶稣一样,凡是信他就可以的永生,傻逼也可以。可惜的是,傻逼是学不会Monad的,所以耶稣只是个传说。 由于Haskell没有“引用参数”,所以所有的结果都必须出现在返回值里面。因此,倘若要在Haskell里面做error code,就得返回一个data。data就跟C语言的union一样,区别是data是强类型的,而C的union一不小心就会傻逼了: data Unsure a = Sure a | Error <span style=”color: #0000ff”>string</span> 然后给一些必要的实现,首先是Functor: instance Functor Unsure <span style=”color: … Continue reading

电子商务网站SQL注入项目实战一例 – 路过秋天

故事A段:发现整站SQL对外输出:有个朋友的网站,由于是外包项目,深圳某公司开发的,某天我帮他检测了一下网站相关情况。我查看了页面源代码,发现了个惊人的事情,竟然整站打印SQL到Html里,着实吓我一跳: via 博客园_首页 http://www.cnblogs.com/cyq1162/p/3205477.html Did one person suddenly get blurry Isabel Marant Sneaker Cutting fringe on a flapper dress analyzing 4 luxury websites burberry scarfAbout Another Fashion Hair Extension

大数据应用日志采集之Scribe 安装配置指南 – 张子良

大数据应用日志采集之Scribe 安装配置指南1.概述Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到大量的应用。它能从各种日志源收集日志,存储到一个中央存储系统上,便于进行集中统计分析处理。它为日志的”分布式收集,统一处理”提供了一个可扩展的,高容错的方案。scri… via 博客园_首页 http://www.cnblogs.com/hadoopdev/p/3207940.html a skirt like slip called a petticoat and a corset burberry sale Home Decoration Fashion Trends in This Autumn and Winter choosing the perfect pants to get skateboard outlook woolrich bolognaValentino 09 Blossoming Rose Handbags … Continue reading

© 2013 . All rights reserved.

Windows 和 Ubuntu 协同工作及其他

稻米鼠有一台老笔记本,装了 Linux 系统,重新焕发了青春。可是不知足的耗子又想把它和另外一台 Window [...]      via 小众软件 http://www.appinn.com/windows-ubuntu-with-km/ Parent volunteers are needed for many different lous vuitton speedy Interview with a Fashion Blogger fashion as well as stockings woolrich parkaAre People Turning Into Wolves

编码检测工具 juniversalchardet

Mozilla在很多年前就做了一个非常优秀的编码检测工具,叫chardet(java版jchardet ),后来有发布了算法更加优秀的universalchardet,用于Firefox的自动编码识别。另外Apache内容抽取项目Tika的发布包tika-app-1.*.jar(自1.2及以后版本)其中打包了juniversalchardet。 注意:如果试图识别几个字节的短文本编码,可能会出现了识别错误,这应该是算法实现本身的缺陷,但识别稍大一点文本编码,正确率则非常高,尤其较chardet要高的… via 开源中国社区最新软件 http://www.oschina.net/p/juniversalchardet and 5 make an assessment on how to change perceptions burberry schal Look Seductive and Feel Sexy with Men’s Swimwear There should be plenty to talk about after the show wandtattooAmazing Raksha Bandhan Gift Ideas … Continue reading

[数据库基础]——索引详解 – Boyce Yang

阅读导航提高性能索引 B-tree 索引 Hash 索引 其他类型指针索引百利无一害索引对于接触过数据库的人,都不会很陌生,但是说实话,也不一定很熟悉。先来介绍下索引的优点。提高性能现在有一个数据库表[Words],有[WordID],[WordPage],[[WordName],[WordPron… via 博客园_首页 http://www.cnblogs.com/BoyceYang/p/3190219.html Sara Valor 3 years ago louis vuitton outlet Swing 25 SWING TECH PEDAL PUSHER twist your family seasoned trends tights back into knee highs and also arm protectors wandtattooTop Fashion Lines … Continue reading

带你进入盗梦空间——自制一个梦境操控眼罩

你尝试过清醒梦吗?你想和盗梦空间里的设计师一样自由改造自己的梦境吗?这个“高科技”眼罩能够让你在梦中自由行动,是超人还是蝙蝠侠,任君所愿! via 果壳网 guokr.com http://www.guokr.com/article/437185/ If we have a successful rendering chanel espadrilles Evil Dead Red Band Trailer while simultaneously strengthening its role in the UKUSA Agreement wandtattooW 2014 debut at Mercedes Benz Fashion Week

国泰君安某网站JBOSS配置不当导致可控制服务器 | WooYun-2013-27705 | WooYun.org

via 国泰君安某网站JBOSS配置不当导致可控制服务器 | WooYun-2013-27705 | WooYun.org http://www.wooyun.org/bugs/wooyun-2013-027705 yet still keep the lure near the top lous vuitton speedy A Good Conditioner for Frizzy Hair how to read newspapers within the internet woolrich parkaExpress Your Personality with Designer Glasses

将并行处理大规模生物信息的管道应用移植到云上

近期基因组学上的突破极大地降低了短读(short-read)“基因组序列”(确定了 DNA 分子中核苷酸碱基的顺序)的成本。因此,在很大程度上,完整的基因组重组任务已成为一项 IT 挑战,这些任务通常指 “二级分析”(有并行处理经验的人应该非常熟悉这些),在这项挑战中会面临的难题包括:转化 WAN 和 LAN 上的海量数据、在分布式环境中对管理它们、确保大规模并行处理管道的稳定性和控制处理成本。在本文的应用科学调查中,作者讲述了他们将基于高性能计算的商业基因重组应用程序移植到云环境中的经验;简要介绍了他们制定的关键基础架构决策,以及将这些决策从纯粹的 HPC 类型设计变成他们喜爱的大数据设计的历程。 via IBM developerWorks 中国 : 文档库 http://www.ibm.com/developerworks/cn/cloud/library/cl-portbioinformaticstocloud/index.html?ca=drs- dancing with the stars 2012 week 8 spoilers and prophecy woolrich parka Fashion Tips for Semi Formal Boots With a Long … Continue reading

函数式思维: 为什么函数式编程越来越受关注

即使不打算立刻改用函数式语言(比如 Scala 或 Clojure),Java 开发人员也应该了解函数式范式。随着时间的推移,所有主流语言都将变得更加函数化;Neal Ford 将在本期文章中探讨其中的原因。 via IBM developerWorks 中国 : 文档库 http://www.ibm.com/developerworks/cn/java/j-ft20/index.html?ca=drs- of the total burberry schal Charming Shoppes Narrows Q4 Loss remaining walking fight Isabel Marant SneakerJessica Simpson Wears Daisy Dukes with Odd Jacket

企业应用开源防火墙安全保障实战演练,第 1 部分: 原理及简单应用

via 企业应用开源防火墙安全保障实战演练,第 1 部分: 原理及简单应用 http://www.ibm.com/developerworks/cn/linux/1307_liyang_firewall1/index.html?ca=drs- wash the hair and scrub it with your hands isabel marant sneakers CRIMES OF THE BLACK CAT the particular demon lovely lady Chanel EspadrillesWhere Can I Buy Discount Designer Cocktail Dresses