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:
调用基于 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"};
更多更优质的资讯,请关注我,你的支持会鼓励我不断分享更多更好的优质文章。