llvm clang编译

1 安装 下载的最新的3.4, http://llvm.org/releases/download.html#3.4 Clang source code (.sig) LLVM source code (.sig) Compiler RT source code (.sig) 官方安装文档:http://llvm.org/docs/GettingStarted.html#getting-started-quickly-a-summary 下载的源码主要解压到正确目录就行了. mkdir build cd build ../configure make make install 编译的二进制文件在llvm-3.4/build/Release+Asserts/bin 搞定了 clang --version clang version 3.4 (tags/RELEASE_34/final) Target: x86_64-unknown-linux-gnu Thread model: posix 源里边最新的是3.3的 2 写一个c的hello world
#include 

int main() {
  printf("hello world\n");
  return 0;
}
听说clang比gcc速度快。 clang hello.c -o hello 这里和gcc生成一样的系统执行文件 生成llvm的字节码文件 clang -O3 -emit-llvm hello.c -c -o hello.bc 两种形式运行 ./hello lli hello.bc
Read more...

ubuntu使用yin语言

好吧,我先把yin语言的java代码看了个差不多才想编译一下,主要原因还是想打印点测试的东西,并不是想写点什么。 总的来说像淫神说的,写得代码却是容易阅读。我java只是上学的时候开过课,再没用过,看的过程中只查了两三个的函数就看完了。看完了发现写个括号语言不算太难0 0,我的意思仅仅是学习知识不是编写一个可以用的语言。编译原理的课也开了,都是理论,传说中的龙书又是啥书的,我几分钟看来一遍,感觉和课本没什么区别。看一个编写初期的代码更容易理解一些东西。以前也想自己实现过,想想解析代码的复杂程度就怕了。 环境需求,参照github的wiki上。 java jdk 1.7,ubuntu12.04自带好像是openjdk 我以前搞安卓游戏的时候换过了。 maven 3.2 我直接从官网下载的二进制版本,http://maven.apache.org/download.cgi。解压到/opt/maven-3.2.1,vim /home/a0x55aa/.bashrc,添加export PATH=/opt/maven-3.2.1/apache-maven-3.2.1/bin:$PATH。source一下。mvn -version看一下。应该没问题了 然后mvn compile,自动下了一堆的东西0 0。pom.xml配置文件也看不懂。 mvn exec:java -Dexec.mainClass="org.yinwang.yin.Interpreter" -Dexec.args="tests/assign1.yin" 又下载了一堆东西。。。java果然不是一般人能搞的。我草。太恶心了,都不知道什么用。
Read more...

rust学习--函数,链表

函数
fn line(a: int, b: int, x: int) -> int {
    return a * x + b;
}
使用fn定义个函数,参数是在括号里边的name:type对,->后面跟返回值类型。 最后一行没有分号,可以省略return,将最为整个代码段的值返回。返回空或者(),可以不写返回类型。函数参数支持模式匹配。
fn first((value, _): (int, f64)) -> int { value }
析构函数 析构函数用来定义处理文件,socket,对内存的释放。当不再访问之后,对象的析构函数将被调用,防止访问释放的资源可能会产生的动态错误。当一个任务失败,在任务中的所有对象析构函数将被调用。 定义一个链表
enum List {
    Cons(...),
    Nil
}
enum List {
    Cons(u32, ~List),
    Nil
}
哈哈 像极了clisp里边的列表, Cons应该是一个元组,元组第一个元素u32,第一个元素指向list的下一个元素。 上边的定义类似递归的思想,list有两种情况,nil是list,Cons(u32, ~List)也是list。第二种情况里边又包含一个list,这个list也应该是前边两种类型。哈哈 Cons这个名字可以随便起的,不过最好还是不改的。官方文档没有说明,多少有点疑惑(读英文文档也没自信,不知道对不对) 波浪号是必须的,表示一个指向list类型值的指针。
let list = Cons(1, ~Cons(2, ~Cons(3, ~Nil)));

              
Read more...

rust学习-数据结构

结构体
struct Point {
    x: f64,
    y: f64
}
let mut mypoint = Point { x: 1.0, y: 1.0 };
let origin = Point { x: 0.0, y: 0.0 };

mypoint.y += 1.0; // `mypoint` is mutable, and its fields as well
origin.y += 1.0; // ERROR: assigning to immutable field
match mypoint {
    Point { x: 0.0, y: yy } => println!("{}", yy),
    Point { x: xx,  y: yy } => println!("{} {}", xx, yy)
}

match mypoint {
    Point { x, .. } => println!("{}", x)
}
如果结构体变量是可变的,那么结构体里边的变量也是可变的。,..表示你忽略别的所有其他struct成员变量。 枚举
enum Direction {
    North,
    East,
    South,
    West
}
enum Color {
  Red = 0xff0000,
  Green = 0x00ff00,
  Blue = 0x0000ff
}
enum Shape {
    Circle(Point, f64),
    Rectangle(Point, Point)
}
use std::f64;
fn area(sh: Shape) -> f64 {
    match sh {
        Circle(_, size) => f64::consts::PI * size * size,
        Rectangle(Point { x, y }, Point { x: x2, y: y2 }) => (x2 - x) * (y2 - y)
    }
}
第一个元素没有定义值,默认为0,依次加1。当为整数型,可用ad操作符转换成整数。进行匹配的时候,下划线代表忽略一个,”..“表示忽略所有。 元组
let mytup: (int, int, f64) = (10, 20, 30.0);
match mytup {
  (a, b, c) => println!("{}", a + b + (c as int))
}
元组结构体
struct MyTup(int, int, f64);
let mytup: MyTup = MyTup(10, 20, 30.0);
match mytup {
  MyTup(a, b, c) => println!("{}", a + b + (c as int))
}
相比元组,元组结构体有名字,所以Foo(1,2)和Bar(1,2)是不同的类型值。 只有一个元素的结构体元组是”newtype“,新名字是一个新类型,而不是一个已存在类型的别名。 碉堡的用法:
let length_with_unit = Inches(10);
let Inches(integer_length) = length_with_unit;
println!("length is {} inches", integer_length);
看完第五节,我已经想大体看完写点程序了。前边大部分也能看看程序就大体知道啥意思,不过还是把英文说的小细节看了一下。看到这里我觉得rust比golang更好,说不上来是不是细节的用法,他们有很多相似,但是感觉rust更顺眼一些。看的过程中我都怀疑是不是一帮人搞的两个差不多的东西。。
Read more...

rust学习-控制结构

if语句的判断式必须是bool类型的,不能有隐式的转换。如果if分支里边最后是一个值,那么每一个分支都必须是一个值。 match语句类似c的switch。当找到一个匹配项,只执行改分支,不需要加一个break。一个分支匹配多个不同的值用“|”分隔。可以用“M..N”表示两个数字值范围。下划线匹配任何单个值。 每一个分支之间用逗号分隔,如果用大括号包含就可以省略逗号。
match my_number {
  0     => println!("zero"),
  1 | 2 => println!("one or two"),
  3..10 => println!("three to ten"),
  _     => println!("something else")
}
use std::f64;
use std::num::atan;
fn angle(vector: (f64, f64)) -> f64 {
    let pi = f64::consts::PI;
    match vector {
      (0.0, y) if y < 0.0 => 1.5 * pi,
      (0.0, _) => 0.5 * pi,
      (x, y) => atan(y / x)
    }
}
变量名可以匹配任意值,并且这个变量名绑定匹配到的值,可在分支里进行操作。“variable @ pattern”后边是匹配规则,前边是绑定的变量名。任何一个match分支可以有一个if语句,在匹配成功后进行判断。 循环。while的条件也必须是bool类型,break停止循环,continue进行下次循环。loop相当于while ture。for的两个例子:
for n in range(0, 5) {
    println!("{}", n);
}
let s = "Hello";
for c in s.chars() {
    println!("{}", c);
}
for可用于任何迭代器。  
Read more...

rust学习-基本语法

好久没写博客了,越来越懒。碰到问题,文档上有的,或者可以搜索到的就懒得总结了,也经常要找多次。准备经常更新。 rust很早之前看过,那时候感觉标准库太少了,特别网络相关的根本找不到。0.9的时候我看好像有了,现在0.1了网络相关的已经有了,准备学习一下rust语言。 hello.rs  
fn main() {
    println!("hello?你好");
}
custc hello.rs ./hello rust所有的声明必须在函数里边,rust可以编译成库文件被别的程序包含,甚至是非rust程序。 println!这种标示符后面跟一个叹号的是宏调用。宏调用感觉好强大,还没仔细看。先记几个连接 http://static.rust-lang.org/doc/0.10/guide-macros.html http://static.rust-lang.org/doc/master/std/fmt/index.html#%3Ccode%3Eformat_args!%3C/code%3E http://static.rust-lang.org/doc/master/std/macros/macro.println.html http://static.rust-lang.org/doc/master/std/macros/builtin/macro.format_args.html rust类c语言,使用大括号界定代码块,包括选择/循环结构。函数调用myfunc(arg1,arg2).运算符和c的一样,优先级也基本相同。注视也一样,模块名通过两个冒号分离,像c++. if和while的括号不是必须的,他们的结构体必须在大括号里边,单条语句也不行。。 let关键字定义一个局部变量,变量默认是不可变的。需要改变的变量用let mut定义。 rust可以推断局部变量的类型,你可以在let后面加一个冒号,并指定变量的类型。常量的声明必须跟有变量类型。 static MONSTER_FACTOR: f64 = 57.8; let monster_size = MONSTER_FACTOR * 10.0; let monster_size: int = 50; 上边代码回产生一个变量未使用的警告,可以在变量名前加下划线屏蔽警告。 static声明Static items(constant value),可以被全局使用。rust的标示符以字母或者下划线开头,后面跟字母数字下划线。函数,变量,模块名用小写字母,使用下划线分割。定义的类型名用驼峰命名方式,rust原始类型名是小写。
let my_variable = 100;
type MyType = int;
let price;
if item == "salad" {
    price = 3.50;
} else if item == "muffin" {
    price = 2.25;
} else {
    price = 2.00;
}
let price =
    if item == "salad" {
        3.50
    } else if item == "muffin" {
        2.25
    } else {
        2.00
    };
上面两种写法相同,第二种最后有一个分号。大括号里的最后一行代码没有分号的话,他的值将作为整个表达式的值。 所以上面第二种写法,分支里边的数值不能加分号,加上的话回返回()或者空。 rust中除声明(变量,函数,traits, enum types),都是表达式。
fn is_four(x: int) -> bool {
   x == 4
}
不需要写return,表达式的结果将作为结果返回。 整型:int uint,分为8位,16位,32位,64位。数后面跟的字符代表类型i for int, u for uint, i8 for the i8,如果不跟,默认当做int类型 浮点: f32,f64。浮点数可以写成:0.0, 1e6, or 2.1e-4。 bool:true,false char: 单引号,类c 原始字符串,不包含转义:r"" 操作符类c,as操作符将左边的数值转换成右边的类型。as只能用于基本的数字类型和指针,不支持重载。transmute  
Read more...

sqlalchemy orm create_engine 设置数据库连接timeout

不定义的话默认差不多有一分钟,具体不知道 一种方法:engine = sqlalchemy.create_engine(db_connect_str, connect_args={'connect_timeout': 10}) 还可以直接写到db_connect_str后边,connect_args就是连接字符串后面跟的参数。
"mysql://user:password@host/test?connect_timeout=1"
Read more...

ubuntu修改rm命令,使删除的文件放到回收站

早就想实现这么个功能,大部分不确定删除的时候,我都直接先移动到我用户的tmp目录下,这个目录我都放一些可删可不删的测试文件等。确定的我就直接删除。但是还有失误啥的,根本不可能预防所有情况。今天搜索一文章,正好实现。原理就是用一个新命令替换系统的rm命令。 原文http://www.webupd8.org/2010/02/make-rm-move-files-to-trash-instead-of.html。 1.sudo apt-get install trash-cli 原文有介绍这个工具,我也没用试试0 0。 2.sudo vim /usr/local/bin/trash-rm 文件内容
#!/bin/bash
# command name: trash-rm
shopt -s extglob
recursive=1
declare -a cmd
((i = 0))
for f in "$@"
do
case "$f" in
(-*([fiIv])r*([fiIv])|-*([fiIv])R*([fiIv]))
tmp="${f//[rR]/}"
if [ -n "$tmp" ]
then
#echo "\$tmp == $tmp"
cmd[$i]="$tmp"
((i++))
fi
recursive=0 ;;
(--recursive) recursive=0 ;;
(*)
if [ $recursive != 0   -a  -d "$f" ]
then
echo "skipping directory: $f"
continue
else
cmd[$i]="$f"
((i++))
fi ;;
esac
done
trash "${cmd[@]}"
12.04以上的版本,把最后一行的trash换成trash-put。 执行权限
sudo chmod +x /usr/local/bin/trash-rm

3.vim ~/.bashrc
替换命令,在文件最后添加
alias rm="trash-rm"
shell下执行bash,重载文件
搞定了。
 
http://www.webupd8.org/2010/02/make-rm-move-files-to-trash-instead-of.html
Read more...

centos上安装freetds,ImportError: libsybdb.so.5

出现这个问题“ImportError: libsybdb.so.5”,先翻了 libsybdb.so.5这个文件,没翻到。然后找到了这个命令:locate libsybdb.so.5,直接将所有都列出来了。 我发现路径没问题,因为我是用的virtualenv环境,我以为是用户权限问题,找配置文件发现没问题。 然后从网上查,发现有的解决方法是将lib路径加入/etc/ld.so.conf中,我就看了本地ubuntu系统和centos的上的这个配置文件,发现确实是centos上的没添加lib路径。centos上我是编译安装的,不知为啥没加上,加入/usr/local/freetds/lib,然后ldconfig使配置生效。问题解决。
Read more...

蒙提霍尔问题

蒙提霍尔问题的规则是 参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车或者是奖品,选中后面有车的那扇门就可以赢得该汽车或奖品,而另外两扇门后面则各藏有一只山羊或者是后面没有任何东西。当参赛者选定了一扇门,但未去开启它的时候,知道门后情形的节目主持人会开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机会率? 我今天在微博上看到分享http://www.geekfan.net/7241/。然后区维基百科查了一下游戏的规则,开始我认为概率都是50%,然后又仔细看了作者的代码和结果,感觉我的感觉是错的0 0。我就仔细想了一下,发现却是错了。高中的时候就挺喜欢概率题,感觉挺有意思的 如果你不换,但是中奖,那就是你开始的选择, 三选一 。 如果你换,中奖,说明开始你选择错误,三选二。其实也是,像作者想的差不多,主持人帮你排除一个,相当于从bc选择了两次(选了b并且选了c)。 说白了好像是一个,你第一次选择错误的概率是多少。
Read more...

Previous Page 1 2 3 4 5 6 7 8 9 10 Next Page 最后一页