Google 浏览器
官网: http://tools.google.com/chrome
离线包: http://cache.pack.google.com/chrome/install/149.27/chrome_installer.exe
漫画书: http://www.cnbeta.com/articles/63690.htm
相关新闻已经满天飞了, 不多说了, 用这个发篇日志之后继续试玩… 响应速度太快的有点不太适应.
Google 浏览器
官网: http://tools.google.com/chrome
离线包: http://cache.pack.google.com/chrome/install/149.27/chrome_installer.exe
漫画书: http://www.cnbeta.com/articles/63690.htm
相关新闻已经满天飞了, 不多说了, 用这个发篇日志之后继续试玩… 响应速度太快的有点不太适应.
F# 2008年9月 CTP 版提供了开发应用程序所需的工具和资源 (原文说”全部”, 真的全部吗?).
F# 是 .NET Framework 上的函数式编程语言. 它兼具简洁,易于表达和组合,运行时,运行库,互操作,.NET对象模型等特点.
F# 适合许多开发任务 - 从交互式探索脚本到基于组件的大规模软件开发. CTP 版本的 F# 对探索式开发提供进一步的支持, 同时改进了与 Visual Studio 的整合, 增进基于工具的大规模软件开发
F# CTP 有两个可用的版本 MSI 和 ZIP. Windows 用户应该安装 MSI, 可以安装所有的工具, 并且与 Visual Studio 2008 整合. 非 Windows 可以保存并解压 ZIP 查看说明书 README-fsharp.html.
源代码可以排序了, 右键菜单上虽然没有显示快捷键, 但是可以通过按 ALT + Up/Down 来换位.
CTRL + E, C 注释的时候不再是 (* *)
了, 而是与 C# 相同的多行 //
.
CTRL + K, F 代码格式化仍然不可用, 哭…
智能感知比之前流畅了些, 但仍有待提高, 回车换行后仍然不能自动缩进.
#r
引用现在只能用于 .fsx 文件#r
引用注册表 AssemblyFoldersEx 中的程序集时不必指定路径. (指在添加引用对话框中默认可见的程序集, 例如可以直接 #r "System.Xml.Linq.dll"
)#load
对智能感知也会有作用.#use
被移除了.度量单位的推导与检查
1 | [<Measure>] |
轻量级语法
#light
和 #light "off"
在 .fs .fsx .fsi 文件中是必须的, 但在 .ml 和 .mli 文件中隐含为 #light "off"
.
隐式转换
可能之前你已经听说过 F# 放弃隐式转换的一个理由是类型推断, 但是适当的时候如果能实现自动 Upcast 也不错:
1 |
|
改进工程实践
#nowarn
的范围扩大到文件末尾 (为什么不是项目末尾?)
open 打开命名空间必须指定完整路径
1 | open System |
命名空间缩写 模块缩写不能用于命名空间
1 | module WF = System.Windows.Forms // 错误 因为 Forms 不是模块. |
assert 现在与 System.Diagnostics.Debug.Assert 相同, 在 Release 版本中忽略.
AutoOpenAttribute
1 | // 当命名空间被打开时, 模块也随之自动打开. |
支持 COM 自动和可选参数
操作符的定义更加简单
1 | type Receiver(latestMessage:string) = |
分割操作 自定义分割操作符变的更加简单
1 | e1.[e2opt.. e3opt] --> e1.GetSlice(arg2,arg3) |
序列和计算表达式 省略执行命令时的 do 前缀
1 | let s = |
内置函数也会产生代码
改进调试 增强了单步调试, 虽然这已经是 .NET 上其他编译器都具备的, 但在 F# 编译器上必须禁用 tailcalls (—optimize- notailcalls)
反射 Microsoft.FSharp.Reflection 更趋向于 .NET 内置的反射.
可用的命名空间:
Expr<_>
变成 Expr
的子类型.let f (x:int) = <@ 3 + x @>
let f (expr:Expr) = <@ 3 + %expr @>
事件和委托
new Event<args>()
或者指定委托类型 new Event<delegate,args>()
.ev.Trigger(args)
或 ev.Trigger(sender,args)
ev.Publish
IHandlerEvent<_>
被删除.1 | type MyControl() = |
已删除的特性
'a -> string
. 因此 string.Format 不可用, 使用 System.String.Format 代替. 同样 string.Empty 也不可用.'a -> 'a
(支持所有带 Truncate 静态方法的浮点型)type ty
改为 typeof<ty>
和 typedefof<ty>
[<AbstractClass>]
let Node(x,l1,r1) = idxToNode(m1) // 不总是函数定义
F# PowerPack
FSharp.PowerPack.Linq.dll PowerPack 支持通过 LINQ 表达式引用编辑和赋值
1 | open Microsoft.FSharp.Linq.QuotationEvaluation |
或许这个标题会让你觉得很是不解.
还是先说说为什么会产生这个荒唐的想法吧:
对于 WCF 来说最应该出现的地方应该是 IIS 中, MSDN 上的例子也是以 IIS 作宿主的居多. 但是我要存放的东西并不多, 所以我并不想用 IIS, 对于静态的页面和 Silverlight 倒还好说, 用 F# 实现的异步并发袖珍静态网站服务器在响应速度方面一点也不亚于 IIS. 至于 WCF, 几经打拼终于自承载了(Self-Host) .
一切看起来已经没问题了, 可是我又一次败给了我的完美主义… 之前因为要解决 Silverlight 的跨域访问, 曾经在官方论坛上使用了一种构造 Message 的方法成功的把 clientaccesspolicy.xml 返回给客户端了, 这让我变的不安分起来, 要是我能把任意类型的文件返回给浏览器, 那我还自己实现网站服务器做什么?
本来应该承载在网站中的 WCF, 如今却要扮演网站的角色, 你中有我, 我中有你, 这听起来很有趣, 我曾经这样解释给我的一个朋友听: 我要养鱼, 可我不想麻烦换水, 我希望我的鱼自己会吐出清洁富含氧气的水.
但是如何实现呢? 似乎不管是什么都逃不过序列化这一关,
返回字符串?
结果根结点是 String.
返回 FileStream 或 MemoryStream?
够狠! 根结点仍然是序列化后的结果.
构造 Message 么?
我有想过, 我曾经想改变 Xml 数据主根结点名为 html, 但字符串内容被转义丢失了所有符号.
为此郁闷了好久, 但结果却让我非常意外, 以至于我都不想写什么演示代码
微软其实早就留好了后门: Stream
对~ 就是这么简单 你只要把各种流 Upcast 为 Stream 就 OK 了! 哭~
感谢和羡慕官方论坛上的 rico.sauve, 能用英文做关键词来进行搜索真好, 我就是找不到中文资料又不知道英文如何表述所以才会郁闷这么久…
参考:
How to: Create a Service That Returns Arbitrary Data Using The WCF Web Programming Model
在AutoCAD开发中, 如果想要在命令行输出结果之前插入时间, 你会怎么做?
当然最直接的就是拼接字符串了, 又或者定义静态方法来调用
之前有次在群里, 好多人对我的一段F#代码惊讶不已. 下面就是把好多人雷到的Super Code:
1 | type Editor with |
看到了吗? 我给Editor”增加”了一个WriteWithTime方法! 这叫什么? 狗尾续貂? 貂尾续狗? 汗… 它的学名叫: 扩展方法
如果可以这样写程序会怎么样? "用户密码".MD5()
DateTime.GetMyBirthday()
之所以我给[增加]二字括上了引号, 是因为Editor其实没变, 障眼法而已, 人称语法糖, 目的是让你写代码更舒服, 可事实上和定义静态方法也没什么区别, 深入的我也说不清楚, 看看C#3.0该怎么实现这个吧: 注意: 这是C#3.0的新特性, 因此也只能用于VS2008. 更详细的信息请参考: http://msdn.microsoft.com/zh-cn/library/bb383977.aspx
1 | using System; |
运行结果:
命令: netload
命令: test1
WriteMessage - 普通输出.
命令: test2
[15:52:00.2029960] WriteWithTime- 带时间输出.
命令: Okey如我所愿
未知命令"OKEY如我所愿"。按 F1 查看帮助。
命令: 囧...
未知命令"囧..."。按 F1 查看帮助。
昨天收到的VS2008SP1中文版推出正式版的消息, 赶忙下了个.
似乎我每次安装该系列产品都不会顺利, 这次也没让我失望, 直接就给我来了个错误, 提示让我到网站上去找个预安装前的准备工具.
我已经习惯于此, 还在群里调侃说:”微软的安装包真是越来越微软了!”
OK 有问题就解决问题, 边下载那个清理工具, 边查看自述说明, 发现其中一条是符合我的, 我装过Silverlight 2 beta2. 于是卸载掉, 包括之前提过的一个VS补丁, 再次安装结果还是不行…
和我过不去, 那怎么能行, 我的钻牛角尖的毛病又犯了. (有人因此说我工作一定很闲 T_T)
卸载VS2008重装, 这次停在了另一个地方: 进度条走到升级.NET Framework 3.5 sp1的时候出了问题, 丢给我一个错误日志:
Microsoft .NET Framework 3.5 \’package\’: [2] Failed to fetch setup file in CBaseComponent::PreInstall() ……. WapUI: [2] DepCheck indicates Microsoft .NET Framework 3.5 \’package\’ is not installed.
找不到.netfx3.5??? 怎么会呢? 那我就重来, 把VS2008以及一切由它带进来的牛鬼蛇神全都清出去, 其中.netfx3.5在卸载的时候还真的碰上了问题, 幸好找到了一个专用的清理工具 dotnetfx_cleanup_tool.zip, 将.netfx3.5这个大神给请了出去.
重装VS2008的过程倒是没碰上什么问题, 只是装SP1的话问题依旧.
我无奈的仔细翻着自述文件, 突然发现一段:
在未安装 .NET Framework 2.0 SP2 和 .NET Framework 3.0 SP2 的 Windows Vista 计算机上安装 Visual Studio 2008 SP1 时,可能会显示要求重新启动计算机的 Windows 自动更新通知。若允许立即重新启动 Windows Update,则将导致 Visual Studio 安装程序失败。
解决此问题的方法:请将重新启动推迟到 Visual Studio SP1 安装完成后再执行。
我亲爱的微软兄弟, 你是要婉转的告诉我打开Windows Update服务么? 那可是我装系统之后习惯性关闭的第一批服务啊? 你难道这么不了解用户的使用习惯吗?
以前曾经开玩笑的说, Win2k8桌面上已经没有”我的电脑”了, 有的只是”计算机”, 也就是说装好Win2k8以后老老实实的用就行了, 千万别乱碰, 因为那已经不再是”你”的电脑了~!~
通讯的发展让人们的交流变的越来越容易, (例如QQ群).
一些人会精心构思一些”生动有趣的”或”感人肺腑的”消息以图大面积传播, 更有甚者还要在文末加上某种利益的诱惑及恶毒的诅咒. (例如转发会变太阳升会员, 或者不转发会如何霉运甚至伤及家人)
且不论”始作俑者”当初是以何心态, 单说那些被动传播者, 举几个典型的例子:
没有时间观念:
没有场合观念:
没有道德观念:
在这一系列事件中, 我觉得真正有危害的倒不是那些编写谣言的人, 因为编写者往往是出于某些利益考虑, 所谓人不为已天诛地灭, 为利益而编造也算是无可厚非.
但是那些传谣者呢? 你们的目的是什么? 你们有目的么? 你们有思考么? 你们有看过么?
Brian 是微软 F# 项目组成员
在他的博客里谈到了目前 CTP 版本的一些细节:
2008-07-22 第一弹:
截图一张: (点击放大 不是很大 T_T)
放大后粗步推断 F# 项目很有可能是高贵的紫色调 (相比 C# 的绿和VB.NET的蓝)
2008-07-28 第二弹:
研究院版本的 F# 缺少常规的 Add Reference 对话框.
在即将到来的 CTP 版中会具备这一特性. (注意项目图标, 果真是暗紫色调!)
同时还有工程到工程的引用, 方便混合语言编程.
2008-08-04 第三弹:
如果直接添加已存在的文件, 会创建一个副本.
有了添加为链接(Add as Link), 各项目重用文件方便了.
使用msbuild命令行编译时, 需要设置.fsproj如下:
接下来是文件排序, 在右键菜单里实现上移和下移, 不知道是否支持Drag&Drop.
还可以直接添加到上面或下面