哲学冯友兰《中国哲学简史》初读

冯友兰先生之《中国哲学简史》是冯老于美国讲课中国哲学史时之讲稿整理而变成,体系比较庞大,内容丰富,语言流畅,书中融入了广大针对作者自己对华夏哲学的敞亮,是平依照经典的华哲学入门书籍。此外,书中之神州哲学的灵气和精髓和各家的主,很麻烦随便就读得读全,更毫不说整个了解并内化为友好的知识了,每一样有都得细研读与思维,因此我冲自己之翻阅与晓,主要从中华哲学的风味以及动感,以及中国哲学同外哲学的异议等方面来描写自己之一点体味与感想。
普罗群众都如数家珍孔子、老子、孟子等人选,都明白她们是思考下,都是发出大学问的口,很少有人有关于他们的哲学的定义,在咱们并未接触到西方哲学史,我们还不清楚中国哲学时,那时我们都说咱们来长博大的华想、中国智,接触了西方哲学后我们才察觉,原来我们泱泱大国也来类同于西方哲学的东西,之所以要为此一般,我个人的观点是,中国之“哲学”和西方的哲学在含义达成是未雷同的,但是思考在好几领域是颇具相似性的,这话不顶说中国从没哲学,而是说俺们如果了解中西哲学是内涵与情节是不平等的,虽然还为此了哲学是词来叫。我们还了解在净土很已经发出专门从事哲学研究之人头,而且快捷迈入成为一流派专业,而且是宏观的正规,后来科学等才逐步从哲学里分别了出来。
但在中原我们是一向没有“哲学”这个知识科目的,我们传统的古代中华来什么吗?我们有经学、史学,我们许多思想、文化、艺术,只不过是咱们的琢磨体系最为庞大精深,包含太多,哲学是词为是舶来的,并非我们发明创造。而中国底哲学也是由宽阔的中华想史中抽出来的,阅读时我们见面意识,在几千年前,我们的先世思想下与西方的哲学家们甚至以有关宇宙、关于万物、关于人生有很多的相似之处,非常的诙谐。同时老有诸多之不等,这个接下即将说交。
率先,中国底哲学其实以炎黄知识中占了非常重要之身份,按照冯友兰先生之口舌说,完全可和宗教的位置比,不仅是我们,几百年还几千年前的文人,打小就学四题五通过,背诵三许经千字文,开头的片句:“人之初,性本善”,不就是孟子的哲学观念为。不仅是我们,西方人也发觉了我们立刻无异风味,他们观看儒家在渗透及了中华人数的存,觉得说儒家的想想不纵是儒教吗,严格的吧,咱们的儒家思想在一些功能及生宗教的特点,可是她与宗教还是异样。就像说道家是哲学学派,道教是宗教,佛学是哲学,而佛教是教,他们前后两边的主张去大坏。道家主张让丁顺应自然,而道教教人寻找无十分的方术;不过哲学、宗教是多义词,不同的食指心弦产生例外之思想意识。
其次,说交中国哲学大家首先想到的即使是“出世”和“入世”,出世的哲学讲究脱离尘世、脱离生死,达到最后之摆脱。而入世的哲学注重社会中的天伦和事情,它重的是德价值。冯友兰先生说:“从入世哲学的观看,出世的哲学太理想主义、不实用、消极。从诞生哲学的意看,入世的哲学太现实主义、太肤浅了”。
每当华夏哲学里,主要的门户就是儒家和道,儒家学说是社会团体的哲学,也是有关日常生活的哲学,儒家强调人口的社会责任感,但是道家强调人之中的自然,中国哲学的立半栽趋势,就一定给是天堂的古典主义和浪漫主义,我们当念李白与杜甫的诗句时,就可知明确感到儒家和道家的差异。
《庄子》中说:“儒家游方之内,道家游方之外”,这个方就指的凡社会,这简单栽对立在某一方面提供了一个抵。
不少人口说中国底哲学是入世的哲学,这等同触及未能够说都针对吗不克说全错,确实我们的哲学无论是哪一样下还直接或者间接的讲到政治以及道义。从外表上看,中国哲学较注重社会国家、人伦日用,而不是宇宙万物、上帝天堂。出世和入世是对立的,在开中冯友兰认为中国哲学的振奋是寻求出世与入世这个反命题的联,在中华哲学里看会就这样的受“内圣外王”,内圣是修养的成就说,外王是社会之成效说。在历史上也出了这样的思绪出现,儒家像被祥和仿佛一点坛,道家想叫投机相仿一点儒家,赋予它新的义,因此发生矣魏晋南北向时的“新道家”和“新儒家”,如宋明时的程朱理学和陆王心学,以及近代的新儒学的意味人物像熊十力、金岳霖、梁漱溟、牟宗三等,大家熟悉。
中原哲学的其余一个特点是言语问题,何出此言?中国底哲学家表达思想的方式充分新鲜,言论文字很短缺很简单,言论、文章没有外部上的关联,他们也非是标准的哲学著作,很多字的记录或书籍的共同体收集也未是在一个固定的秋,也从不哲学家是工作,所以我们理解起来就相当的产生难度了,先哲们尽管来部分演绎与论证,但都是比较少之,而且为是不够清楚的,这是以中国的哲学家们易所以名言隽语、比喻例证的款型来表述自己之眼光。冯老在挥洒被说:“名言一定特别简短,比喻例证一定无关联”。到此处我们又获得了炎黄哲学的别一个特色——明晰不足、暗示有余。正是为明细不足。所以才暗示有余,用后世补充前者,以实现某种平衡。富于暗示、不明了不仅是神州哲学的特点,也以中华文化之博者发出体现,我们的诗词、绘画、礼仪都反映了外约含蓄、暗示委婉的表征,所以聪明之人就是会见错过摸索言外之完全,但是儒道的言论虽然简易,但是却保罗万象,耐人寻味,其中的小聪明永远都研究不尽。
神州哲学的其余一个风味就是知识论从来不曾提高兴起,冯友兰先生在挥洒被说:“认识论为开之提出,只有以强调别主观和成立的上才发生,在审美连续体中从来不这么的界别,在审美连续体中认识者和吃认识者是一个圆”。正是由这种整体性的观念,使得把过程及结果视为了一个整机,而来认识论就是出被之进程是何等发生结果的,因此认识论在这种整体下没发展兴起。
那是呀使中国哲学不同以及天堂的哲学,具有深厚的炎黄特色吗?
率先是中华底地理背景,《论语》里说:“智者乐山、仁者乐水”,中国大凡洲国家,在古代人的眼里我们无世界之概念,我们有只是“天下”“江山“
”四海“的概念,所以我们死自然的失去想社会和私和国,而雅少去思天地天地。
从是炎黄之经济背景,中国凡是地国家,所以以农业为生,而西方则因为商业为生,所以于咱们的思量中就来了情之分,区别情节的理由是,农业关系及了养,而商就涉及及交换,在交换之前要是预先要生生育才行,所以农业化了华绝根本的产形式。此外还与农商的活着方式来提到,“农”朴实天真,一帧土地,他们之财一定单一,不爱随便迁移,因此十分的稳定;“商”心思多财产容易转运,因此不平静。
村民的生活方法与见闻不仅限制在中国哲学的始末还限定着中华哲学的方法论,更影响了炎黄哲学家思维方式,就比如对庄稼和田地同,把于事物直接的会心作为了哲学的出发点,重视整体,忽略了认识过程。由此也无为难讲工业就是还是说不易为什么从来不在中国进步兴起,农的活方式是适合自然,他们谴责人为,而工业是运用自然、改造自然,二者相悖自然工业无法前行了。
希腊人在在海洋国家,他们拄商业,所以都快速发展了起,然后随之而来的是城邦政治,而中国底社会制度是家邦制度,我们以家庭为单位要形式。海洋国家之食指尽管像孔子说的凡“智者”,他们明白、精细,而中华丁即是“仁者”。
诵读毕这个开,对华哲学的领悟还处在同一领略半解的等级,自己的感想呢正如乱,大概的留了几沾的印象关于中华哲学和外哲学:大陆国家与海洋国家、商业和农业、富于暗示明晰不足、出世与入世、理想和具体、城邦与家邦、仁者和智者等词汇,这是初读冯友兰先生的《中国哲学简史》的一点感想。此外,还回忆了冯老先生于题被说及之均等句话:“哲学时如果人头当做人口如果成为人,而无是变成某种人”。


2017年12月28日

前言 - 思考要


  socket 写过一点点,  总感觉非常别扭. 例如 read, recv, recvfrom
这些为底这么奇葩. 这是 linux 的计划吗.

这种强糅合的 read 代码, '带坏'了小人. 想起很久以前看了的
<<UNIX痛恨者手册>>, 外加上经常写点过平台

库. 不得不思考设计, 发现 

  1) winds 对于 socket 设计比 linux POSIX 设计理解更加融洽一遗弃丢

  2) linux 性能比较 winds 好. (开源哲学 对冲 精英文化)

  3) 应用层是独未齐的域, 不要同漫长巷子走不清

(备注 : 有同一段落日子特别烦 winds, 及其喜欢羡慕 unix,
但是趁成长认识产生了老大怪变, 痛恨没钱没有时间)


刚好文 - 来点证明


1. 如果得以不妨多写点过平台, 线程安全之代码

  不妨举个败大街的例子, 我们常以拍卖时的下一直用  gettimeofday

#include <sys/time.h>int gettimeofday(struct timeval * tv, struct timezone * tz);The functions gettimeofday() can get and set the time as well as a timezone. The tv argument is a struct timeval (as specified in <sys/time.h>): struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */ };and gives the number of seconds and microseconds since the Epoch (see time(2)). The tz argument is a struct timezone: struct timezone { int tz_minuteswest; /* minutes west of Greenwich */ int tz_dsttime; /* type of DST correction */ };If either tv or tz is NULL, the corresponding structure is not set or returned. (However, compilation warnings will result if tv is NULL.)The use of the timezone structure is obsolete; the tz argument should normally be specified as NULL.

只是简短的拿走时时刻秒数和微秒, 附赠一个时区消息. 这个函数一眼看过去,
设计之无优美.

倘期待你的代码能够当 winds 上面吧跑, 可能需要一个移植版本 

#ifdef _MSC_VER#include <winsock2.h>//// gettimeofday - Linux sys/time.h 中得到微秒的一种实现// tv : 返回结果包含秒数和微秒数// tz : 包含的时区,在winds上这个变量没有用不返回// return : 默认返回0//inline intgettimeofday(struct timeval * tv, void * tz) { struct tm st; SYSTEMTIME wtm; GetLocalTime(&wtm); st.tm_year = wtm.wYear - 1900; st.tm_mon = wtm.wMonth - 1; // winds的计数更好些 st.tm_mday = wtm.wDay; st.tm_hour = wtm.wHour; st.tm_min = wtm.wMinute; st.tm_sec = wtm.wSecond; st.tm_isdst = -1; // 不考虑夏令时 tv->tv_sec = (long)mktime(&st); // 32位使用数据强转 tv->tv_usec = wtm.wMilliseconds * 1000; // 毫秒转成微秒 return 0;}#endif

同你的工作量已经起来了. 不随便高不强效. 总是个下策. 这里来只再次好之主,
利用  timespec_get 

#include <time.h>/* Set TS to calendar time based in time base BASE. */inttimespec_get (struct timespec *ts, int base){ switch (base) { case TIME_UTC: if (__clock_gettime (CLOCK_REALTIME, ts) < 0) return 0; break; default: return 0; } return base;}

C11 标准供的得到秒和纳秒的日函数, CL 和 GCC clang 都提供了支持.
上面是glibc中一个实现, 是不是坏 low.

扯一点

  1.1 写代码应该出非常强之目的, 非特殊领域应弱化针对性

  1.2 上层应用, 应该要向着标准靠拢, 其次是操作系统, 再至编译器

对于CL 实现了 timespec_get, 应该最要目的是为 C++11基础特性支持,
还有 clang 的实现.


2. 你是否以及自我同曾经因为 WSAStartup 大骂微软SB

  写 socket winds 一定会有下三部曲, 或者个别总统曲. 

// 1. CL 编译器 设置引入库 ws2_32.lib 引入宏 _WINSOCK_DEPRECATED_NO_WARNINGS// 2. 加载 socket dll WSADATA wsad; WSAStartup(WINSOCK_VERSION, &wsad);// 3. 卸载 WSACleanup

当即想, linux 为底木有上面这么随便意义的操作.  其实里面有个故事,
当初微软不得了时代, 无法和unix socket互连.

后来回扯, 其它众多巨擎给该 Winsock 升级, dll 版本变化厉害.
所以有了点扔给用户层加载绑定dll版本的操作.

那么重linux 上面的确不待吗. 其实为急需, 只是在运作 _start
时候拉我们开了. 所以这点端了可如此

封装 

//// socket_init - 单例启动socket库的初始化方法// inline void socket_init(void) {#ifdef _MSC_VER WSADATA wsad; WSAStartup(WINSOCK_VERSION, &wsad);#elif __GUNC__ signal(SIGPIPE, SIG_IGN) #endif}

3. 还记得 read, recv, recvfrom 吗 ?

  还处在整个均文件决定的畏惧中吗.
实现这种思路无外乎注册和switch工厂分支. 那便表示 read 是单杂糅

体. 在我们只是使用 socket fd 读取的上 最终 read -> recv
这个函数调用, 即 recv(fd, buf, sz, 0). 对于后者 

ssize_t__libc_recv (int fd, void *buf, size_t len, int flags){#ifdef __ASSUME_RECV_SYSCALL return SYSCALL_CANCEL (recv, fd, buf, len, flags);#elif defined __ASSUME_RECVFROM_SYSCALL return SYSCALL_CANCEL (recvfrom, fd, buf, len, flags, NULL, NULL);#else return SOCKETCALL_CANCEL (recv, fd, buf, len, flags);#endif}

可以表明 recv 和  recvfrom 实现层面来过纠缠. 但是和 read 上层没有耦合.
所以对于只有 TCP socket 最好之

做法还是 recv 走起. 

 #include <sys/types.h> #include <sys/socket.h> ssize_t recv(int sockfd, void *buf, size_t len, int flags); ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);

内部对于 recv flags 有下面几乎单多平台都支持之宏 

#define MSG_OOB 0x1 /* process out-of-band data */#define MSG_PEEK 0x2 /* peek at incoming message */#define MSG_DONTROUTE 0x4 /* send without using routing tables */#if(_WIN32_WINNT >= 0x0502)#define MSG_WAITALL 0x8 /* do not complete until packet is completely filled */#endif //(_WIN32_WINNT >= 0x0502)

实在开被, MSG_OOB 带客数据, 除非学习. 否则无意义. MSG_PEEK 在以前的
\r\n 切分流协议的时刻还用.

当今为主还无场景. MSG_WAITALL 可以尝试一下代很久以前的 for read.
可以起轻微提升性能. 

recv(fd, buf, len, 0) or recv(fd, buf, len, MSG_WAITALL)
用在您的经常说之'高性能'服务器遭到一经休是大杂烩 read.


4. 是否为 listen, accept 好奇过 !

  首先由 listen 和 accept 一针对好cp说起. 其实大体过程无外乎 listen
-> connect -> accept .  这里只是于用法

而言首先看 listen 部分 

/* * Perform a listen. Basically, we allow the protocol to do anything * necessary for a listen, and if that works, we mark the socket as * ready for listening. */SYSCALL_DEFINE2(listen, int, fd, int, backlog){ struct socket *sock; int err, fput_needed; int somaxconn; sock = sockfd_lookup_light(fd, &err, &fput_needed); if (sock) { somaxconn = sock_net(sock->sk)->core.sysctl_somaxconn; if ((unsigned int)backlog > somaxconn) backlog = somaxconn; err = security_socket_listen(sock, backlog); if (!err) err = sock->ops->listen(sock, backlog); fput_light(sock->file, fput_needed); } return err;}

顿时段 listen 代码写得实在好看. 我从中看下, 内核的思路或注册.  对于
backlog 存在一个最为要命值.

之所以对于高性能服务器 listen 正确的写法推荐 

listen(fd, SOMAXCONN)

将 listen创建的监听和链接成功队列大小交给操作系统的基本配置. 

对 accept 原本想出口同样开腔 accept4 + SOCK_NONBLOCK 降低 socket 开发流程.
但是同想起 unix or winds

应无支持到底了. 还是老实 accept + O_NONBLOCK. 

SYSCALL_DEFINE3(accept, int, fd, struct sockaddr __user *, upeer_sockaddr, int __user *, upeer_addrlen){ return sys_accept4(fd, upeer_sockaddr, upeer_addrlen, 0);}

忽然意识及优化就是身枯竭, 打击痛点才是王道.


5. 你为 select 苦恼过为, 去她的 poll 

  其实想 select 这种函数设计之的确蛮奇葩. select -> poll ->
epoll 从床上到床下经历了些微夜晚. 

重点是 winds 和 linux 对于 select 完全是少单函数, 恰巧名字一样.
透过下面一个坏的素材了解

一个实在的客户端非阻塞的
connect

select 开发中之故法. 为什么讲 select, 因为便宜 winds 移植调试 !!
iocp很吊但是当真的非常为难把它和epoll

揉在一起. 坐两者都格外意外. epoll 是 61 + 10 分 一个iocp是 90 - 20 分.
如果强揉就如对准 socket 行为

读写链接都需抽出一重合. 但是之所以 select 只待抽出 poll
监听触发抽出来就可以了. 后期起时间我们

详细分析 iocp. 当前带来大家感受下 epoll 那些操作.

#include <sys/epoll.h>int epoll_create(int size);int epoll_create1(int flags);epoll_create() creates a new epoll(7) instance. Since Linux 2.6.8, the size argument is ignored, but must be greater than zero; see NOTES below.epoll_create() returns a file descriptor referring to the new epoll instance. This file descriptor is used for all the subse‐quent calls to the epoll interface. When no longer required, the file descriptor returned by epoll_create() should be closed by using close(2). When all file descriptors referring to an epoll instance have been closed, the kernel destroys the instance and releases the associated resources for reuse.epoll_create1()If flags is 0, then, other than the fact that the obsolete size argument is dropped, epoll_create1() is the same as epoll_create(). The following value can be included in flags to obtain different behavior:EPOLL_CLOEXECSet the close-on-exec (FD_CLOEXEC) flag on the new file descriptor. See the description of the O_CLOEXEC flag in open(2) for reasons why this may be useful.

更为具体是

SYSCALL_DEFINE1(epoll_create, int, size){ if (size <= 0) return -EINVAL; return sys_epoll_create1(0);}

自打点可以关押出来时引进的 epoll_create 用法是 

epoll_create1(EPOLL_CLOEXEC)

不再需要 size这个历史包袱, 并且 exec 重新开进程的下会 close 返回的
efd 防止句柄泄漏. 

还有一个尽管是关于 epoll 的 EPOLLIN 默认LT水平触发状态, 另外一个凡是 EPOLLET
边缘触发. 

/* Flags for epoll_create1. */#define EPOLL_CLOEXEC O_CLOEXEC/* Valid opcodes to issue to sys_epoll_ctl() */#define EPOLL_CTL_ADD 1#define EPOLL_CTL_DEL 2#define EPOLL_CTL_MOD 3/* Epoll event masks */#define EPOLLIN 0x00000001#define EPOLLPRI 0x00000002#define EPOLLOUT 0x00000004#define EPOLLERR 0x00000008#define EPOLLHUP 0x00000010/* Set the Edge Triggered behaviour for the target file descriptor */#define EPOLLET (1U << 31)

对此一般服务器例如游戏服务器, 大型Web系统服务器 LT 这种高档 select
操作就够用了.  刚好把证

代码抛给上层. ET 模式之话语就待在框架的网络层处理包异常.
但是安全之高快之大道通信可以品尝

相同仿照ET流程交互. epoll 功能特别好理解, 注册, 监听, 返回结果.
最恶心就是回去结果的操作. 

不妨展示个有代码 

//// sp_wait - poll 的 wait函数, 等待别人自投罗网// sp : poll 模型// e : 返回的操作事件集// max : e 的最大长度// return : 返回待操作事件长度, <= 0 表示失败//int sp_wait(poll_t sp, struct event e[], int max) { struct epoll_event ev[max]; int i, n = epoll_wait(sp, ev, max, -1); for (i = 0; i < n; ++i) { uint32_t flag = ev[i].events; e[i].s = ev[i].data.ptr; e[i].write = flag & EPOLLOUT; e[i].read = flag & (EPOLLIN | EPOLLHUP); e[i].error = flag & EPOLLERR; } return n;}

一个最为简便易行的示结果, 这里虽处理了 EPOLLOUT 和 EPOLLHUP 还有 EPOLLERR
枚举.

EPOLLHUP 解决 listen -> connect -> accept 占用资源不自由,
空转问题. 其实想最简易的TCP网络也不好搞.

务求多 (网络细节, 是个老工)


6. 讲的略泛泛, 文末不妨展示个 莫忘本初心 

#include <stdio.h>#include <limits.h>#include <stdint.h>//// 强迫症 × 根治// file : len.c// make : gcc -g -Wall -O2 -o love.out love.c// test : objdump -S love.out//int main(int argc, char * argv[]) { const char heoo[] = "Hello World"; for (size_t i = sizeof heoo - 1; i < SIZE_MAX; --i) printf(" %c", heoo[i]); putchar('\n'); return 0;}

后记 - 力求走过


  错误是难免的迎指正. 

      
昨天复出
: http://music.163.com/m/song?id=3986241&userid=16529894

       The Carpenters - Yesterday
Once[SD,854x480].mp4 :
https://pan.baidu.com/s/1slA0yU5

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。