维坦

感谢您的关注!


  • May
    31

    F# 编译器参数说明 (fsc –full-help)

    Filed under: 编程; Tagged as:

    fsc --full-help

    MSR F# Compiler, (c) Microsoft Corporation, All Rights Reserved

    F# Version 1.9.4.17, compiling for .NET Framework Version v2.0.50727

    Usage: fsc <options> [imported.dll ... ] [file1.ml [file2.ml ...] ]

    基本选项:

      -I <string>: 指定包含的路径目录.

      -r <string>: 引用 F# 或 .NET 程序集.

      -R <string>: 引用 F# 或 .NET 程序集并复制到本地.

      -o <string>: 命名输出文件.

      -a: 生成 DLL.

      -g: 生成调试文件. 如果未指定 -O 时禁用优化.

      --define <string>: 定义给定的条件编译符号.

      -i: 输出程序集的推导接口.

      -doc <string>: 将程序集的 XML 文档写入指定文件.

      -Ooff: 禁用所有的优化, 包括 JIT.

      -O0: 允许 JIT 优化.

      -O1: 允许 JIT 和本地优化.

      -O: 类似 -O2 (未使用 -g 时的默认值)

      -O2: 类似 -O1, 允许跨模块优化.

      -O3: 类似 -O2, 增加内置和对 lambda 表达式的优化.

      --no-mllib:

            不引用 FSharp.Compatibility.dll 或

            open Microsoft.FSharp.Compatibility.OCaml.Pervasives,

            当希望避开对该模块的依赖时很有用.

      --all-warnings: 输出全部警告.

      --no-warnings: 不输出警告.

      --warn <int>: 报告指定的警告.

      --no-warn <string>: 不报告指定的警告.

      --all-warnings-as-errors: 将全部警告视为错误.

      --warn-as-error <int>: 将指定的警告视为错误.

      --gnu-style-errors: 输出 GNU 风格的带行号的错误.

      --namespace <string>:

            定义默认的根命名空间, 包括后来定义的 F# 子模块.

      --open <string>:

            打开指定模块作为每个源文件的初始定义.

      --fullpaths: 编译器生成完整的路径描述.

      --clr-root <string>:

            用于取代编译器寻找 mscorlib.dll 和构造组件的路径. 通常用于

            --cli-version, 编译 Silverlight 或 .NET Compact Framework

      --ml-compatibility: 忽略 OCaml 兼容性警告.

      --ml-keywords:

            将 F# 中不属于 OCaml 的关键字视为标识符.

      --copy-local <string>:

            定位搜索路径中的指定文件, 复制到本地(例如 PDB).

      --compiling-fslib: <internal use only>

      --compiling-mllib: <internal use only>

      --generate-interface-file <string>:

            输出程序集的推导接口到文件.

      --target-exe: 生成命令行可执行文件.

      --target-winexe: 生成不带 stdin/stdout/stderr 的可执行文件.

      --target-dll: 生成 DLL

      --target-module: 生成模块, 用于添加到另一个程序集.

      --auto-resolve: 自动引用 DLLs, 根据名称匹配需要的 F# 模块或命名空间. 实验性.

      -c: 编译成模块 (--target-module) 并且自动解析 (--auto-resolve). 实验性.

      --standalone:

            静态链接 F# 库和所有涉及依赖 F# 库的 DLLs 到生成的程序集. 禁止生成 F#

            接口并优化资源, 同时重命名所有 Microsoft.FSharp 开头的类型, 把它们

            置于目标程序集的内部. 静态链接的程序集中类型名不能重复, 也不能使用代码

            映射程序集中的类型, 并且也不能使用代码暴露 F# 库类型作为 API.

      --static-link <string>:

            静态链接给定的程序集和所有涉及到的 DLLs.

            注意: 使用程序集名称 例如 mylib, 而不是 DLL 名称 例如 mylib.dll.

      --keyfile <string>:

            用给定的 key 文件注册程序集, 就像用 .NET Framework SDK 中的 'sn.exe'

            工具一样. 它为程序集生成强名称. 这仅在生成在不同目录程序之间共享的

            同一程序集时有用, 例如安装到 GAC (Global Assembly Cache).

      --public-keyfile <string>:

            使用给定的公开 key 文件延迟注册. 程序集随后可以使用 .NET Framework SDK

            中的 'sn.exe' 完成注册.

      --retargetable <string>: 指定程序集可以引用 retargetable 形式. 用于创建独立于

            引用 DLLs 发行者的二进制文件.

      --win32res <string>: 指定 Win32 资源文件 (.res)

      --platform <string>: 限定代码可以在哪种平台上运行:

                    x86

                    anycpu

            默认是 anycpu. 其他平台限制规则尚不可用 如 x64 和 Itanium.

      --resource <string>: 嵌入指定的托管资源 (.resource).

            可以使用 resgen.exe 或 resxc.exe 从 .resx 文件生成 .resource 文件.

      --link-resource <string>:

            链接指定的托管资源文件 (.resource).

            格式类似于 <file>[,<stringname>[,public|private]].

            可以使用 resgen.exe 从 .resx 文件生成 .resource 文件.

      --base-address <string>: 用于创建库的基础地址.

      --version-file <string>:

      --version <string>:

            为产生的 .NET 程序集产生版本号 (例如 1.2.0.1).

      --cli-version <string>:

            为指定的 CLI 版本产生代码, 不理会在编译时所安装的运行时 CLI.

            当前版本的 F# 可用值如下:

                    1.0

                    1.1

                    2.0

                    创建标签例如 v2.0.x86chk

            你还需要把正确的 Framework 目录添加到包含路径中

                    --clr-root \WINDOWS\Microsoft.NET\Framework\v1.1.4322

            当然还需要对你的二进制文件运行适当版本的检验, 例如

                    C:\Program Files\Microsoft Visual Studio .NET 2003

                    \SDK\v1.1\Bin\PEVerify.exe

            以确保你和你导入的库没有使用指定 .NET Framework 版本之外的特性.

      --clr-mscorlib <string>:

            指定目标 CLR 上的 mscorlib

      --debug-file <string>:

            命名 debug 输出文件.

      --generate-debug-file:

      --no-debug-file:

            控制是否产生 debug 信息. 与 -g 不同, 它默认不关闭优化.

      --generate-html:

            生成 HTML 文档.

      --html-output-directory <string>:

            输出 HTML 的目录.

      --html-css <string>:

            设置 HTML 文档的 CSS (Cascading Style Sheet).

      --html-namespace-file <string>:

            设置主要的 namespaces.html 文件名称, 假定在输出目录.

      --html-namespace-file-append:

            当生成 HTML 文档时附加到主要的命名空间文件.

      --no-optimization-data:

            仅包括必要的实现内部结构的优化信息. 抑制内部跨模块可以改善二进制兼容性.

      --generate-optimization-data-file:

            将优化信息放入一个 .optdata 文件

      --no-interface-data:

            不将资源添加到产生的程序集当中, 包括用于其他 F# 程序集的接口数据. 程序集

            只能被 .NET 程序集访问.

      --quotation-data:

            这一标志已过时. 代之使用 'ReflectedDefinition' 属性.

      --generate-config-file:

            生成配置文件确保 .exe 运行在 --cli-version 指定的版本上. 文件包含

            'supportedRuntime' XML 元素.

      --jit-optimize:

      --no-jit-optimize:

      --local-optimize:

      --no-local-optimize:

      --cross-optimize:

      --no-cross-optimize:

            细微深入的控制 JIT 本地和跨模块.

      --fast-sublanguage-only:

            限制 F# 语言中很难有效编译的细微规则结构, 为编译器争得更多的优化机会.

            配合下面所有的 --no-ABC 标志. 能显著改善性能.

      --no-inner-polymorphism:

            不允许内部绑定到真正的泛型.

      --permit-inner-polymorphism:

      --no-string-interning: 运行时不保留编译的字符串常量.

      --statistics: 显示编译器统计.

      --progress: 显示编译器进度.

      --no-framework:

            默认不引用 .NET Framework assemblies 程序集.

      --sscli:

            强迫编译器寻找并使用路径中的 SSCLI , 取代 Microsoft CLI.

            生成的调试信息也是 SSCLI 格式的.

      --max-errors <int>: <internal use>

      --generate-filter-blocks:

            生成过滤块以允许第一时间捕获未处理的异常.

      --stamps: <internal use>

      --ranges: <internal use>

      --terms: <internal use>

      --termsfile: <internal use>

      --ilfiles: <internal use>

      --times: <internal use>

      --detuple <int>: <internal use>

      --tlr <int>: <internal use>

      --tlrlift <int>: <internal use>

      --no-env: <internal use>

      --parse-only: <internal use only>

      --typecheck-only: <internal use only>

      --ast: <internal use only>

      --tokenize: <internal use only>

      --testInteractionParser: <internal use only>

      --light: <experimental use only>

      --lightoff: <experimental use only>

      --inline-threshold <int>: <internal use only>

      --extra-optimization-loops <int>: <internal use only>

      --generics:

      --no-generics:

            细微调节是否生成 .NET CLR 通用支持的代码.

      --all-tailcalls:

      --no-tailcalls:

            细微调节是否发出尾部调用注解.

      --closures-as-virtuals:

            细微调节关闭实现.

      --multi-entrypoint-closures:

    No Comments
  • May
    29

    洋葱路由器图解 FireFox+Tor

    Filed under: 随笔;

    Tor:
    https://www.torproject.org/download.html.zh-cn
    建议下载适用于Windows平台的简体中文稳定版
    安装包内的Privoxy是本地代理 不必安装
    安装后无需特殊配置 只要选择是否开机启动就可以了

    FireFox+Tor_Step1

     

     

    FireFox插件:
    http://foxyproxy.mozdev.org/downloads.html

    FireFox+Tor_Step2
    FireFox+Tor_Step3
    FireFox+Tor_Step4
    FireFox+Tor_Step5
    FireFox+Tor_Step6
    FireFox+Tor_Step7
    FireFox+Tor_Step8
    FireFox+Tor_Step9
    FireFox+Tor_StepA

     

     

    常见的规则有:

    • *wordpress.com/*
    • *typed.com/*
    • *blogspot.com/*
    • *wikipedia.com/*

    依此类推, Good luck!

    1 Comment
  • May
    24

    F# Compiler 1.9.4.17 (msi)

    Filed under: 编程; Tagged as:

    2008年5月19日更新 F# 1.9.4.17

    我是在Mail List中看到的
    官网只留下了下载地址 未见更新内容
    根据版本号估计 可能只是更新了较严重的BUG

    BTW: 联想品牌机原装的Ramaxel内存 单根没有问题 两根就会引起蓝屏 怪哉!

    No Comments
  • May
    22

    EAV vs FSharp

    Filed under: 随笔; Tagged as:

    EAV Warn - FSharp 1.9.4.15 fsc

    No Comments
  • May
    19

    灰色维坦 以示哀悼

    Filed under: 随笔;

    2008-05-12 14:28

    5月18日, 为表达全国各族人民对四川汶川大地震遇难同胞的深切哀悼, 国务院决定:

    • 5月19日至21日为全国哀悼日, 下半旗致哀, 停止公共娱乐活动.
    • 5月19日14时28分起, 全国人民默哀3分钟, 鸣笛 鸣警报.
    • 与此同时, 奥运圣火传递也将暂停三天.
    No Comments
  • May
    15

    过滤路径和文件名中的特殊字符

    Filed under: 编程; Tagged as:

    工作中碰到的一个问题:
    控件的标签对应的是文件名, 如何有效过滤用户输入的内容, 以保证文件名符合规则呢?

    .NET平台果然够强大,  拥有两个静态方法, 分别代表在路径和文件名里禁止使用的字符数组.
    Path.GetInvalidPathChars()
    Path.GetInvalidFileNameChars()

    之后我第一个想到的是字符串的Replace()方法:
    let str = "123#4"
    str.Replace("#", "")

    可是对于Replace(oldChar, newChar)这种重载的使用, 却碰到了一些问题.
    str.Replace('#', '')
    str.Replace('#', Char.MinValue)
    两个都不行

    那就把字符数组转换成字符串数组吧

    let cleanFileName str =
        let rec repeat (s :string) invalidCharList =
            match invalidCharList with
            | h :: t -> repeat (s.Replace(h, "")) t
            | [] -> s
        Path.GetInvalidFileNameChars()
        |> List.of_array
        |> List.map (fun x -> x.ToString())
        |> repeat str
     

    虽然说问题能够得到解决, 但总觉得有点缺憾, 接下来我想到了String.Split()方法, 此方法不正是需要Char[]这样的参数么?

    let cleanFileName (str :string) =
        let join s = String.Join("", s)
        Path.GetInvalidFileNameChars()
        |> str.Split
        |> join
     
    Path.GetInvalidFileNameChars() 使用特殊字符数组
    str.Split 把字符串拆分开来
    join 然后连接在一起

    哈~ 汉编如果能做到这样, 会有很多人认同的.

    要是连可读性都不要了, 也可以写成这样:

    let cleanFileName (str :string) =
        String.Join("", str.Split(Path.GetInvalidFileNameChars()))
     
    No Comments
  • May
    9

    F#装箱(box)与拆箱(unbox)

    Filed under: 编程; Tagged as:
    // int装箱 此时o的类型是 obj
    let o = box 1
    // 常规的拆箱方法是
    let a = unbox<int> o
    let b : int = unbox o
    let c = o :?> int
     
    // 如果把元组装箱呢?
    let o = box (1, "a")
    // FSI显示数据类型是 int * string
    // 以下三种方法都通过了
    let a = unbox<int string *> o
    let b : (int * string) = unbox o
    let c = o :?> int * string
     
    // 接下来把一个表装箱
    let o = box [1; 2; 3]
    // 用unbox拆箱表是可行的
    let a = unbox<int list> o
    let b : (int list) = unbox o
    // 但是下面这句却不行
    let c = o :?> (int list)
    // 感谢code17的指正
    // 由于多余的括号 误把list当成了int的参数了
    // 正确写法是:
    let c = o :?> int list
     
    // 同理 array与option的拆箱方法:
    (box [|"a"; "b"|] :?> string array)
    (box (Some(1)) :?> int option)
     

    之前以为这些集合类型是不能动态拆箱的, 还由此得出了错误结论, 再次感谢code17的及时指正.

    2 Comments