帮顶
#22 楼 @small_fish__ 额。。。那你们的产品怎么处理的呢,留给其他同学在做?
#20 楼 @small_fish__ 做得不错,不过这东西主要靠运营,加油吧!我也是成都毕业创业的大学生,同是用 ruby 的,欢迎加我 QQ383744872 交流
看自己的心态了
此帖必火,顶一个!
确实很难,但是我们不应该轻易放弃这个梦想,不应该害怕失败
<%= 'active' if params[:controller] == 'home' %>
#38 楼 @Sunnyroger 交流可以,请教嘛,我还不够格,哈哈。我是电子科大的,这儿不能发私信,我的邮箱 [email protected]
#35 楼 @Sunnyroger 目前都是按照教程来,只能算入门,是在和另一个同学一起做的,他比我厉害多了,哈哈,多练习多思考才能提高啊,计划大四能学会写 gem
准大四,正在用 rails 开发两个项目,完全自学
上传中文名称附件不显示名称,下载预览也不正常,修改成数字或英文正常,如图 这个怎么解决?
正在寻找呢,正好拿来试试
scim,scim-bridge,fcitx,各种办法都试了,还是不行,同学的跟我一样的配置,sublime 一样的版本,输入法设置也一样,可以输入中文,看来这个是看人品
不知道现场怎么谈的,我只有演讲提纲,所以假定谈的都是 emacs 中的实现 (不知道 ruby 如何实现),我又去验证了一遍。至少在 emacs 中的 struct union Lisp_Object 的实现如我所说。
这是 lisp.h 中的代码 (X86 都是 little-endian)
#ifndef WORDS_BIG_ENDIAN
/* Definition of Lisp_Object for little-endian machines. */
typedef
union Lisp_Object
{
/* Used for comparing two Lisp_Objects;
also, positive integers can be accessed fast this way. */
EMACS_UINT i;
struct
{
EMACS_INT val : VALBITS;
enum Lisp_Type type : GCTYPEBITS;
} s;
struct
{
EMACS_UINT val : VALBITS;
enum Lisp_Type type : GCTYPEBITS;
} u;
}
Lisp_Object;
#else /* If WORDS_BIG_ENDIAN */
我的测试代码,使用 gdb 调试,首先 print &(o.s) 得到 memory address,然后参考http://www.delorie.com/gnu/docs/gdb/gdb_56.html一个个字节显示来验证。
#include <stdio.h>
#define EMACS_UINT unsigned int
#define EMACS_INT int
#define VALBITS 29
#define GCTYPEBITS 3
enum Lisp_Type {
Lisp_Int = 0,
/* Symbol. XSYMBOL (object) points to a struct Lisp_Symbol. */
Lisp_Symbol = 2,
/* Miscellaneous. XMISC (object) points to a union Lisp_Misc,
whose first member indicates the subtype. */
Lisp_Misc = 3,
/* String. XSTRING (object) points to a struct Lisp_String.
The length of the string, and its contents, are stored therein. */
Lisp_String = 4,
/* Vector of Lisp objects, or something resembling it.
XVECTOR (object) points to a struct Lisp_Vector, which contains
the size and contents. The size field also contains the type
information, if it's not a real vector object. */
Lisp_Vectorlike = 5,
/* Cons. XCONS (object) points to a struct Lisp_Cons. */
Lisp_Cons = 6,
Lisp_Float = 7,
};
typedef union Lisp_Object
{
/* Used for comparing two Lisp_Objects;
also, positive integers can be accessed fast this way. */
EMACS_UINT i;
struct
{
EMACS_INT val : VALBITS;
enum Lisp_Type type : GCTYPEBITS;
} s;
struct
{
EMACS_UINT val : VALBITS;
enum Lisp_Type type : GCTYPEBITS;
} u;
} Lisp_OLisp_Stringbject;
struct S{
int a;
int b;
};
int main(int argc,char** argv)
{
struct S s;
printf("addr of S::a=%x\naddr of S::b=%x\n",&(s.a),&(s.b));
Lisp_OLisp_Stringbject o;
o.s.val=1023;
o.s.type=Lisp_Int;
printf("o.s.val=%d\no.s.type=%d\n",o.s.val,o.s.type);
return 0;
}
embedding integers in pointers 中的类型实际上是放在高地址,我查过 emacs 代码,见我的翻译,http://blog.csdn.net/redguardtoo/article/details/7400655.