c++ 泛型_Dart 2.5 发布,支持 Dart 与 C 相互调用

3d94103e8053a3ab90630b0c73a3574d.png

DART (计算机编程语言)

Dart是谷歌开发的计算机编程语言,后来被Ecma (ECMA-408)认定为标准 。它被用于web、服务器、移动应用 和物联网等领域的开发。它是宽松开源许可证(修改的BSD证书)下的开源软件。

Dart是面向对象的、类定义的、单继承的语言。它的语法类似C语言,可以转译为JavaScript,支持接口(interfaces)、混入(mixins)、抽象类(abstract classes)、具体化泛型(reified generics)、可选类型(optional typing)和sound type system

调用基于 C 的操作系统 API

调用 Linux 命令 system,该命令允许执行任何系统命令,传递给它的参数实际是传递给 shell/terminal,并在其运行。下面是这个命令的 C 头文件:

// C header: int system(const char *command) in stdlib.h

任何互操作机制的难点在于处理两种语言在语义上的差异。对于 dart:ffi,Dart 代码需要做两件事:

  • C 函数及其参数的类型和返回类型
  • 对应的 Dart 函数及其类型
// C header typedef:typedef SystemC = ffi.Int32 Function(ffi.Pointer command);// Dart header typedef:typedef SystemDart = int Function(ffi.Pointer command);

然后,需要加载库并查找要调用的函数,如何做到这一点取决于操作系统;在本例中,使用的是 MacOS:

// Load `stdlib`. On MacOS this is in libSystem.dylib.final dylib = ffi.DynamicLibrary.open('/usr/lib/libSystem.dylib');// Look up the system function.final systemP = dylib.lookupFunction('system');

接下来,使用与特定操作系统相关的编码对字符串参数进行编码,调用函数,并再次释放参数内存:

// Allocate a pointer to a Utf8 array containing our command.final cmdP = Utf8.toUtf8('open http://dart.dev');// Invoke the command.systemP(cmdP);// Free the pointer.cmdP.free();

此代码执行系统命令,导致系统默认浏览器打开 dart.dev:

fcf3b9da2d3a48d1606021566e43c015.gif

调用基于 C 的框架和组件

Dart 的第二个核心用途是调用基于 C 的框架和组件。如上的示例,它使用 TensorFlow Lite,一个基于 C 的 API,使用 Dart:ffi 允许在需要提供代码完成的所有操作系统上运行 TensorFlow,并具有本机 TensorFlow 实现的高性能。

目前 dart:ffi 属于预览阶段,所以还会有一些限制。

另外,从 Dart 2.5 开始,支持更多的方法来定义常量表达式,包括强制转换以及在 Dart 2.3 中提供的新的控制流和集合扩展特性:

const Object i = 3;const list = [i as int];const set = {if (list is List) ...list};const map = {if (i is int) i: "int"};

更多更优质的资讯,请关注我,你的支持会鼓励我不断分享更多更好的优质文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值