多语言 公用的类型定义方式 Cap‘n Proto

最近在折腾一个中间件的时候 ,用到了 Cap’n Proto

简单了解了一下, declaration names should use camelCase and must not contain underscores # 及定义类型的时候不能使用 小写或下滑线, 需要使用驼峰类型的,好吧 Alkaid 的最爱啊

有时间了解一下 protobuffer or thrift ..

就这些了,然后一些简单的测试代码:

import os
import capnp

this_dir = os.path.dirname(__file__)
node = capnp.load(os.path.join(this_dir, ‘node.capnp‘))

member_01 = node.Member.new_message()

member_01.node ="node1"
member_01.ip = "127.0.0.1"

f = open(‘node1.bin‘,‘w‘)

member_01.write( f)

f = open(‘node1.bin‘, ‘r‘)

member_01 = node.Member.read(f)
print(member_01.node)
print(member_01.ip)
#  filename  node.capnp
     @0x934efea7f017fff0;

 struct Member {
     node            @0 : Text;
     alias           @1 :List(Text);
     ip              @2 :Text;
     port            @3 :UInt32;
     inet            @4 :UInt32;
     clock           @5 :UInt32;
     state           @6 :Void;
     numOfVnodes   @7 :UInt32;
     grpLevelO1     @8 :List(Text);
     grpLevelO2     @9:List(Text);
 }

 struct ReduantNode {
     node             @0 : Text;
     avaliable        @1 : Bool;
     canReadRepair    @2 : Bool ;
     role             @3 : List(Text);
 }

 struct VnodeidNodes {
     id             @0 :UInt32 =0;
     vnodeIdFrom    @1: UInt32 = 0;
     vnodeIdTo      @2 : UInt32 =0;
     nodes          @3 : List(ReduantNode);
 }

 struct RingGroup {
     indexFrom         @0 : UInt32 =0;
     indexTo           @1 : UInt32 =0;
     vnodeidNodesList @2: List(VnodeidNodes);
 }

 struct  RingInfo {
     checksum        @0: Int32 = -1;
     firstVnodeId  @1 :UInt32 = 0;
     lastVnodeId   @2 :UInt32 = 0;
     ringGroupList @3: List(RingGroup);  #list of groups
     members         @4 : List(Member);      #cluster-members
 }

 struct NodeState {
     node  @0 : Text;
     state @1 :  Text;
     ringHashNew @2  :Text = "-1";
     ringHashOld @3  :Text = "-1";
     whenIs @4 :UInt32 = 0;
     error   @5 :UInt32 = 0;
 }
时间: 2024-08-11 07:44:43

多语言 公用的类型定义方式 Cap‘n Proto的相关文章

NodeJS类型定义方式

最近在学习nodejs,就是因为它比较轻便,并发量大,上手快.由于以前一直在做C#的后端,没有接触过javascript,所以还得慢慢学习之. nodejs所用的是javascript语言,它没有如C#语言一样正规正矩,倒是用起来还是比较方便. 要学习一门语言的初端,就要先学习其语法.今天学习nodejs的类型定义方式,以及怎样导出模块被其他js文件require调用. 上代码: //在nodejs中,类型定义就像定义函数一样,其实该函数就是Student类的构造函数 var Student=f

动态语言,静态类型,强类型定义语言,弱类型定义语言,

1 动态语言和静态语言 通常我们所说的动态语言.静态语言是指动态类型语言和静态类型语言.   1 动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来.Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言. 2 静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在

C语言学习笔记--类型定义&联合

一.类型定义 C语言自定义数据类型 (typedef) C语言提供一个叫做typedef的功能来声明一个已有的数据类型的新名字. typedef int Length; 使得Length成为int类型的别名. 这样,Length就可以替代int出现在定义变量和声明函数的地方了. Length a,b; Length a[10]; 新的类型的名字是原来类型的别名:改善了程序的可读性. typedef struct { int day; int month; int year; } Date;  

动态语言,静态语言,强类型定义语言,弱类型定义语言

动态语言和静态语言通常我们所说的动态语言.静态语言是指动态类型语言和静态类型语言. (1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来.Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言. (2)静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序

编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言的区别

一.编译型和解释型 我们先看看编译型,其实它和汇编语言是一样的:也是有一个负责翻译的程序来对我们的源代码进行转换,生成相对应的可执行代码.这个过程说得专业一点,就称为编译(Compile),而负责编译的程序自然就称为编译器(Compiler).如果我们写的程序代码都包含在一个源文件中,那么通常编译之后就会直接生成一个可执行文件,我们就可以直接运行了.但对于一个比较复杂的项目,为了方便管理,我们通常把代码分散在各个源文件中,作为不同的模块来组织.这时编译各个文件时就会生成目标文件(Object  

C语言不完全类型与延迟定义

一直以为我的C语言学的还可以,虽说不是出神入化,但是至少比较熟悉吧.但是前一段时间看了一篇微信推文,再百度了一下C语言不完全类型.发现我居然C语言不完全类型和用途甚广的延迟定义都没概念.这两天仔细查阅了相关概念并用代码实验了一下. 本文结构如下: C语言不完全类型概念介绍 一个故事 延迟定义的优点 思考- C语言不完全类型 不完全类型也就是不知道变量的所有的类型信息.比如可以声明一个数组,但是不给出该数组的长度:声明一个指针,但是不给出该指针的类型:声明一个结构体类型,但是不给出完整的结构体定义

[C语言]进阶|结构类型: 枚举, 结构, 类型定义

--------------------------------------------------------------------- 枚举: // main.c #include <stdio.h> const int red = 0; const int yellow = 1; const int green = 2; int main(int argc, const char * argv[]) { /* 常量符号化:用符号而不是具体的数字来表示程序中的数字; 这样看到符号才能知道背

C语言之变量类型和存储方式

变量可以分为全局变量.静态全局变量.局部变量和静态局部变量 变量的声明有两种情况: 1.一种是需要建立存储空间的(定义性声明).例如int a 在生命的时候就已经建立了存储空间. 2.另一种是不需要建立存储空间的(引用性声明).例如extern int a 其中变量a是在别的文件中定义的. 内存区域的划分: 1.栈区:由编译器自动分配和释放的内存区域,用于存放函数的参数值.局部变量等. 2.堆区:程序员向系统申请或释放. 3.全局区:用来保存全局变量和静态变量. 4.文字常量区:用来保存常量字符

结构体类型定义(C语言)

结构体的定义形式如下: struct 结构体名 { 结构体成员 }: 结构体变量的定义方式有三种:1.先定义结构体,再定义变量: eg. struct student{ char name[10]; int age; int student_number; }; struct student s1,s2; 2.定义结构体的同时定义变量:eg. struct student{ char name[10]; int age; int student_number; }s1,s2; 在定义结构体stu