自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(110)
  • 资源 (5)
  • 收藏
  • 关注

原创 Banana Script,一个严格子集 JavaScript 的解释器

Banana Script是一个精简的JavaScript解释器,旨在保留核心功能并去除冗余特性。它仅支持JSON兼容的数据类型和函数式编程,移除了类、this、undefined等概念。语法严格明确,变量必须用let声明,运算无隐式转换。解释器设计轻量级,兼容C99,支持手动垃圾回收和闭包优化。项目采用模块化架构,各组件单向依赖,可作为嵌入式脚本引擎使用。开发者可自由扩展C函数,所有值都遵循GC规则,通过标准API进行操作。

2025-07-16 08:43:11 653

原创 BananaScript Execution Modes

Banana Script 提供三种执行模式:1) 直接运行源代码模式,通过js file1.js file2.js执行;2) 编译为字节码模式,使用-c参数生成.bin字节码文件和.txt交叉引用文件,可通过js -b运行;3) 编译为独立可执行文件模式,将生成的.txt字节码嵌入C程序,编译后直接运行。示例展示了如何声明C函数并在JS中调用,实现函数转发功能。三种模式均能保持一致的运行时错误处理能力,其中交叉引用文件用于定位错误源代码位置。

2025-11-29 08:14:50 334

原创 Banana Script,一个C99实现的,类JavaScript极简语法的脚本引擎

本文介绍了Banana Script REPL环境的主要特点和语法规则。该脚本语言精简了JavaScript,只保留核心功能,支持闭包和函数式编程,使用双冒号绑定运算符实现链式调用。语法严格,不进行隐式类型转换,不支持面向对象特性。项目采用模块化设计,兼容C99,提供标准库实现。语言特点包括手动垃圾回收、局部变量管理、错误处理等,适合轻量级脚本需求。

2025-10-16 17:42:34 350

原创 一种比操作系统更加抽象的,可以裸跑的库

本文提出一种轻量级解决方案:将CPU架构统一抽象,通过C标准库封装保护模式和内存管理功能,使编译后的二进制程序可直接在裸机上运行,无需完整操作系统。该方法适用于服务程序直接部署场景,由boot loader加载即可运行。同时支持可选功能模块(网络、文件系统、外设驱动等),可基于Linux驱动构建适配层。这种标准化库设计在嵌入式等特定场景具有实用价值。

2025-10-08 12:05:16 120

原创 窗口系统(windowing system)的架构思考

摘要:文章探讨了实现通用窗口系统时存储优化的方案。作者发现采用三块32位色的1000x1000存储区需要12MB内存过大,决定改为按需取用像素。创新性地提出使用函数指针实现类似duck typing的get_pixel机制,为不同UI对象类型(如位图、文本框)预置特定实现,通过函数指针动态调用。相比传统继承多态,这种方法更灵活,无需严格分类,只需函数签名匹配即可。这种设计避免了类型判断开销,同时保持了扩展性。

2025-08-16 10:17:35 248

原创 try catch throw的本质

本文揭示了异常处理机制的本质:try/catch相当于结构化goto,throw本质是带有错误标记的return。作者通过C语言错误处理、goto优化、setjmp/longjmp到最终try/catch的演进过程,说明不同语言异常处理只是实现方式的差异。关键在于函数返回值中嵌入成功标记,失败时携带错误信息。不同语言(C/Go/C++/Java)的处理方式差异仅在于实现细节,本质上都是通过某种形式的错误传递和跳转机制完成异常处理。

2025-08-06 19:48:56 370

原创 历史版本的vscode下载地址

作者因不满VSCode日益臃肿的体积,尝试寻找历史版本。通过修改URL找到1.10版下载页,并发现从1.13.1开始提供zip便携版。经测试验证:1.13.1已支持--user-data-dir参数,1.25.1开始支持data目录便携模式。作者还发现GitHub存档包含所有历史版本的发布说明。最终确认1.25.1版本完全满足需求,既轻量又支持便携功能。

2025-07-28 21:58:02 1865

原创 debian bookworm virtualbox xorg xinit segment fault

摘要:解决虚拟机显卡显示问题只需将默认的"VMSVGA"显卡类型更改为"VBoxSVGA"即可。这一简单的设置变更能够有效改善虚拟机的图形显示性能,适用于VirtualBox等虚拟化环境中的显示优化需求。

2025-07-27 22:01:10 273

原创 ES7的绑定运算符::太复杂,我给它改简单点

摘要:作者提出JavaScript的面向对象特性过于复杂,于是在自创的Banana脚本语言中设计了::运算符作为语法糖,将值::函数(...参数)等价转换为函数(值,...参数)。这种设计既避开了面向对象的复杂性,又保留了类方法的调用风格,支持链式语法。文中展示了从简单的字符串打印到复杂对象方法调用的示例,验证了该运算符在与其他成员访问运算符组合时的正确性。

2025-07-27 13:03:20 275

原创 好的编程语言设计是用简洁清晰的原语组合复杂功能

文章摘要: 本文探讨了编程语言中函数命名的优化策略和功能整合方法。作者建议采用input、print、read、write四个通用函数名,并通过函数重载实现多种功能。以read函数为例,展示了6种不同参数组合的用法,包括文件指针操作、直接读取文件、命令行读取等。同时介绍了如何结合正则表达式匹配(match)和格式化输出(format)实现复杂字符串处理。这种设计既保持了接口简洁性,又提供了灵活的编程方式。

2025-07-26 21:34:33 181

原创 小于200行C代码实现具有捕获、转义、字符类、量词功能的正则表达式匹配

文章摘要:本文介绍了一个正则表达式匹配器的实现方法,采用递归下降结构,避免了Rob Pike经典实现中的递归爆栈问题。文章详细阐述了实现步骤:基本匹配结构、嵌套括号处理、字符匹配函数以及量词支持。代码使用了C语言实现,通过结构体re_capture记录匹配结果,并提供了捕获组处理和打印功能。实现中特别注意了字符类、转义序列和量词的处理逻辑,既保持了代码简洁性又增强了功能性。

2025-07-26 19:59:36 227

原创 删除debian xdm自启动ibus的配置项

摘要:作者在排查dbus-daemon和dbus-x11进程问题时,误删/etc/X11/xdm目录导致登录界面异常。尝试重装xdm无效后,通过虚拟机打包原始配置并恢复,成功修复界面问题。但发现进程用户身份发生变化,推测可能读取了用户目录的配置文件。整个过程展示了系统配置文件的敏感性,以及通过虚拟机备份恢复的有效解决方案。

2025-07-19 22:38:57 395

原创 debian的pulseaudio删掉也没事

Linux系统原生支持ALSA音频架构,通过安装alsa-utils工具包即可使用命令行控制音频设备。Mplayer和Chromium浏览器都直接兼容ALSA,但Firefox自51版本后仅支持PulseAudio,需借助apulse进行兼容转换。文中配图展示了相关音频设置界面。(92字)

2025-07-19 22:22:25 253

原创 移除debian升级后没用的垃圾

快速清理Debian系统启动项:通过最小安装虚拟机与实机对比,用service --status-all找出多余启动项,再用apt remove卸载相关包(如可疑的initscripts)。最后执行apt autoremove和apt autoclean彻底清理。图中对比显示实机存在大量冗余服务,精简后可显著提升启动速度。

2025-07-19 22:19:48 335

原创 posix/unix/linux有很多恶心的设计

摘要:ANSI转义序列的设计导致ESC键与方向键识别困难,需要复杂的判断逻辑。由于ESC键和方向键都以0x1B开头,程序必须通过临时修改终端设置、添加延迟和缓冲区检查来区分二者。文中代码展示了如何处理这种歧义,包括设置非规范模式、读取后续字符等技巧。这种设计缺陷迫使开发者编写大量冗余代码来解决本应简单的按键识别问题,体现了某些标准设计中存在的逻辑缺陷。

2025-07-19 22:18:10 247

原创 Banana NoMake,只需一个.h文件,直接使用C语言写脚本,取代那些令人生厌的gmake、nmake、cmake......

本文提出了一种基于C语言的构建系统替代方案,通过封装核心功能到头文件中实现简单高效的构建逻辑。作者认为传统构建系统过于复杂且违背KISS原则,而利用图灵完备的C语言可以更直观地实现文件时间比较和命令执行等核心功能。方案提供了文件操作、命令执行(支持串行/并行)等基础API,通过条件判断实现类似Makefile的依赖关系,同时保持代码简洁。示例展示了如何定义编译规则、处理依赖关系和并发构建,相比传统构建系统具有更好的灵活性和可读性。项目采用CC BY-NC-ND 4.0许可,强调无需额外安装,直接使用C编译器

2025-07-16 07:15:34 798

原创 教你如何去掉诸如gmake nmake cmake那些令人生厌的构建系统

我不喜欢那些构建系统,我认为他们带头违反了他们自己制定的“机制优于策略”和“KISS”原则。为什么要学习那些丑陋无比配置规则?图灵完备的脚本语言不更好吗?我发现既然C编译器几乎是每个操作系统的基础,那么把必要的功能封装进一个高度兼容的头文件里面,不就可以方便地使用C语言写构建脚本了?如此,强迫症的我得到了满足,客户也很高兴,因为他们不用再安装那些软件,只需要键入。下面是一个构建脚本例子,是不是比那些令人生厌的makefile更简单?或者Windows中。

2024-12-02 20:32:29 248

原创 无需外部硬件引入噪声的真随机发生器

返回值相同啊,那么短期内温度之类的硬件噪声也可能相同啊,对不对?只要满足无法预测行就行,毕竟真随机的定义就是无法预测。原理很简单,就是利用程序执行时间的不确定性,那么就无法预测下一次。也不用精确到纳秒级之类的,秒级都行,有人可能会说短期内。

2024-05-21 09:24:29 303

原创 clang-format单独运行版本(standalone)的下载

一句话,python有,

2024-05-07 11:07:38 677

原创 突然想到史上最简单的字典树(Trie Tree)省内存方法

传统的,节点如果是ASCII字符,8位的,那么必须256字节数组,最差情况,空间浪费接近99.6%,所以网上很多把节点合并的压缩算法,我总觉得太繁琐,避而远之的,之前也想过比如稀疏数组,但时间复杂度就不是O(1)了。刚才突发奇想,一个8位的ASCII我可以拆成2个4位的,那么不就是2个长度16字节的数组?再进一步,我可以拆成8个二进制位啊,每位只有0和1,对应2字节数组,不就解决了吗?不是B树,两码事,我愿称之为两个字符的字典树。

2024-05-05 11:42:01 276

原创 windows环境一个命令更新python所有的包

以前linux环境写过一个纯python调用pip函数的版本,现在懒得找了,而网上查了半天未果,还不如自己动手丰衣足食。,因为需要与服务器端比对,而upgrade反正都是需要比对的。即可,非常简洁,非常完美。,如果要写到批处理中,把。

2024-04-21 16:39:33 320 1

原创 一个极简鲁棒的C语言的动态数据类型扩展,取代诸如C++/Rust那些愚蠢的东西

对动态变量的操作都是指针方式,也就是struct var *,指针本身也是变量,分两类:一类是栈变量,就是源代码里直接命名的,称之为引用,同样是托管的,使用结构体struct ref记录信息,挂在全局链表prefroot上,另一类是堆变量,是动态创建的,匿名的,比如array/object里面的指向子变量的指针。将a变量赋值给b变量,实际传递的是地址;后缀_s表示安全版本的函数,比如包含字符数组参数的函数,如果是字符串字面量,可以使用不安全函数,别的情况建议用安全函数,也就是必须指定字符串长度的。

2024-04-13 15:46:07 1099

原创 偶然发现一个平均分布得不可思议的伪随机函数

却非常神奇地完美覆盖了数组的每一个位置,也就是循环len次,数组每个位置都是完美的1,如果把循环次数减少,也会发现分布足够均匀,而且我测试了不同的2的次方的数组长度,发现没有例外。起因是我在构思哈希表的结构,不想用链表处理冲突,那么就必须找一个伪随机函数,如果哈希值n对应的数组位置有值了,那么循环执行。显然不合适,也必须是“伪”的,也就是同样的输入值,算出的结果必须一样。,直到n对应位置为空,函数必须足够“分散”,也就是每次调用结果“激烈跳动”,比如。我数学不好,这个现象能从数学上证明吗?

2024-04-06 17:37:51 374 2

原创 卷积核相当于小孔成像板

接上文,再举个例子,小孔成像,如果把小孔扩大成某个形状,那么它就是卷积核,所成的像旋转180度,就是卷积结果。由此引申,眼科疾病散光、动物的不同瞳孔形状,都可以看作卷积核。

2023-12-26 19:56:43 601

原创 卷积相当于散射投影

设想一个点光源,投射到银幕上形成某种形状的光斑,如果把图片的每个像素都看作点光源,投射的光斑形状一致,那么这个过程等同于卷积,这个光斑旋转180度,就是卷积核。

2023-12-26 12:52:18 526

原创 解决msvc编译luajit找不到ftelli64的问题

找到些许线索,用dependency walker检查msvcrt.dll,果然缺少_ftelli64(特么_fseeki64倒是有),搜索luajit项目目录,只有一处地方出现_ftelli64,于是按照线索在前面加上一行。为避免恶心的版本套版本的msvcxxx,我一直用的是wdk-7600.16385.1,执行msvcbuild.bat编译,报错。,网上搜索,问题出在_ftelli64函数,写测试代码test.c。失败,提示同样的错误,继续网上搜索,在。成功,静态链接没问题,但是。

2023-08-07 12:39:23 333

原创 解决在Linux下使用Firefox浏览Google搜索页面时,键盘方向键无法移动搜索框光标的问题

原以为是X Window键盘或者输入法的什么Bug,但是后来发现只有Firefox,只有Google页面里的搜索框有此问题。经过F12检查,发现删除元素的键盘事件监听程序后就正常了,那么如何用Greasemonkey做呢?DOM没有枚举元素绑定的事件监听程序的函数,不得不说是一大缺陷,除了Chrome调试控制台提供了一个。,但是Firefox没有,于是我想到在document-start之时hook。函数,但是发现并无作用,为什么没法改?有效,却依旧没有解释,不管了,Web的世界就是这么凌乱,无所谓了。

2023-04-16 12:28:21 387

原创 Windows环境下与POSIX兼容的strerror()函数的正确实现方法

输出的不同,以及用任务管理器可以看出没有内存泄漏。函数,但只是个样子货,与Windows的。经测试,没有内存泄漏和空指针问题。我的方式相比于别的烂大街文章,有。返回的错误码毫不相干,这里使用。

2023-03-24 15:21:03 622

原创 安全的malloc/realloc/free宏

已经释放过的指针等,此处规定所有指针定义的时候必须初始化为。根据ISO C标准,这几个函数的某些行为是未定义的,比如。,之后就能任意调用下面两个宏而不会产生内存泄漏等问题。

2023-03-01 21:32:16 385

原创 C语言编译期/运行期动态替换某些函数的实现

比如这些函数有缺省的实现,但是在不同环境下可以被替换成更优化的实现,那么可以使用函数指针,甚至在动态链接的情况下也是可以的,比如下面的例子,例子非常简陋,随手写的,没用到头文件宏之类的。

2023-02-26 20:51:23 497

原创 适用于老版本的魔兽世界登陆器编写指南

Windows批处理代码,放在WOW根目录下,没什么复杂的,多个服务器依样画葫芦改就是了。realmlist.wtf文件不同语言不用版本的位置不一样,我用的是3.3.5 enUS版,注意调整。密码自动进剪贴板,游戏启动后Ctrl-V粘贴即可。

2023-01-30 19:37:04 2052

原创 Lua数组下标从1开始的习惯导致容易犯的错误

不过其实#号取数组长度本身就有nil缺陷,所以最佳做法还是另外开个值存长度,把它看成类似c语言数组那种半成品就行了。首先说明,下标0完全没问题,只是习惯问题。写起来非常自然,但是注意,此时t的下标从3开始了,这就会导致。

2022-11-03 13:01:54 762

原创 Lua三元表达式的坑

但是,当b为false/nil的时候将失败,此时会一直返回c。

2022-10-14 18:48:51 296

原创 清空微博的油猴脚本

能完美应对页面弹出异常对话框、页面刷新等情况,证明了脚本是可以完美模拟浏览器操作的。

2022-09-23 07:45:14 773

原创 Lua一些容易被忽视的性能问题

branch1和branch2耗时相差无几,而branch3则为6倍。根据查询到的相关信息,查询分支较少的时候,if else比hash算法快,反之则hash快。而branch3为何如此之慢是因为每次执行都new了table,所以对于固定的table应该放在函数外面。

2022-09-14 08:37:49 428

原创 JavaScript生成器(Generator)和Lua协程(Coroutine)如何传入值的区别

返回的已经是协程了;前者调用之时可以通过参数往里传值,所以第一次。是“生成”生成器的函数,需要调用它才能得到生成器,而后者。原理一样,本质都是协程。无需再传,而后者必须通过第一次。话说如果Lua设计成。,就和JS差不多了。...

2022-08-16 09:41:25 369

原创 JavaScript协程(function*/yield)转化为异步(async/await)

现在生成器函数是执行的主体,而调用方则是辅助的。一直感觉这两者之间存在某种联系,奈何智商不够,辗转反侧了好几年,终于查到了一篇醍醐灌顶的回答。函数里进一步包装成Promise,正如上述StackOverflow回答里面所写的那样。的重大意义在于让表达式的返回值“出去再进来”绕了一圈,这样就能在。当然,以上最简单的写法纯属“脱裤子放屁”,没有任何实际功能,把。,是返回数据给调用方的,调用方是主体。在生成器函数里的作用相当于。的关键字,需要写成诸如。后面语句的值,也就是。都删掉结果一样,但是。.........

2022-08-14 16:52:15 771

原创 为了更好地理解await关键字

暂时没有找到严格的确切的说明,有知道的吗?

2022-08-11 22:08:07 89

原创 WebAssembly就是个垃圾

好奇查了一下,这破玩意儿居然没有标准库,特么只能做数值运算吗?不能像js一样直接操作浏览器?还得用一套巨复杂的规则加载?哪个脑子进水的设计的?JavaScript用的是,我以前就想过,完全可以在此基础上扩充其它语言支持啊,比如Python是不是可以?WebAssembly可以啊?真是脑子有💩,全球IT界被印度阿三占领的恶果!...

2022-07-03 10:14:51 341

原创 Lua的多重返回和多重赋值混合在一起的神奇化学反应

比如:输出:可以看到,“2”被吃了。原因参见Everything You Didn’t Want to Know About Lua’s Multi-Values

2022-06-09 13:49:48 120

Web Service介绍

Web Service介绍Web Service介绍Web Service介绍

2007-08-02

Base64编码

Base64编码Base64编码Base64编码

2007-08-02

PhoneGap文档

PhoneGap是跨平台移动开发的利器,这是我手工下载并打包的文档

2011-11-02

HTML5教程(无广告)

从W3C School抓取的HTML5教程,然后编译成了CHM文件,相比网上流传的那份带垃圾广告的教程,我的CHM是绝对纯净没有广告的。 第一次发资源,谢谢支持。

2011-05-17

JBPM 5.1官方文档

官方指南加+API文档,手工下载,手工打包CHM

2011-11-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除