Rust 1.0.0alpha小试

早在rust的早期版本,看了文档写hello world还行,写个socket的程序总是报错。错在读取到的内容不是string或者str,而是core::result::Result<collections::vec::Vec, std::io::IoError>,当时想到的是Vec如何转换成字符串,发现没有这个api,而且搜索也没有结果,看github上的代码,发现根本不能用。应该是当时语法变化很大导致的,前面看过几次语法却是有比较大的变化,于是打算等api稳定再学。

最近1.0.0alpha出来了,下了一个试试看,也看到1.0.0alpha的文档已经更新。完整看了下book,感觉清晰多了。然后又参照例子写了一个socket的client来试试。结果还是老问题,开始以为是Vec需要转换成[u8]。结果发现是Result,于是在按api文档里的例子试过几次之后,最后用match获取成功。得到的是Vec,发现没有方法可以直接转换成字符串,也没有方法直接转换成array。用from_utf8的参数也不能是Vec,找的github上的例子还是老样子。于是看了很久文档,发现Vec可以转换成slice,而slice可以转换成字符串。于是改了,发现虽然有几个warning: use of unstable item,但还是编译成功,执行无误。

extern crate collections;
use std::io::TcpStream;
use std::str;
fn main() {
let mut socket = TcpStream::connect("192.168.32.129:80").unwrap();
socket.write(b"GET / HTTP/1.0nn");
let response = socket.read_to_end();
//let r = str::from_utf8(response);
let mut t = match response {
Ok(s) => s,
Err(w) => panic!("{}",w),
};
let c =  match str::from_utf8(t.as_slice()) {
Ok(s) => s,
Err(w) => panic!("{}",w),
};
println!("{}",c);
}

Source: xundaoinfo

windows下编译PHP 5.6

PHP官方教程:https://wiki.php.net/internals/windows/stepbystepbuild

PHP在windows上只能用VS编译,用MingW和Cygwin都会遇到很多问题。之前试过很多次,没一次成功的,后来看到官网的文档,不支持MingW和Cygwin才作罢。

之前查的资料都是setenv /x86或者setenv /x64 是没法用的。

1、首先下载 PHP-SDK ,这些是编译PHP过程中需要的一些辅助工具,如flex,re2c,bison,wget等。下载最新的 php-sdk-binary-tools-20110915.zip,解压到F:php-sdk。解压后,这个目录下有bin和script、share三个子目录
2、 装了个visual studio 2012,打开命令工具。
执行 vcvarsall.bat 如果需要64位,则执行vcvarsall.bat x86_amd64。
如果使用的是vs2013,使用【VS2013 x86 本机工具命令提示】和上面vs2012的一致。但是如果使用的是【VS2013 x64 兼容工具命令提示】则执行vcvarsx86_amd64.bat
之前查的资料都是setenv /x86或者setenv /x64 是没法用的。
然后cd到 F:php-sdk 这个目录
执行 binphpsdk_setvars.bat
执行 binphpsdk_buildtree.bat php56dev
这样,在F:php-sdk目录下多了一个php56dev目录

3、接着继续在 php-sdk 目录下载 deps-5.6-vc11-x64.7z ,并解压到 F:php-sdkphp56devvc11x64目录下。这里面包括了编译PHP和一些常用扩展所需要的基本的包含文件和库文件。

4、下载PHP5.6 最新源代码。 解压到 F:php-sdkphp56devvc11x64depsphp-5.6目录(此处 php-5.6为我们新建的目录 )。

5、可以开始编译了。进入PHP源码目录, c:php-sdkphp56devvc9x64depsphp-5.6,运行buildconf.bat,之后我们就可以用configure.bat –help 命令查看构建选项了。 可以先试着编译php了。最开始,一般编译尽可能少的模块,先让核心能正常编译出来。
configure –disable-all –enable-cli
nmake
稍等一会,php5.6最核心部分及一个命令行工具就编译出来了(这中间的警告信息可以不用顾及)。
cd x64Release_TS
php -m
就可以看到
[PHP Modules]
Core
date
ereg
pcre
Reflection
SPL
standard
[Zend Modules]
然后我们也可以试着加入更多的模块,比如:configure –disable-all –enable-cli –with-sqlite3 –with-mcrypt=static –with-mysqlnd –with-mysql=mysqlnd –with-mysqli=mysqlnd –with-gd –with-mhash –with-curl –with-gettext –with-iconv –enable-mbstring –enable-session

如果要编译php扩展,将扩展解压放到c:php-sdkphp56devvc9x64depsphp-5.6ext 目录下,然后buildconf之后,configure里加上–enable-扩展名就可以了。或者在解压到目录之后,打开扩展目录,直接双击dsp打开VS开始编译。

编译完PHP5.6后,看到PHPNG已经进入PHP源码的master了,也编译了下,用同样的方法也能编译成功,但貌似执行的时候会出错。看开得等到beta或者rc了。

Source: xundaoinfo