该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

MFP语言的一个重要功能就是通过call ... endcall语句实现对并行计算的支持。MFP语言实现多线互不干扰并行计算的基本原理是采用沙盒机制。每一个MFP沙盒拥有完整一套所在设备的MFP系统库,但是自己用户代码库和用户资源库则是独立的,服务端会为一个从客户端传来的call程序块建立一个MFP沙盒。程序块所在的代码文件和程序块调用的用户代码所在文件会保存在沙盒的用户代码库目录下,所需要的资源文件会保存在沙盒的用户资源库目录下。各个MFP沙盒的程序栈也都是独立的。这样就保证了各个MFP沙盒之间不会相互影响,沙盒和MFP服务端本地程序也不会相互影响。

在帮助中已经有call ... endcall语句的详细例子,但是那是客户端设备发送一段算法去服务端设备。如果客户端想要发送一个游戏去服务端设备并在服务端设备运行,该如何实现呢?

游戏和普通算法的区别在于,游戏需要支持视频和音频,所以有很多资源文件(比如,图像文件,数据库文件,声音文件等等)。在其他方面,游戏和普通算法是一样的。所以关键就在于客户端的MFP语言如何将资源文件传到服务端,而服务端的MFP语言(它和客户端MFP语言运行的是同样的代码)如何保存并调用这些资源文件,同时不影响在服务端运行的其它客户端的call程序块或者服务端自己正在运行的程序。

以下代码给出了一个例子,在这段代码需要使用一个叫做food.png的图像文件。在可编程科学计算器上(不论是基于安卓的还是基于JAVA的),该图像文件和这段代码所在的MFP脚本文件位于同一个目录。

@build_asset copy_to_resource(get_upper_level_path(get_src_file_path()) + "food.png", "images/food.png")

if is_sandbox_session()

foodImage = load_image(get_sandbox_session_resource_path() + "images/food.png")

elseif is_mfp_app()

foodImage = load_image_from_zip(get_asset_file_path("resource"), "images/food.png", 1)

else

foodImage = load_image(get_upper_level_path(get_src_file_path()) + "food.png")

endif

如果我们将这段代码编译到一个APK安装包中,我们需要把food.png图片拷贝到APK的asset的resource.zip文件中。安装了APK之后,在运行MFP应用时,我们需要调用load_image_from_zip从APK的asset的resource.zip文件中读出图片。为了实现上述过程,我们加入了一个annotation语句:

@build_asset copy_to_resource(get_upper_level_path(get_src_file_path()) + "food.png", "images/food.png")

,告诉MFP编译器将位于代码所在目录的food.png文件拷贝到APK的asset的resource.zip文件中,在resource.zip文件中的具体位置是images/food.png。

如果我们不是编译安装包,而是需要把这段代码发送到另外一个设备上去执行,@build_asset同样会发挥作用。如果客户端是可编程科学计算器,@build_asset会告诉call语句把位于代码所在目录的food.png文件传送到服务端MFP沙盒的resource目录中,具体位置是resource目录中的image子目录的food.png文件。如果客户端是一个通过编译出的APK安装的MFP应用,由于MFP应用已经将food.png保存在asset的resource.zip文件中的images目录下,call语句会从安卓的asset中提取出food.png然后传送到服务端MFP沙盒的resource目录中,具体位置仍然是resource目录中的image子目录的food.png文件。

在运行上述代码时,我们需要根据MFP所在的环境执行不同的指令。如果MFP是在沙盒中运行,也就是服务端执行客户端的call程序块,那么资源文件是保存在本地存储器上的,读取图像文件时我们用load_image并指定路径即可。我们通过函数is_sandbox_session()返回true来断定MFP是在沙盒中运行,通过调用函数get_sandbox_session_resource_path()获取沙盒用户资源库所在目录。

如果MFP是在编译安装后的MFP应用中运行,资源文件保存在安卓的asset中的resource.zip包内,所以我们需要调用load_image_from_zip函数。我们通过函数is_mfp_app()返回true来断定MFP是在编译安装后的MFP应用中运行,通过调用函数get_asset_file_path("resource")获取resource包在安卓asset中的具体位置。

如果MFP是在可编程科学计算器中运行,不论是基于JAVA还是安卓,资源文件都保存在本地存储器上,读取图像文件时我们用load_image并指定路径即可。food.png所在的具体目录可以通过调用get_upper_level_path(get_src_file_path())来定位。

如果读取的不是图像文件而是声音文件,上述代码的逻辑基本不变,区别就是调用play_sound或者play_sound_from_zip而不是load_image或者load_image_from_zip。

还需要注意的是,由于函数is_sandbox_session()和is_mfp_app()可能均返回true(比如服务端是一个MFP应用),开发者必须首先判断当前MFP是否在沙盒中运行,也就是说is_sandbox_session()条件语句必须放在最前面,其次才是is_mfp_app()条件语句。

将上述代码加入一个call程序块中,或者将上述代码编入一个运行游戏的函数然后在call程序块中调用,MFP就可以自动地替开发者传递代码和资源文件并在另一个设备中执行该游戏了。

1.8.0.79版的可编程科学计算器已经提供了这样一个例子。在服务器端,使用者选择“探索示例”,然后选择“并行计算例子”,然后选择“运行”,输入2,点击确定按钮,进入服务器模式,这时该程序会列出本设备所有的IP地址,使用者选择一个作为服务地址,然后回车(ENTER键,注意不是运行键)。在客户端设备上,同样地,使用者选择“探索示例”,然后选择“并行计算例子”,然后选择“运行”,输入3,点击确定按钮,进入客户端模式,这时该程序会列出本设备所有的IP地址,使用者选择一个作为客户端地址,然后回车(ENTER键,注意不是运行键),然后再输入刚才选择的服务器地址,然后再次ENTER键回车,客户端会将call程序块发送到服务端,然后在服务端运行超级超级小白兔游戏。不管服务器端的用户代码库中是不是已经有了该游戏均不影响该游戏正常运行,因为该游戏的代码和资源都是通过客户端发送过来的。

需要注意的是,服务器和客户端的IP地址最好位于同一个子网内,也就是中间没有NAT(Network Address Translation)层,如果做不到这一点,最少也必须做到通过客户端IP地址能够ping通服务端的IP地址,在现有的IPv4体系下,由于用户的设备(不管是客户端还是服务端)的IP地址往往被一重或多重NAT层所遮蔽,所以想要执行远程并行计算的难度比较大,但是如果多个设备在同一个内部网中,互联并行则毫无问题;未来IPv6体系下,NAT层不再会像现在这么大行其道,执行远程并行计算将不再是梦想。此外,开发者还在尝试引入NetOTC协议,真正实现远程点对点连接。总之,在编程语言级别上实现并行计算是一个全新思想,MFP语言作为全球第一种引入此思想的编程语言必然有着光明的前景。

科学计算机怎么编程玩,如何通过可编程科学计算器在另一个设备中运行本机MFP语言编写的...相关推荐

  1. c语言编程一个象棋游戏,急求:C语言编写的中国象棋游戏一个

    急求:C语言编写的中国象棋游戏一个 來源:互聯網  2009-09-08 12:30:35  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: 由于学习 ...

  2. 小米科学计算机怎么用,玩转小米手机的五个技巧 这样设置最科学

    玩转小米手机的五个技巧,这样设置,你的小米手机使用更方便. 一.一键换机 新手机拿到之后,手机里只有一些预装的软件,没有用户需要的其他软件,更别说联系人和照片等数据了.而拿到小米手机的第一件事,自然是 ...

  3. 元气骑士超级科学计算机有什么用,元气骑士:超级科学计算器不只是白武,全面解析它的4种形态!...

    元气骑士最近新版的发布也是加入了很多新的武器,其中热度高,获取不易的武器就是妙妙枪和超级科学计算器了,为什么说两把武器获取难度高呢?因为这两把武器不是地牢箱子和商人那可以获取的武器,玩家只有通过宝箱开 ...

  4. MATLAB科学计算机lnx代码,[2018年最新整理]Matlab科学计算.ppt

    [2018年最新整理]Matlab科学计算 Matlab与科学计算 计算机学院 刘咏梅 Email:liuyongmei@hrbeu.edu.cn 第二章 MATLAB数值计算基础 Introduct ...

  5. 科学计算机sd mode使用方法,你是否知道科学计算器的使用方法

    介绍科学计算器使用方法之前先介绍科学计算器的相关概念,科学计算器大家并不陌生,但是其上的大部分功能也许大家就不是很了解了,可能很多人就只能在界面上几个功能用用,从而埋没了科学计算器的真正价值,现在我就 ...

  6. 科学计算机 次方用法,2020年中级经济师考试专用计算器使用技巧

    原标题:2020年中级经济师考试专用计算器使用技巧 2020年中级经济师考试时间为11月21日-22日,考试在计算机上进行,考生参加考试可携带的用品只限于铅笔.中级经济师考试包括许多计算题,并且需要计 ...

  7. 超科学计算机和哪个融合,音乐会和计算机科学融合在一项新的研究中

    女王的"We Will Rock You"的标志性"stomp-stomp-clap"诞生于摇滚明星和教授都非常清楚的挑战:如何让大量的人参与现场表演,如音乐会 ...

  8. 小米手机科学计算机,小米产品总监科普计算 10%+10% 手机计算器全线阵亡原因

    原标题:小米产品总监科普计算 10%+10% 手机计算器全线阵亡原因 站长之家(ChinaZ.com) 9 月 3 日消息:近日网上热议各大手机品牌手机的计算器都出现了神奇的 bug,计算「10%+1 ...

  9. 科学计算机计算复合增长率,复合增长率excel公式(年均复合增长率计算器)

    老兵直接拿历年增长率的和除以年限作为复合增长率了.其实,我的本意就是想求个均值,和前面的几个项目一样都是均值,但是潜意识地写成了复合增长率,毕竟复合增长率更加常用且更加合理. 虽然是个小错误,但是有必 ...

最新文章

  1. 【ACM】杭电OJ 2000
  2. SAP SD基础知识之文本确定(Text Determination)
  3. 清华姚班的科研能力,能孵化出一家怎样的公司?
  4. 安装 SQL Server 2008 R2 的硬件和软件要求(转)
  5. oracle数据库启动
  6. matlab中创建一个工程,从文件夹创建新工程
  7. 【计算机网络】计算机网络概述
  8. Mybatis 原始Dao层开发
  9. 零拷贝实现高效的数据传输 -Efficient data transfer through zero copy
  10. cesium 文本标注被遮挡_Cesium-知识点(Viewer)
  11. JS输出内容为[object Object]
  12. uniapp做微信小程序身份证识别功能(百度云身份证识别api)
  13. android enable ipv6,安卓开启ipv6网络支持小米手机(miui)IPv6无法使用的问题
  14. Dorado 7 使用到的 注释
  15. 苹果账号的分类以及注册免费苹果账号
  16. 打码兼职练习程序下载及说明
  17. shaderToy初学笔记(一)(​转载自最简单的ShaderToy入门 - 笑脸渲染_亨利王的博客-CSDN博客_shadertoy)
  18. 肘关节附属运动测试软件,肘关节运动损伤
  19. 月下夜想曲200.6(攻略1)
  20. 为什么我想要一个投影仪?微鲸F1智能投影仪首发评测

热门文章

  1. 2022,itbird的年终总结报告
  2. 冒泡排序法究极详细讲解*
  3. 运放放大倍数计算公式_运算放大器基础1——用作比较器
  4. 今天不小心跳着看了黑镜第一季三集
  5. vmlinux 反汇编_看vmlinux的符号信息
  6. 微信小程序日期午别排班表
  7. drv8833 pwm 使用和坑
  8. ​内嵌物理知识神经网络(PINN)是个坑吗?
  9. php上传 io err,【Dz上传附件】解决Discuz Server(IO)Error问题
  10. 盘点国内外十类垂直型社交网站