安全多方计算(MPC)从入门到精通:Frutta语言

Frutta是JUGO为安全多方计算(MPC)设计的专用编程语言,它是一门类C的高级语言,支持多种运算符和数据类型。本文介绍了Frutta的基本结构、语法、预处理器、数据类型、变量、运算符及函数等核心概念,并通过实例展示了其用法。此外,还提到了JUGO平台的在线IDE用于编译运行Frutta程序。
摘要由CSDN通过智能技术生成

简介:在上一节《安全多方计算(MPC)从入门到精通:简易教程》中,我们已经简单介绍过Frutta语言,Frutta是JUGO为计算逻辑而开发的编程语言,计算逻辑在MPC中是为解决具体业务而编写的算法。它是一门类C高级语言,支持大部分运算符、数据类型,表达方式的实现——300个门电路,仅需一行代码!

1.什么是Frutta

  Frutta是矩阵元为安全多方计算的算法电路文件生成而专门定制的编程语言。它是一门类高级语言,也是一门面向过程的编程语言。Frutta支持大部分运算符、数据类型,表达方式灵活实用。目前只有矩阵元提供的在线ide可以进行编译运行。ide可以把Frutta文件编译成可在JUGO平台上执行的电路文件。

2.程序结构

  在我们学习Frutta语言的基本构建块之前,让我们先来看看一个最小的Frutta程序结构,在接下来的章节中可以以此作为参考。

Frutta语言主要包括以下部分:

预处理器指令

输入输出定义

函数

变量

语句&表达式

注释

1.    #parties 2  /* 两个参与方 */  

2.      

3.    #input 1 int32 /* 参与方1,可以是基础类型,也可以是数组,结构体等复杂类型 */  

4.    #input 2 int32 /* 参与方2 */  

5.    #output 1 int32 /* 输出方 */  

6.      

7.    /* 主函数,完成加法操作 */  

8.    function void main()  

9.    {  

10.      output1 = input1 + input2;  

11.    }

 

一、基本语法

  Frutta程序由各种Token组成,Token可以是关键字、标识符、常量、字符串值,或者是一个符号。

分号

  在Frutta程序中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束。

注释

  注释就像是程序中的帮助文本,它们会被编译器忽略。它们以 /* 开始,以字符 */ 终止。

  您不能在注释内嵌套注释,注释也不能出现在字符串或字符值中。

标识符

  标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。

  标识符内不允许出现标点字符,比如 @、$ 和 %。标识符是区分大小写。因此,Manpower 和 manpower 是两个不同的标识符。下面列出几个有效的标识符:

    mohd   zara   abc   move_name   a_123   myname50   _temp   j   a23b9   retVal

关键字

  下表列出了Frutta中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。对于输入输出,请按照顺序,依次写。输入个数跟参与计算方个数保持一致。比如有3个计算方个数,那么请依次定义input 1 xxx, input 2 xxx, input 3 xxx。输出也同样。

else    typedef    return    for     void    if      struct   abs       max     min

int8    uint8      int16     uint16   int32    uint32   int64    uint64    bool

input1  input2   ...   inputN    output1    output2   ...   outputN

空格

  只包含空格的行,被称为空白行,可能带有注释,编译器会完全忽略它。

  在Frutta中,空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。因此,在下面的语句中:type age;。在这里,type 和 age 之间必须至少有一个空格字符(通常是一个空白符),这样编译器才能够区分它们。另一方面,在下面的语句中:

fruit = apples + oranges;

Copy

fruit 和 =,或者 = 和 apples 之间的空格字符不是必需的,但是为了增强可读性,您可以根据需要适当增加一些空格。

 

二、预处理器

  预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。

  所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。

  在Frutta中,支持两类预编译器指令:

include

  支持包含外部文件,外部文件支持以下几类外部文件:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值