duangsues.is_a? SaltedFish
60 subscribers
609 photos
6 videos
91 files
562 links
🌶🐔🐟 duangsuse 的日常
尤其喜欢发些奇奇怪怪的东西
和转载别人的东西
Download Telegram
Forwarded from Ghost Flying
看最后是用了 PLT Hook 。。
Forwarded from Ghost Flying
以我在线上跑 Got hook 的经验。。
Forwarded from Ghost Flying
应该会有很多奇怪的坑。。
Forwarded from Ghost Flying
我碰到过诸如。。so 已经 fopen 了
Forwarded from Ghost Flying
然后按照 segment table 去读越界
Forwarded from Ghost Flying
然后拿到那个 so 本地却很正常的玄学问题。。
Forwarded from Pollex
Forwarded from Rikka
magisk 换文件
Forwarded from Rikka
似乎有一定几率不生效
Forwarded from Ghost Flying
(Rikka 那么喜欢做这种感觉我以前的组很适合你
Forwarded from Ghost Flying
(然后就可以做毒瘤了
Forwarded from Rikka
可是 Rikka 魔法只做 Rikka 想做的事情
Forwarded from Deleted Account
文件确实替换了
Forwarded from Deleted Account
但是位置报告就是不能用
duangsues.is_a? SaltedFish
下面我来说一下这次放假的四个事情: 1. Lime Lime 之前考虑了 新展开规则、宏对象、调试行号列号、元编程 API、引擎 API、虚拟机、编译形式、作用域、C 实现、重写和重写语言 等的问题,时间久远就不说细节了,透露一下以后 Lime 只有一个全局作用域,但是 (-> foreach (# (list proc) (with (ref 0) (do (i) (` (proc ([] list (<-- i)) (--> i (++ (<-- i))) (? (> i ([]- list))…
"Lime 的「六个展开」"

1. (symbol arglist)
2. (. handlerid arglist)
3. ((macro sexp) arglist)
4. ()
5. (macro-value arglist)
6. object

额外展开:

^# 定义特殊的宏对象,它接受后面所有 S 表达式
(1 args) 如果对象拥有 Macro toMacro() 方法,尝试使用 toMacro() 返回的宏
否则,尝试全局的 (->macro 1) 返回的宏,如果没有定义直接失败,如果返回的不是宏也失败

这所谓「六个展开」其实可以归纳为三类

1. 宏展开

Lime 基于宏和自省功能来实现类似 Scheme 的语法,宏最终被展开为原生调用执行

(symbol arglist)
((macro sexp) arglist)
(macro-value arglist)
(object arglist)

「宏解析」允许解析「符号」、S 表达式列表、宏对象、可以转换为宏的对象

Apply(施用宏)过程中,S 表达式首项必须是一个能被解析为宏的对象
而其后皆为宏的参数,如果参数长度不对,抛出 Arity Mismatch,除非是 vararg 宏

2. 原生调用

Lime 使用原生调用赋予拥有反射能力的 JVM 方便执行动态动作的能力

(. handlerid arglist)

Lime 必须有一个手段把宏变为实际行动,这就是 Lime 如此做的途径,“原生”调用

handlerid 其后皆为宏的参数,如果参数长度不对,抛出 Arity Mismatch,除非是 vararg 接收器

3. 无展开

不进行展开,直接返回原对象

()
object

Lime 不知道该如何展开这些对象,一般它认为这些对象已经被展开,所以直接返回他们
基本数据类型
nil ()
bool #t #f
number 01 0x1 0b1001 0o122 2323N 32323D 2233.223F 66666L 6B
list (a b c)
string '' "" "\"" "\n"
行注释
; comment
任何不可识别的都作为标识符
p.s. 冰封波博客上那个字符串 escape 失败不报错作为标识符的真是奇妙

展开规则:
对任何宏:检查参数列表长度,对所有参数 sexp 列表递归展开并对标识符解引用,然后填充宏参数递归展开,如果是 varargs 宏就直接将求值后的列表填充到 varargs 参数里
^* 宏:检查参数列表长度,然后填充宏参数递归展开,如果是 varargs 宏就直接将求值后的列表填充到 varargs 参数里
. 宏:检查对应 send handler 参数列表长度,将所有参数 sexp 列表递归展开并对标识符解引用,发送调用到处理 handler

插件:
1. 取值 hook
2. 找不到变量 proc
3. SEND handler
4. 错误 hook

作用域:
全局变量 args 在每次递归展开时有效,它是惰性求值的
全局变量 __stack 储存了所有作用域表
不过它是惰性求值的
Lime 使用嵌套作用域

全局变量 __env 表示整个 Lime 全局表
__lime 表示解释器对象
This media is not supported in your browser
VIEW IN TELEGRAM
最后的最后,这周想的事情,之前想继续写 JLime 但是没有时间了
首先是关于某科学的 chatbot Semic
仍然停留在设想阶段

现在貌似是这样大概的结构

语言理解和输出

“乱想”系统
- 记忆(包含各种各种各种类型的...)
- 感情

逻辑处理和输出