按:无论学习多久,我们都还在路上。C++支持的编程范式太多,因此还是博大精深的,但是C++本身的核心语言我觉得和C还是差不多的。弄清楚概念是学习的一个很重要的前提,因此选择一本比较基本的书(广泛认可的就是C++ language或者C++ Premier)就行了,懂得matlab对于我顺着过来结合,理清很多的概念非常的有帮助。
1.把C++当成一门新的语言学习(和C没啥关系!真的。);
2.看《Thinking In C++》,不要看《C++变成死相》;
3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看;
4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言;
5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;
6.会用Visual C++,并不说明你会C++;
7.学class并不难,template、STL、generic programming也不过如此——难的是长期坚持实践和不遗余力的博览群书;
8.如果不是天才的话,想学编程就不要想玩游戏——你以为你做到了,其实你的C++水平并没有和你通关的能力一起变高——其实可以时刻记住:学C++是为了编游戏的;
9.看Visual C++的书,是学不了C++语言的;
10.浮躁的人容易说:XX语言不行了,应该学YY;——是你自己不行了吧!?
11.浮躁的人容易问:我到底该学什么;——别问,学就对了;
12.浮躁的人容易问:XX有钱途吗;——建议你去抢银行;
13.浮躁的人容易说:我要中文版!我英文不行!——不行?学呀!
14.浮躁的人容易问:XX和YY哪个好;——告诉你吧,都好——只要你学就行;
15.浮躁的人分两种:a)只观望而不学的人;b)只学而不坚持的人;
16.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;
17.C++不仅仅是支持面向对象的程序设计语言;
18.学习编程最好的方法之一就是阅读源代码;
19.在任何时刻都不要认为自己手中的书已经足够了;
20.请阅读《The Standard C++ Bible》(中文版:标准C++宝典),掌握C++标准;
21.看得懂的书,请仔细看;看不懂的书,请硬着头皮看;
22.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;
23.请看《Effective C++》和《More Effective C++》以及《Exceptional C++》;
24.不要停留在集成开发环境的摇篮上,要学会控制集成开发环境,还要学会用命令行方式处理程序;
25.和别人一起讨论有意义的C++知识点,而不是争吵XX行不行或者YY与ZZ哪个好;
26.请看《程序设计实践》,并严格的按照其要求去做;
27.不要因为C和C++中有一些语法和关键字看上去相同,就认为它们的意义和作用完全一样;
28.C++绝不是所谓的C的“扩充”——如果C++一开始就起名叫Z语言,你一定不会把C和Z语言联系得那么紧密;
29.请不要认为学过XX语言再改学C++会有什么问题——你只不过又在学一门全新的语言而已;
30.读完了《Inside The C++ Object Model》以后再来认定自己是不是已经学会了C++;
31.学习编程的秘诀是:编程,编程,再编程;
32.请留意下列书籍:《C++面向对象高效编程(C++ Effective Object-Oriented Software Construction)》《面向对象软件构造(Object-Oriented Software Construction)》《设计模式(Design Patterns)》《The Art of Computer Programming》;
33.记住:面向对象技术不只是C++专有的;
34.请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码;
35.把在书中看到的有意义的例子扩充;
36.请重视C++中的异常处理技术,并将其切实的运用到自己的程序中;
37.经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去;
38.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路;
39.C++语言和C++的集成开发环境要同时学习和掌握;
40.既然决定了学C++,就请坚持学下去,因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;
41.就让C++语言的各种平台和开发环境去激烈的竞争吧,我们要以学习C++语言本身为主;
42.当你写C++程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和编写(参见43);
43.别心急,设计C++的class确实不容易;自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的;
44.决不要因为程序“很小”就不遵循某些你不熟练的规则——好习惯是培养出来的,而不是一次记住的;
45.每学到一个C++难点的时候,尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了;
46.记录下在和别人交流时发现的自己忽视或不理解的知识点;
47.请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成Version 100.XX;
48.保存好你写过的所有的程序——那是你最好的积累之一;
49.请不要做浮躁的人;
50.请热爱C++!
Monday, May 16, 2011
zzlinux下程序的编译和链接
出处
传统意义上的编译程序分两步走 —— 编译和链接:
1.编译(compile):指用编译器(compiler)将源代码(source code)生成二进制目标文件(object file),在Windows下也就是 .obj 文件,UNIX下是 .o 文件。编译时,编译器需要的是语法的正确,函数与变量的声明的正确,编译器只检测程序语法,和函数、变量是否被声明,函数并不需要被定义。
UNIX下g++的语法为:
g++ -c file.cpp
-c 是compile的意思,此命令将会生成 file.o 的目标文件。
2.链接(link):找到所要用到函数所在的目标文件,并把它们链接在一起合成为可执行文件(executable file)。链接时,要确保编译器能找到所有被用到了的函数所在的目标文件。
g++ file1.o file2.o -o program.exe
-o 是指定生成的可执行文件名称(output)。若不给出,默认的名称为 a.out
上述两部通常也可以合在一起完成:
g++ file1.cpp file2.cpp -o program.exe
这完全等同于上面两步的结合,会先生成目标文件,然后链接成 file.exe
3. 库 (library)
对于一个源文件很多的大项目,为了避免重复编译,也为了方便编译器链接,通常会把一些常用 到的目标文件打包(archive),于是就成为了传说中的库文件(library)。在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。
UNIX 所要用到的命令:
1)ar -- create, modify, and extract from archives.
@Usage: ar cr lib****.a file1.o file2.o
**** 为自定义的库文件名。
标签 c (create):如果库不存在,则创建库;
标签 r (replace):如果库中已存在要添加的对象文件,则旧的对象文件将被替换。
实际上 ar 只是一个打包工具,是archive(打包)的首字母。它将一系列的目标文件首位连接在一起,并内嵌一个索引表,使得编译器能够方便地找到所需要的函数。 一般来说,由于函数索引表的存在,对库的链接要比对一般的对象文件的链接更快。如果 ar 未能完成此项索引表工作,还可以手动用以下的 ranlib 命令创建索引表。
2) ranlib -- generate index to archive.
@Usage: ranlib lib****.a
3) nm -- list symbols from object files.
nm可以用来显示 ranlib 所构建的索引表。你将会看到所有库里的函数名(除了模板函数template function)。
4. 在编译时链接库
创建了自己的库,以后要用到相关函数的时候,只需在代码中声明所要用的函数(必须和库中定义得相同)。在链接的时候,需要给出库的名称和位置:
g++ file1.o file2.o -o program.exe -L**** -l****
-L 后紧跟库文件所在的目录地址,-l 后紧跟库名。
编译器在链接的时候会在所指定的目录地址下寻找名为 lib****.a 的库文件。
传统意义上的编译程序分两步走 —— 编译和链接:
1.编译(compile):指用编译器(compiler)将源代码(source code)生成二进制目标文件(object file),在Windows下也就是 .obj 文件,UNIX下是 .o 文件。编译时,编译器需要的是语法的正确,函数与变量的声明的正确,编译器只检测程序语法,和函数、变量是否被声明,函数并不需要被定义。
UNIX下g++的语法为:
g++ -c file.cpp
-c 是compile的意思,此命令将会生成 file.o 的目标文件。
2.链接(link):找到所要用到函数所在的目标文件,并把它们链接在一起合成为可执行文件(executable file)。链接时,要确保编译器能找到所有被用到了的函数所在的目标文件。
g++ file1.o file2.o -o program.exe
-o 是指定生成的可执行文件名称(output)。若不给出,默认的名称为 a.out
上述两部通常也可以合在一起完成:
g++ file1.cpp file2.cpp -o program.exe
这完全等同于上面两步的结合,会先生成目标文件,然后链接成 file.exe
3. 库 (library)
对于一个源文件很多的大项目,为了避免重复编译,也为了方便编译器链接,通常会把一些常用 到的目标文件打包(archive),于是就成为了传说中的库文件(library)。在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。
UNIX 所要用到的命令:
1)ar -- create, modify, and extract from archives.
@Usage: ar cr lib****.a file1.o file2.o
**** 为自定义的库文件名。
标签 c (create):如果库不存在,则创建库;
标签 r (replace):如果库中已存在要添加的对象文件,则旧的对象文件将被替换。
实际上 ar 只是一个打包工具,是archive(打包)的首字母。它将一系列的目标文件首位连接在一起,并内嵌一个索引表,使得编译器能够方便地找到所需要的函数。 一般来说,由于函数索引表的存在,对库的链接要比对一般的对象文件的链接更快。如果 ar 未能完成此项索引表工作,还可以手动用以下的 ranlib 命令创建索引表。
2) ranlib -- generate index to archive.
@Usage: ranlib lib****.a
3) nm -- list symbols from object files.
nm可以用来显示 ranlib 所构建的索引表。你将会看到所有库里的函数名(除了模板函数template function)。
4. 在编译时链接库
创建了自己的库,以后要用到相关函数的时候,只需在代码中声明所要用的函数(必须和库中定义得相同)。在链接的时候,需要给出库的名称和位置:
g++ file1.o file2.o -o program.exe -L**** -l****
-L 后紧跟库文件所在的目录地址,-l 后紧跟库名。
编译器在链接的时候会在所指定的目录地址下寻找名为 lib****.a 的库文件。
《不如归去》
http://www.mitbbs.com/article_t/Movie/31397049.html
《不如归去》导演自述兼答疑(剧透)
http://www.mitbbs.com/article_t/Biology/31495983.html
其他的相关信息
《不如归去》导演自述兼答疑(剧透)
http://www.mitbbs.com/article_t/Biology/31495983.html
其他的相关信息
Tuesday, May 3, 2011
zzLinux下带颜色的终端输出与简单的闪烁功能[CODE]
Linux下带颜色的终端输出与简单的闪烁功能[CODE]
(ref link)有时候为了实现在终端输出的时候字体能够带颜色,并且可以产生简单的闪烁的功能,特写了下列的代码 实现hello world的带颜色的输出,并且每过一秒产生一个闪烁的功能.
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>
int flag = 0;
void sig_int(int signum)
{
if (flag == 1)
fprintf(stderr, "\033[47;31mhello world\033[5m");
fprintf(stderr,"\033[;\033[0m");
fprintf(stderr,"\033[;\033[0m");
printf("\n");
exit(0);
}
int main()
{
int i = 0;
struct sigaction sig_act;
sig_act.sa_handler = sig_int;
sigemptyset(&sig_act.sa_mask);
sig_act.sa_flags = 0;
if (sigaction(SIGINT, &sig_act, NULL) < 0)
{
fprintf(stderr, "signal error\n");
exit(1);
}
while (i++ < 10)
{
fprintf(stderr, "\033[;\033[s"); /*使用stderr是因为其是不带缓存的*/
fprintf(stderr, "\033[47;31mhello world\033[5m");
flag = 0;
sleep(1);
fprintf(stderr, "\033[;\033[u");
fprintf(stderr, "\033[;\033[K");
flag = 1;
sleep(1);
}
fprintf(stderr, "\033[47;31mhello world\033[5m");
fprintf(stderr,"\033[;\033[0m");
printf("\n");
return 0;
}
该程序实现输出十次hello world然后退出. 使用一个信号是为了还原默认的终端输出的颜色.
另外再讲讲如何输出颜色以及颜色的代码.
格式:
printf("\033[字背景颜色;字体颜色m字符串\033[0m" );
printf("\033[47;31mhello world\033[5m");
47是字背景颜色, 31是字体的颜色, hello world是字符串. 后面的\033[5m是控制码.
颜色代码:
QUOTE:
字背景颜色范围: 40--49 字颜色: 30--39
40: 黑 30: 黑
41: 红 31: 红
42: 绿 32: 绿
43: 黄 33: 黄
44: 蓝 34: 蓝
45: 紫 35: 紫
46: 深绿 36: 深绿
47: 白色 37: 白色
40: 黑 30: 黑
41: 红 31: 红
42: 绿 32: 绿
43: 黄 33: 黄
44: 蓝 34: 蓝
45: 紫 35: 紫
46: 深绿 36: 深绿
47: 白色 37: 白色
ANSI控制码:
QUOTE:
\033[0m 关闭所有属性
\033[1m 设置高亮度
\03[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m -- \033[37m 设置前景色
\033[40m -- \033[47m 设置背景色
\033[nA 光标上移n行
\03[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\33[?25h 显示光标
\033[1m 设置高亮度
\03[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m -- \033[37m 设置前景色
\033[40m -- \033[47m 设置背景色
\033[nA 光标上移n行
\03[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\33[?25h 显示光标
这样, 在某些时候就可以实现动态的输出.
link
如何在linux(终端:ctrl+alt+F1之类的。绝非虚拟终端)下显示256色或24位的BMP图片?
Thursday, April 28, 2011
另类升级ubuntu to 11.04
自带的software upgrade行不通,一度想到放弃升级,毕竟杂七杂八地在小电脑上面装了很多的东西,为了好玩,并没有什么明确的目的先,所以,准备一换再换,无奈,只有lenovo的wireless驱动在装了ubuntu之后可以自动保持链接,所以,又转过头来了。
如果说是不考虑已经装过的东西,用wubi重装升级还真是比较的方便,windows 7中,然后,在windows 7中卸载也同样如此,所以整个过程也就没有受到这个wubi 安装ubuntu的折磨,凭着以前搭建llvm的经验,时间也就相对集中地花在了安装fcitx(中文输入), flex, bison and llvm 以及llvm-gcc(注意使用tar and cp方式)。
ubuntu下解压rar 文件(ref1, ref2, ref3) ref1直接了当地解决了这个问题,sudo apt-get install rar unrar,但是引入了两个包,rar和unrar。同时,rar还有中文乱码的问题,主要是文件名的名称,而unrar则不然,ref2的解决办法就是卸掉rar,只装unrar,当然ref3的问题也是乱码问题,保持英文命名,这个问题不是大问题。
linux下的modelsim 安装(ref1, ref2, ref3),相比较而言,我觉得ref1就已经足够讲清楚问题了,当然,ref1使用的是mentorKG,而我手头的这个modelsim 6.6并没有mentorKG,只有一个license.dat, mgls.dll, 和一个readme(光装zhcon环境,还不能结局gedit下的乱码阅读问题)。在安装的过程中,可执行的chmod方式并没有成功,偶然换用的是右击,属性更改成可执行文件。
最后的结果是费了半天劲也没又装上,似乎这个modelsim就不是为linux开发的,当然,ref1讲的到位,在像~/.bashrc的文件路径上没有交待(我就是在/home/路径下操作的),然后,MentorKG.exe怎么都没有反应,当然用上wine还有permission方面的问题,索性就用root权限(wine MentorKG.exe -o license.dat),还在自鸣得意,以为这次生成的license不错,打开也发现hostid与我的ipconfig结果一致,按照指示往下走,结果还是不行,Error: cannot find *** vsim。装了也还是徒劳。
comment: 这个MGLS.DLL并没有用上,因为在安装路径下找不到对应的这个dll文件。所有的指示mgls_admin, mgls_ok, mgls_asynch(都是可执行文件),这些文件分别位于modtech/linux_x86_64_mgls_lib (/bin and /lib)里面。
comment2: ref4这个里面的安装讲的还不如ref1,但是关于license,我并没有看到DEAMON,事实上,#应该是注释,为什么要去换注释部分的hostid, MAC地址?
comment: ---->/root/.bashrc.
如果说是不考虑已经装过的东西,用wubi重装升级还真是比较的方便,windows 7中,然后,在windows 7中卸载也同样如此,所以整个过程也就没有受到这个wubi 安装ubuntu的折磨,凭着以前搭建llvm的经验,时间也就相对集中地花在了安装fcitx(中文输入), flex, bison and llvm 以及llvm-gcc(注意使用tar and cp方式)。
ubuntu下解压rar 文件(ref1, ref2, ref3) ref1直接了当地解决了这个问题,sudo apt-get install rar unrar,但是引入了两个包,rar和unrar。同时,rar还有中文乱码的问题,主要是文件名的名称,而unrar则不然,ref2的解决办法就是卸掉rar,只装unrar,当然ref3的问题也是乱码问题,保持英文命名,这个问题不是大问题。
linux下的modelsim 安装(ref1, ref2, ref3),相比较而言,我觉得ref1就已经足够讲清楚问题了,当然,ref1使用的是mentorKG,而我手头的这个modelsim 6.6并没有mentorKG,只有一个license.dat, mgls.dll, 和一个readme(光装zhcon环境,还不能结局gedit下的乱码阅读问题)。在安装的过程中,可执行的chmod方式并没有成功,偶然换用的是右击,属性更改成可执行文件。
最后的结果是费了半天劲也没又装上,似乎这个modelsim就不是为linux开发的,当然,ref1讲的到位,在像~/.bashrc的文件路径上没有交待(我就是在/home/路径下操作的),然后,MentorKG.exe怎么都没有反应,当然用上wine还有permission方面的问题,索性就用root权限(wine MentorKG.exe -o license.dat),还在自鸣得意,以为这次生成的license不错,打开也发现hostid与我的ipconfig结果一致,按照指示往下走,结果还是不行,Error: cannot find *** vsim。装了也还是徒劳。
comment: 这个MGLS.DLL并没有用上,因为在安装路径下找不到对应的这个dll文件。所有的指示mgls_admin, mgls_ok, mgls_asynch(都是可执行文件),这些文件分别位于modtech/linux_x86_64_mgls_lib (/bin and /lib)里面。
comment2: ref4这个里面的安装讲的还不如ref1,但是关于license,我并没有看到DEAMON,事实上,#应该是注释,为什么要去换注释部分的hostid, MAC地址?
comment: ---->/root/.bashrc.
Monday, April 25, 2011
数学与生活--泰勒展开式
一篇是讲数学规律的,学习成就关于时间的泰勒展开,link
另外一篇有点涉及到人生态度,link:
我们的人生是解析函数吗?如果是的话,我们可以在最短最短时间内我们所经历的一切,外推到整个人生。所以说,如果人生是解析函数的话,那就太棒了。我们只要活一点点,我们就可以用一点点的生涯去幻想无穷无尽的生命到底是长什么样子。
有一个我很敬佩的数学家,他说过一句话,“死并不可怕,死只是我所遇到的最后一个函数”。意思就是说,其实他认为人生并不是解析函数,他在那个时候已经认识到了,人生是充满着断点,跳跃,以及不连续点,人生是一个非常非常算是 正规 的函数。因为事实上,Weierstrass已经证明:处处连续但处处不可微分的函数才是函数的常态。
另外一篇有点涉及到人生态度,link:
我们的人生是解析函数吗?如果是的话,我们可以在最短最短时间内我们所经历的一切,外推到整个人生。所以说,如果人生是解析函数的话,那就太棒了。我们只要活一点点,我们就可以用一点点的生涯去幻想无穷无尽的生命到底是长什么样子。
有一个我很敬佩的数学家,他说过一句话,“死并不可怕,死只是我所遇到的最后一个函数”。意思就是说,其实他认为人生并不是解析函数,他在那个时候已经认识到了,人生是充满着断点,跳跃,以及不连续点,人生是一个非常非常算是 正规 的函数。因为事实上,Weierstrass已经证明:处处连续但处处不可微分的函数才是函数的常态。
Sunday, April 24, 2011
zz 紫杉烷类抗癌药:应该知道的一些人和事
按:科研也是一种职业,当然,也会有纷纷乱乱的故事。转载地址
紫杉烷类化合物是从植物中得到的一大类天然产物,从结构分类上属于二萜类,故又称紫杉烷二萜。紫杉醇(Taxol)作为这类化合物中的明星分子,是临床上使用的一种重要的抗癌药,最初也是从植物中提取后纯化得到的。
含 有紫杉烷二萜的主要是红豆杉属或称紫杉属的植物,属于裸子植物。虽然也是冰川世纪的孑遗物种,但它在欧洲并不像银杏那样曾经被认为绝灭,而是广泛生长甚至 种植作为观赏植物,因为它的果实呈美丽的绛红色,这也是红豆杉植物名称的由来。早期文献记载,欧洲广泛分布的浆果红豆杉(Taxus baccata L.)在放牧人的眼中可不是什么好东西,因为牛羊啃食它的叶子会中毒。1856年,红豆杉枝叶的有毒成分被分离出来,是一种类生物碱的成分,被命名为“Taxine”。限于当时的科技发展水平,并不知道这其实是一个混合物,其中有2-3个主要成分以及若干微量成分,而它的结构解析自然也无从谈起。直到20世纪才了解到它混合物的面目,并且把其中量大的几个化合物分离出来,发现都是紫杉烷二萜在C-5位上带有不同的含氮原子的侧链,被分别命名为Taxine A等等。此后紫杉烷二萜又被研究了几十年,不过依然是很普通的一类天然产物。
转折点始于不经意间。1962年,在美国生长的一种红豆杉属植物短叶红豆杉(T. brevifolia Nutt.)的树皮样品送到国立癌症研究所(NCI)。使用当时标准的动物癌症模型(主要是血液系统癌症),发现短叶红豆杉的提取物具有抗肿瘤作用。大约两年后提取物被送到与NCI合作的位于美国北卡(North Carolina)的Triangle Research Institute,由植物学家Dr. Monroe Wall领导的研究小组进行活性追踪分离,得到了抗癌活性成分Taxol,也就是后来大名鼎鼎的紫杉醇。1971年,Dr. Wall和Duke University的晶体学家A.T. McPhail小组在美国化学会志(JACS)上发表论文,报道了紫杉醇的化学结构。由于紫杉醇的结构相当复杂(即使在今日看来也是如此),而该化合物又不能得到很好的晶体,因此他们采用温和甲醇解将其分解为C-13侧链和母核部分,并分别对这两部分进行了X-衍射晶体结构测定。测定的结果是母核部分与已知的紫杉烷二萜一致,但是在C-4和C-20多了一个具有很高张力的环氧丙烷环(或者说四员氧环),这是一个不寻常的结构片段;而侧链部分则是苯基取代的异丝氨酸,且氮原子被苯甲酰基取代。
紫杉醇在一开始并没有注定成为天之骄子,它在当时以血液系统癌症的动物模型为主流的评价体系中并不特别具有竞争力。后来大家知道它的主要特点在于对于实体肿瘤的优异效果,而它之前大名鼎鼎的长春碱类则是以治疗白血病等血液系统癌症而著称的。1977年,NCI基于B16小鼠模型的实验结果,以及Dr. Wall的坚持,把紫杉醇列为有待进一步评价的候选药物,但它的前景显然不被大多数人看好。1979年,位于美国纽约的Albert Einstein College of Medicine的Dr. Susan Horwitz在Nature上 发表论文,提出紫杉醇具有促进微管蛋白聚合成微管,能稳定微管并且抑制其解聚的特性。尽管它与秋水仙素和长春碱类均作用于微管系统,但作用方式却与它们完 全不同,后者是抑制微管蛋白聚合成微管。同时,紫杉醇对多种实体瘤细胞显示出很好的作用。上述发现使紫杉醇成为很有希望的新型抗癌候选药物。
经历了始于1984年的I期临床和随后的II、III期临床,美国食品与药品管理局(FDA)于1992年底批准了由美国Bristol-Myers Squibb公司生产的紫杉醇上市。1994年紫杉醇的销售额即达4亿美元,而2000年销售额更是达到16亿美元的顶点。紫杉醇因而成为“重磅炸弹”(blockbuster)药品中的一员(即年销售额超过10亿美元的药品),并且也获得了1990年代抗癌药重要成就之一的赞誉。
紫杉醇开发中遇到的重要问题之一是其药源问题。紫杉醇最初从红豆杉植物的树皮中提取,含量万分之一到二。根据估算,为了满足一个癌症患者的用药量,大约需要砍伐3棵百年生的大树,剥取其树皮以提取和纯化紫杉醇,制备相应的药剂。这种对野生百年大树疯狂砍伐的前景在当年遭到美国环保组织的强烈抗议,因此也促成了BMS和NCI资助科学家们采用多种手段解决这一问题。
解决的主要方法来源于以下几个方面:
(1)半合成:法国CNRS的Potier小组从T. baccata的可再生嫩枝叶(即不需要砍伐整棵树木,只要把新生枝叶剪下来做原料即可)中,发现含量高达千分之一的紫杉醇前体化合物10-去乙酰baccatin III(10-DAB),然后人工合成C-13侧链部分,将其与10-DAB母核部分相连接,经适当化学转化即得紫杉醇。美国Florida State University(FSU)的Dr. Holton发明的高效半合成法转让给BMS公司后,获得了很大的经济效益。Potier小组则用半合成法系统研究了紫杉醇类似物的构效关系,并且发现了另一个在临床上使用的半合成紫杉烷类抗癌药多西他赛(docetaxel)。
(2)人工栽培:经过人工杂交的品种,具有含量高、生长快、灌木化、收集枝叶或采集全株可满足生产的优点。其中以短叶红豆杉和东北红豆杉(T. cuspidata Sieb et Zucc.)杂交而成的曼迪亚红豆杉(T. media x “Hicksii”)得到最广泛的应用。在我国目前种植的绝大多数都是该品种。我国目前市场上的紫杉醇除了部分红豆杉植物提取的紫杉醇,也有使用该杂交树种提取的。
(3)组织和细胞培养:工业生产条件下,在发酵罐中进行组织和细胞培养,最大的优点是不用靠天吃饭。不过,由于紫杉醇本身具有极强的细胞毒性,这一方法最初遇到的问题是长得好、生物量大的组织和细胞紫杉醇含量低,反之生物量小的紫杉醇含量高。后来以Phyton Catalytic和ESCA Genetics为代表的生物技术公司解决了这一问题,目前细胞培养生产的紫杉醇已在临床上使用。
(4)内生真菌产生:1993年,美国Montana State University的Dr. G. Strobel等人在Science上报道了一项突破性的科学发现,在红豆杉植物内生菌Taxomyces andreanae中含有25-50 ng/L的紫杉醇;后来又发现榧树属植物Torreya grandiflora中的内生真菌Periconia sp.可产生800 ng/L紫杉醇。从工业生产的角度来说,微生物发酵是比植物细胞培养更容易操控的过程,因此人们对其商业化的期待也很高。
最后,全合成紫杉醇虽然具有很高的学术价值,但在工业化生产上看来不具有竞争力。不过在此还是要说一点关于紫杉醇全合成的历史。紫杉醇全合成于1994年由美国FSU的Holton组和Scripps Research Institute的Nicolaou组几乎同时完成。前者以两篇Communication的形式发表在JACS上,后者以一篇Letter的形式发表在Nature上(后来又在JACS上以四篇连续的Full paper形式发表了合成的细节)。这两个组不仅竞争激烈,更有意思的是他们采用的分别是线性(先A环再AB再ABC环系)和汇聚式(先分别合成A和C环,在组装在一起形成ABC环系)路线,代表了有机合成的不同策略。尽管通常汇聚式路线的总收率较高,但Holton组路线单元反应的收率均较高,因此总收率仍高于Nicolaou组。后来,美国Columbia University的Samuel Danishefsky、Stanford University的Paul Wender,以及两名日本学者Mukaiyama和Kuwajima也分别完成了紫杉醇的全合成。值得一提的是,Mukaiyama的路线中虽然也可归入线性途径,但他采用了以直链化合物首先环合得到八元B环,再构建BC再BCA环系的独特策略,而且把论文发表在日本杂志Chemistry Letters上。我曾经询问过同在Holton实验室工作的一名来自日本的博士后,Mukaiyama教授的工作完全可以发表到更好的杂志上,为何他只发在Chemistry Letters上?那名博士后说,Mukaiyama教授做过日本化学会的会长,而Chemistry Letters是日本化学会主办的,可能是为了支持日本化学会吧。其它三条全合成路线则分别与Holton和Nicolaou的路线有类似之处。
我把曾经在紫杉烷研究中贡献突出的科学家(以化学家为主)的照片附上。其中除了正文中提及的科学家外,还有两名在紫杉烷的构效关系研究中贡献颇丰的化学家,Virginia Polytechnic Institute & State Univesity的Dr. David G.I. Kingston和State University of New York at Stony Brook的Dr. Iwao Ojima。
几点随想:
(1) 紫杉醇的结构最初没有申请专利,因而能被很多地方独立地开发成新药。这对病人使用低成本药物或者科学研究成果的广为散播来说应该是一件好事。但它的发现者Dr. Wall却只获得了发现的荣誉,未能享受它带来的巨大经济效益。Dr. Wall还发现了喜树碱,不过喜树碱本身未能成药。尽管Topotecan, Irinotecan等喜树碱衍生物后来被相继开发成抗癌新药,但都与Dr. Wall无缘。据在北卡生活过的我的师兄说,他曾经看到Dr. Wall一直开着一辆破旧的老爷车上班。虽说科学研究并不以追求经济效益为终极目的,但作为两大类抗癌药的发现者,Dr. Wall的状况多少令人惋惜。希望他在天堂能很欣慰地看待世间紫杉醇和喜树碱类抗癌药对癌症病人的帮助。
(2) 紫杉醇的开发初期,为了解决紫杉醇临床用药的来源问题,NCI通过招标方式吸引企业共同开发。不过为了把没有专利的紫杉醇推向临床,NCI许诺给中标企业10年专营权以换取其足够的投资。BMS公 司中标后,美国社会也有不少批评之声。主要是说有政府资助的紫杉醇研究,最后变成了私人企业用于牟利的东西。不过当时药源问题的解决的确有赖于大量企业资 金的介入,公众与私人利益的冲突和尽快把新药应用到临床上究竟孰轻孰重,有时也是难以两全和不易取舍的。值得一提的是,BMS公司把Taxol这个名字注册为他们紫杉醇产品的使用商标后,或多或少地影响了科学家们已经习惯的Taxol这个用法,每次在使用时都要加标注,说明这是BMS公司的注册商标。此后,紫杉醇有了它的通用名paclitaxel,因此文献中更多地出现了这个名词。而多西他赛的通用名则是docetaxel。
(3) 紫杉醇从最初在血液系统肿瘤的小鼠模型上不被看好,到1977年前后在B16黑色素瘤、MX-1乳腺癌、LX-1肺癌和CX-1结肠癌动物模型上表现出良好的效果后,才被普遍看好。这也表明了评价体系对于遴选候选药物极其重要的作用。此后,NCI开始用人源肿瘤细胞株(如目前流行的同时评价对不同部位来源的60种肿瘤细胞的作用)代替动物肿瘤模型作为标准筛选模型,在这种评价体系下像紫杉醇这样的化合物应该不会被错判。但科技的发展永远是在不断进步,人源肿瘤的裸鼠移植模型乃至转基因动物模型显示更强的临床相关性,因此在近年来的抗癌药研发中也越来越多地被采用。
推荐阅读材料:
1. Taxane Anticancer Agents: Basic Science and Current Status; ACS Symposium Series; ACS: Washington, DC, 1995.
2. The Chemistry and Pharmacology of Taxol and its Derivatives; Elseveir: Amsterdam, 1995.
3. Taxane Diterpenoids. In : Progress in the Chemistry of Organic Natural Products; Springer-Verlag: New York; 1993.
4. The chemistry of Taxol and Related Taxoids. In: Progress in the Chemistry of Organic Natural Products; Springer-Verlag: New York; 2002, p.53-226.
5. Guenard D et al. Acc. Chem. Res. 1993, 26: 160.
6. Kingston DGI. Chem. Commun. 2001, 867.
7. Fang WS et al. Mini Rev. Med. Chem. 2005, 5: 1.
Subscribe to:
Posts (Atom)