比起哲学,我更爱数学
今天闲着无聊,听了听马原的课。在讲真理与谬误的对立和统一,说什么真理和谬误在一定条件下可以相互转化之类的,还问我们怎么理解,在日常生活中有些什么实例。知道我首先想到了什么吗?是哥德尔不完备定理,我不想详细的述说它,这是数学家的工作,它大概讲了这样两个事实,包含某些公理的一致逻辑系统是不完备的和在此系统内不完备性还不可自证。我可以不知道什么是真理,什么是谬误,本身就模糊的东西,就是用来感受的,但我知道什么是真命题和假命题。我不理解真理与谬误的对立和统一,但我知道满足非真即假的逻辑系统里有可能存在不可判断真假的命题。我不知道真理与谬误在什么条件下可以相互转化,但我知道在不同公理系统下的定理是不一样的。为什么我要说这些?其实我想表达的是,与别人争论大道理的非必要性,当然说服与政治需求是另外一回事。其实每个人都知道争论真假的非必要性,注意这里我没说辩论,因为辩论的主要目的是让评委更偏袒自己,但人却总有说服对方的冲动。虽然我们都有中立的判断,但终究需要选择。就跟有时,我们可以述说大段大段关于是否扶老人的话题,但最后在现实里还是得做出是否扶老人的选择,这就是表态。马原有几个有趣的地方,一个是强调实 ...
lua通读之GC机制
垃圾回收概述需求如果我们只是写一个如“Hello World”这般简单的程序话,垃圾回收本身就不是我们该考虑的问题,实际上,我们的程序是运行在操作系统上,当程序运行结束后,操作系统会自动回收所有程序使用的内存,也就是说,不是一直长时间运行的程序没有考虑垃圾回收的必要。同时,除了C和C++以外几乎所有语言都有垃圾回收机制,我们需要注意的是这里的垃圾回收本质指的是自动内存管理机制。C/C++有相应的内存管理接口,但需要手动。而其它大部分语言没有提供内存管理接口,都是自动管理,就是我们通常所说的拥有垃圾回收机制。虽然我们可以使用更多拥有良好GC机制的语言进行高效编程,但C/C++可以说是所有高级语言的老祖宗了,大部分语言的解释器都依赖与C/C++实现,其实C才比较正确,C++提供面向对象的特性,同时提供了析构函数用于自动回收对象,注意是对象,对象里的数据则通过编写析构函数来回收。
学习GC原理不论我们学习多少语言,会发现它们都提供了与C/C++交互的机制,或载入C/C++库的机制,比如java的jni,目的都说是提高效率。总之,我们终会使用C/C++,所以了解一些垃圾回收的方式还是有必要 ...
lua通读之协程
协程的基本用法前言协程是lua十分有趣的一部分,它并非多线程,而是单线程,用法有点goto,但有本质区别。但我们需要注意这属于脚本动态语言,静态语言没有,也没有需要这种功能的必要。
含义协程是一段代码的封装,一般通过一个“线程”将代码包装起来,其特点是可以中途挂起(yield)和恢复(resume)。不过在lua的线程与一般语言的线程不太一样。
协程状态对于一个协程有四种状态,‘running’协程正在运行,‘suspended’协程处于挂起状态,‘normal’协程处于唤起另一个协程的状态中,‘dead’协程运行完毕。由‘normal’我们就可以知道,lua程序运行时,只能有一个协程处于‘running’状态,由‘dead’我们可以知道,一个协程只能运行一次。
lua里的使用在lua里,协程的主要库函数有三个coroutine.create(f),coroutine.yield (···)和coroutine.resume (co [, val1, ···])。
coroutine.create用于创建一个协程,传入一个函数用于封装代码,其返回值是一个协程引用,使用type的输出是t ...
lua通读之lua源码分析
前言终于来到我盼望已久的源码阅读了,但我又开始思考一个我经常问的问题,源码该怎么读?是否要全读一遍呢?比如我们的lua是一个类编译器,有必要去读大家都学过的词法分析和句法分析部分吗?读源码要从入口函数main开始吗?读源码更重要的是读出思想,如果不懂得几种程序的设计模式没有摆脱以往的思想,你会发现java源码,怎么也读不懂,甚至会觉得莫名其妙。实际上理解设计模式的好处,就能体会更加高效的编程,这才是我们学习的目的。读源码,我们首先应该去读程序所定义的数据结构,在C语言里是struct,而java等面向对象的语言里就是class。在如今模块化的编程时代,我们大部分都有一直面向对象的编程思想,在我看来这是一种优秀的数据组织形式,它将大部分的实体与相应操作全都封装了,对于先整体后局部读源码有许多便利之处。多说无益,我们直接开始lua的源码之旅吧。
lua解释器我们先来看看官方程序是如何利用lua虚拟机实现解释器的。
main函数lua的入口函数长这样
lua.c123456789101112131415int main (int argc, char **argv) { int ...
lua通读之lua的基本使用
前言lua是我最喜欢的脚本语言,没有之一。主要还是它轻巧,并包含了程序设计最基本的内容,而且基本没有多余的扩展库,也致使了它强大的扩展性。虽然我最早接触lua是学习cocos2dx游戏引擎的时候,但我却对它终身难望。不过如今的时代,lua或许已经无法满足如今快速开发的时代需求了,cocos2dx的原生版本也因无法高效地开发3A大作而永远定格在了4.0。但想起以前使用lua的日子,我决定写下这个系列,以此纪念当初研究技术的时光。
基本的开发环境Ubuntu20.04,Android7.1.1+Termux,lua5.1
关于使用lua5.1的说明: 首先5.1是lua的一次大变革版本,其次许多扩展都基于此版本,最后后来版本的变化不大。
lua的基本内容下载lua5.1.5源码,然后直接make编译,我们可以得到一下核心文件:
123456#lua的头文件,用于嵌入开发lua.h lauxlib.h lualib.h luaconfig.h#lua运行的基本动态库liblua51.so#lua的主程序lua luac
lua用于直接解释lua脚本,luac用于将lua脚本编译为在 ...
我的前方是什么?
最近做了一次通识课的作业,不知为何深有感触,感觉做为第一篇文章在合适不过了,先把文章放出来:
不是自诩,我确实读了不少书。但忘了多少,又留了多少,连我自己也不能确定。有时自己或许就是抱着提高自己文学素养的崇高目的,但到头来却是打发无聊的读书时间。在中学的教室里,桌上当然只能放书了。所以我不懂什么就是鉴赏,该如何鉴赏。最近几天我知道了一部叫《当代英雄》的小说,知道了一个叫毕巧林的人。或许我理解与原作者表达的不同,但有一句话确实触动到我了。“我肯定负有崇高的使命,因为我感觉到心灵里充满了使不完的力量,但我不知道这使命是什么。”抛开文章历史背景与文章结构,毕竟我们不是做鉴赏的嘛,而我想说的是感悟。学校里总有一些类似就业指导中心的人会打电话来问你,有一些问题比较引起我的注意。“你为什么选这个学校?”“你为什么选这个专业?”“你对这个学校(专业)了解吗?”虽然心里很想说这还需要理由吗?但还是可以假假的扯一大堆,属时有些奇怪。但其实这些都还好,让我觉得难回答的是,“你以后想干什么?”其是考研,就业之类的都可以说。但我只想说不清楚,有时他们还会问了不了解现状和前景,我说不清楚。综合考虑的话,他们会说 ...