duangsues.is_a? SaltedFish
60 subscribers
609 photos
6 videos
91 files
562 links
🌶🐔🐟 duangsuse 的日常
尤其喜欢发些奇奇怪怪的东西
和转载别人的东西
Download Telegram
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
仍然停留在设想阶段

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

语言理解和输出

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

逻辑处理和输出
还有想写的一些文档/教程
- 关于 Flappy Bird 游戏的实现
- 关于汉语拼音、中文音标和语音
- 关于简单的语义
最后是重头的 ApkBundler

妄图扩大项目规模但是还是只有一个人

打算使用 Lwan、automake、Kconfig

打算支持服务端添加某些操作,比如发布评论的中间件,和 handle 一些别的没有占用的 route,允许动态加载和静态链接插件但不能动态卸载

打算添加更多配置选项

打算支持 YAML、JSON、plain、HTML、ABuf 这几种返回 body 格式,其中,推荐使用 ABuf,除了 ABuf 和 JSON 外都是调试格式,不能允许请求中出现,ABuf 是二进制流格式

对于后端,恢复头条、问答模型和依赖系统,并添加版本检查字段,检查由客户端完成,其他模型必要时恢复原没有阉割的字段们

支持为用户和应用、头条上传图标

支持上传安装包,不过必须审核而且体积小于 50M

支持 OAuth 应用,额外信息类似 GitHub

对于插件化,
曾经的 GeekURL 改名为 ApkBundler Call


曾经的 EFC 改名为 ApkBundler Widget
曾经的 Layout 改名为 ApkBundler Render

插件系统使用 ApkBundler Scheme 技术,比如使用 ABC 安装

plugin-install:github/duangsuse/coolapk-dl

就是说展开这个 ABS(就是 Lime 翻版)表达式

plugin-install ab-abc-add_app ({ (: 'app' 43)) 'github/duangsuse/coolapk-dl'
duangsues.is_a? SaltedFish
最后是重头的 ApkBundler 妄图扩大项目规模但是还是只有一个人 打算使用 Lwan、automake、Kconfig 打算支持服务端添加某些操作,比如发布评论的中间件,和 handle 一些别的没有占用的 route,允许动态加载和静态链接插件但不能动态卸载 打算添加更多配置选项 打算支持 YAML、JSON、plain、HTML、ABuf 这几种返回 body 格式,其中,推荐使用 ABuf,除了 ABuf 和 JSON 外都是调试格式,不能允许请求中出现,ABuf 是二进制流格式 …
ABC(ApkBundler Call)技术可以用于在各种支持富文本的地方,以及在应用外通过 URL “Content View” 访问
如果要索引一个用户、一个应用,完全可以依赖 ABC

app:2
app:kh.android.dir
user:44

ABW(ApkBundler Widget)就是自动渲染内容为图片的插件,可以放在消息里

ABR(ApkBundler Render)可以将整个应用视图替换为自定义视图,可以用于扩展某些特殊应用
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse 生活细则:

暑假结束了

母上大人前几天因为某种肾脏上的疾病和感冒和并发心脏急性病住院了
开始还真的比较危险呢
现在一切平安

感谢上帝
duangsuse 坏耶!ʕ•̀ω•́ʔ✧ |SSF🐟|离校一月|!高一 日常RustRubyPython Java JavaScriptLua osdev PL eng 还有其他5个非日常能力( (= (has_telegram duangsuse) true)
This media is not supported in your browser
VIEW IN TELEGRAM
接下来本频道将承担装载 duangsuse 垃圾想法的艰巨任务,又是一大堆
+ 首先让我解释对 Fushion App 的看法...

也是一个寒歌的作品,我觉得挺好的,虽然之前我明显不是这么想,但现在我明显是这个态度(

+ Gekyll

如题,是一个老项目的翻盘作吧,上周有新动态,可惜依然不完成
这次已经基本想好了,准备彻底整装待发,明天早上写 HTML templates

lib.rb 里放置生成器具后端(填充、输出到文件)的实现,而 CLI 类则负责其前端(设置后端生成器对象,启动生成过程),启动脚本文件只负责控制权转交 CLI 类
因为我的时间毕竟有限而且事有多所以... GitApk 暂时只能做到这步,GeekApk 是不是崇才那样的东西也看它了,我打算好好学习 CS(跑

+ ApkBundler Scheme(Kotlin/JVM、JavaScript ES6)

如果可能的话,我愿意尝试 Kotlin/Multiplatform 来解决这两个,不过对 JS 来说其实 Kt 里必须写的东西其实不必要,比如数值类型自动提升、Number 对象操作等

ApkBundler 是我打算彻底独立于 GeekApk 和 GitApk 的作品,设计上会恢复之前 GeekApk 早期的大部分设计、包括依赖系统
我不知道我打不打算真正把它当一个 “商业项目” 运作,当然即使商业也只是商业标准,个人兴趣还是主打(

(当然,如果是商业项目的话,首先必须等我高中毕业了,其次,它得符合天朝变态的审查制度,但它明显会成为最良心的国产软件,而且像极了以前的酷安
(当然,我不会“借鉴”现在的酷安,它只会面向发烧友,至少是我运行的时候
(当然,我保存了之前所有真正有价值的设计文档,所以基本不会丢失好的设计,包括 PM(私信)也会加上
(当然,之前我貌似在 @dsuse 上发过一些要加的东西

ApkBundler Scheme 可能是,大家都知道很多极具扩展性的、著名的、Geek 的软件都拥有自己的脚本语言来扩展自己的功能(比如,Emacs/Emacs Lisp、Vim/VimScript)
ApkBundler 的 Android 客户端和 Web 客户端当然会支持 Java Class 文件插件和 JavaScript 插件,但是主打依然是 ABS(ApkBundler Scheme) 和 Kotlin/ES5 混合开发

+ chinese.h

就是一个 C 预处理器文件罢了(

它允许你这样写代码(跑

如果 is_good 那么就
打印("好事");
结束

+ kasm

Kool Assembler,简称 kasm

是一个多目标的汇编器,基于 kascm (为 Kasm 开发的脚本语言)开发

当然我一个人很难写完所有平台、子平台,甚至单单 x86 指令集的指令生成器(几百个,虽然常用的少)(欢迎汇编大佬指正)

(当然会写专门的辅助库/框架帮助汇编器编写的

<<引用结束

最值得 duangsuse 注意的是 duangsuse 打算写的一个汇编器,叫 kasm “Kool Assembler”

汇编器使用 kasmpp 作为预处理器,它支持宏,输入 .kasm 文件,输出 .kas 文件
kas2kass 则是 Scheme 表达式化预处理结果的程序,非常简单就是替换某些符号为空格什么的
kascm 是某个解释器,这样设计方便进行机器移植

kascm-$machine 是 kascm 可以解释的 KScheme 代码,汇编器本身

代码诸如这样

foo.kasm

;; used preprocessor rules ;;
%macro machine (mid)
.machine (mid)
%end

%macro import func (fid)
.extern (fid)
.type function (fid)
%end

%macro section (part)
.section .(part)
%end

%macro export func (fid) as (linkage)
.type function (fid)
.global (fid)
.linkage (fid), global, function, (linkage)
%end

%macro cdecl begin
push bp
mov sp, bp
%end

%macro cdecl end
pop bp
%end

;;;; 写不下.... 🙈

machine x86
import func puts

section text
export func main as _start

impl main:
cdecl fbegin
stack << text
puts ()
cdecl fend

section rodata
data text

text = string "Hello, world!"

引用结束

Kasm 自己现在单独的设计草稿将会下一条发布

+ Fakedyn(ApkBundler Server)

这个名字嘛... 我瞎起的

来源于类似 GitApk 一样的模式,能不动态就不动态,不常动态的就静态自动生成,以此尽可能提升查询速度
而动态的当然也就动态处理,不过完全不使用 SQL 查询,而是自己创建简单的、支持缓存的字符串池服务器“私人定制”化处理,考虑到稳定性可以使用 UNIX 套接字通信,但如果能做在一个进程里就更好了

只有大量数据(比如评论)需要时才使用磁盘和简单的缓存存储(就是对最新的一段消息和最近访问的消息进行固定大小缓存)

如果可能的化,Fakedyn 可以使用 Rust 编写,当然我没必要自己造轮子累死,我可以使用 Rocket.rs

+ Fakedyn 的客户端(ApkBundler 客户端)

计划内有 Kotlin Android 和 ES5 + HTML + CSS 的客户端

+ Stiack Note

下下条发布大概的草稿,将它理解为一个 C/S 架构的生产力工具,类似你们的 Telegram 频道
因为我有时候在自己的频道上做草稿

因为 Drakeet 的 “时光机” 也是类似的功能,不过很可惜后者只能在手机上用,而手机上打字往往不是那么方便

+ Rebase Server

和解吧... “官方” 服务器不好用和第三方服务器不好用是两回事
能够尝试的不如尝试一下,毕竟现成的客户端还没丢失源代码

+ InScript(附带 Android IDE)

第三条将发这次的改动

+ MEdit

就是上次类似纯纯写作那个,堆在这里可能很久以后去实现

打算支持 Markdown 右划预览、代码高亮、快速输入(包含 Markdown snippet)、插件

对于啥书、文章的拆分可能类似纯纯写作,算是打算充当后者的一个不要一分钱的替补

啥字词标点数统计、时光机、稿纸、夜间模式、色彩选择、自动(保存)备份、Markdown 扩展、“打字机模式”(高亮当前行)、、历史记录、完美行间距(明明折行算法、历史记录手段才是攻坚... 行间距根本不算什么)

以及一些文字字体、颜色、大小、行间距、字间距、Tab 长度、行号、参考列线的设置

以及备份恢复

当然我们要是能控制光标位置的,如果实在不行哪怕自己带一个 EditText 再所不惜(跑(反正 TextView 应该只渲染文字吧(拒绝怒斥请求

(当然我不是抄纯纯写作的... 我真的不打算刻意去抄,不过我打算支持之前记忆比较深的特性,而一些特性,如“打字机模式”、历史记录(不跨会话的)、字数统计、快速输入是很多编辑器、字处理器都有的,这不能算作抄袭。

+ ARET

就是说 “Android Reverse Engineering Toolkit”

特性第四条发

+ Functional

我曾经打算开发一个叫 “树”(Tree) 的工具箱,类似一个木函和各种工具箱之类的
是 Beanshell 编写的,可是没有 beanshell 支持单纯文本编辑很难,而且我对 Android GUI 模型没概念

如今打算重启,基于 InScript/ApkBundler Scheme/tChar(NativeAccess)编写、支持插件。

这将会更早开始,这次我真的没有抄啊没有抄... 设计和木函的很像纯属设计撞车

第五条发

+ LLMonkeyVM

就是说 MonkeyVM 基于 LLVM 的版本,打算使用 LLVM# 编写

另外提供一个 filter 程序来将基于 [] 和 emoji 的非标准代码转换为标准代码

+ CRTOY

就是说为了练习对 LL 的熟悉度,使用 Crystal 重写 LLVM Cookbook 上的 TOY 编译器

+ Base64(不是项目名称)

duangsuse 从清华的 Internet 介绍上了解了 Base64 编码方式和 "double quoted" 编码方式

不过为了纪念打算 C 手写编解码器,并且写教程

+ tChar(NativeAccess)

是一个 C 程序,负责 C FFI 接口的处理工作

不是图灵完全的语言,只是用来实现低效率的原生访问而已,支持类似 C 的语法来定义结构体

输出不全是字符串,为了效率有可能出现裸字节

+ WrenJava

Wren JNI 绑定

+ C# BC

GNU BC 的 C# + Kasm JIT(当然,使用 SSA 模式,前端生成处理器无关代码而由 Kasm 负责汇编,寄存器分配使用简单的贪婪法) 版本,但是这个很后很后,至少是 Kasm 稳定后

+ OpenTone

一个音高侦测器,也是很后很后

+ BiliBili Ladspa
生成放电声音的 LADSPA 插件,虽然好像有类似的

如果我学得会必须的数学模型和物理模型的话,就写这个

+ CovJIT

CovScript 的 JIT 版本

打算使用 GNU C99 扩展 + GNU Lightning 编写

+ 别的,只是记录

AMT SMT by example (TeX 项目)翻译
FlappyBird 包括抛物线教程
拼音教程
简单的中文语义列举
2D 物理模拟