version 0.0.1 alpha
- Magic Number
- CheckSum
- Method
- Data
- VM Specifier
- VM Info
- Compression
- Method
- Password
- Library Version
- Major
- Minor
- Patch
- Library EXT Info
- Access(Such as Package or Module etc)
- Dependencies(Optional)
- Constant Pool
- Strings
- Layout Section
- Type Section
- Info (Optional)
- Static(Global) Section
- Executable Section
CVM 暂定文件类型
- 元信息: 仅包含元信息的文件
- 库文件: 有 EntryPoint 时视为可执行文件
- 单一可执行文件: 对应 Jar 包
- 分离常量池的库文件: 仅包含元信息和可执行代码的库文件
- complete
CVMB in ASCII
0x43 0x56 0x4D 0x42 0x0A
- complete
方法:
- CRC
- MD5
- SHA
Data
- complete
for example
LemonVM The Best VM ever existed in the fucking universe
see String Type
- complete
运行这个库的VM的信息
for example
version: 1.0.0
extensions: SIMD SoftFloat JIT
platform: POSIX
thread: green-thread
len + custom info
- complete
就是把字节码剩下的所有部分全部压缩
- complete
see semantic version
- complete
len + custom info
for example:
extensions: aaa, bbb, ccc, ddd
global env: yyy, zzz
- complete
len + custom info
for example
package: org.lemonvm.yyy.zzz
module: ...
- complete
len + custom info
for example:
org.lemonscript.float
org.aaa.bbb
常量池分为三个部分
- string data
- layout info
- type info
- constants
- complete 就是一堆bytes
0x00 0x00 0x00 0x00 0x00 0x00 ...
- complete
有一个对应的UUID 描述了数据类型的layout 然后就是每个项对应的offset 比如有
struct {
i32 xxx
i64 yyy
u8 zzz
}
该格式的人类可读格式会是如下
size 16 xxx 0 yyy 4 zzz 12
比方说困难一点的格式
struct {
union {
i32 a
u8 b
}
i32 c
}
size 8 a 0 b 0 c 4
数组类型
struct {
i32[114514] a
}
size 114514*4 a 0
- complete
包含了类型信息
有一个UUID还有一组跟Layout对应的UUID
这个应该会更方便做ADT类型
名字存储在 Constants
中
- complete
有对应Layout
的UUID还有一个Strings
的Offset
TODO: 数据类型 TODO: 指针类型
- complete
应该存储关于单个函数或全局变量的相关信息如访问控制, 平台相关编译信息,调试信息等.
- complete
如果你把一个文件当一个类似Java
的类来使用的话这里应该存放的是每一个field
的信息, 如果是类似C
系列的语言就可以放置一些static
相关的信息, 反正就是这个语义
- complete
TODO
- 单一可执行文件,但没有虚拟机
- <需要lld/ld> 可以注册虚拟机静态链接库之后打包成该平台下单一可执行文件
- ELF
- COFF
- MACH-O