3个版本

0.0.2 2019年3月31日
0.0.1 2019年3月31日
0.0.0 2019年3月31日

#759 in 操作系统

MIT许可证

5KB

JOSS

JOSS(JSON操作系统模式)的目标是通过使用JSON在WebAssembly的宿主接口中与类UNIX环境交互。

为什么?

WebAssembly正在走向不仅可在浏览器中运行,而且也可在浏览器外运行的路线。它需要一个与外界通信的通用方式。传统技术通常使用C风格的结构体来跨边界传递数据。JOSS是一个使用JSON的规范。这种做法有几个原因。

JSON对编程语言的要求更简单

并非所有编程语言都有强大的二进制结构体处理能力。通过使用JSON,我们可以将交互JOSS系统的要求降低到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