3个版本
0.0.2 | 2019年3月31日 |
---|---|
0.0.1 | 2019年3月31日 |
0.0.0 | 2019年3月31日 |
#759 in 操作系统
5KB
JOSS
JOSS(JSON操作系统模式)的目标是通过使用JSON在WebAssembly的宿主接口中与类UNIX环境交互。
为什么?
WebAssembly正在走向不仅可在浏览器中运行,而且也可在浏览器外运行的路线。它需要一个与外界通信的通用方式。传统技术通常使用C风格的结构体来跨边界传递数据。JOSS是一个使用JSON的规范。这种做法有几个原因。
JSON对编程语言的要求更简单
并非所有编程语言都有强大的二进制结构体处理能力。通过使用JSON,我们可以将交互JOSS系统的要求降低到JSON解析和编码。
JSON是可读的
可读性有助于调试,并使系统行为内省更加容易。
JSON是一个流行的标准
它是结构化格式中最为人知的格式之一,并且已经得到了非常强大的库支持。
当需要时,JOSS不排除更高效的二进制接口
实话实说,与操作系统交互的性能并不是我们程序最重要的方面。当它是时,JOSS并不限制使用替代的高效交互。二进制结构体可以被认为是一种过于急切的优化。
JOSS可以轻松地与远程系统一起使用
大多数Web已经理解JSON,想象一下你正在编写一个Web浏览器中的JOSS系统接口。问题更容易简化为通过Web服务器或Web套接字与表示你系统的服务器进行JSON通信。
更易于错误处理
因为JSON比二进制格式更灵活。错误处理更容易,并且更容易实现到规范中。
WebAssembly目前对多个输出的支持较差,即使这样,可能也不够
由于WebAssembly缺乏返回多个输出的简单方法,我们被迫求助于某种类型的结构化格式。即使在多个输出的使用下,表示非常嵌套或具有数组的返回对象也可能有问题。JSON几乎没有这些复杂性(除了内存分配之外),并且与当前的WebAssembly规范一起工作。
示例
规范将模仿POSIX接口的概念,强调可读性和简单性 http://pubs.opengroup.org/onlinepubs/9699919799/
获取命令行参数
请求
{
"operation":"get_command_line_arguments"
}
响应
{
"arguments":["vim","foo.txt"]
}
打开文件
请求
{
"operation":"open_file",
"path":"/home/helloworld.txt",
"mode":["read","write"]
}
响应
{
"file_descriptor":12345
}
写入文件
请求
{
"operation":"write_to_file",
"file_descriptor":12345,
"text":"hello world"
}
{
"operation":"write_to_file",
"file_descriptor":12345,
"base64":"basbfrasfs="
}
响应
{}
{
"error":"you do not own this file"
}
依赖项
~45KB