runtime系统的Cello

通过充当一个现代的、功能强大的runtime系统,Cello使许多以前在C中不切实际或笨拙的事情变得简单,例如:

通用数据结构

多态函数

接口/类型类

构造函数/析构函数

可选垃圾回收

例外情况

反思

而且,由于Cello与标准C无缝地协同工作,所以您可以获得其他所有的好处,例如出色的性能、强大的工具和广泛的库。

https://github.com/orangeduck/Cello

Examples

#include “Cello.h”

int main(int argc, char** argv) {

/* Stack objects are created using
“$” */

var i0 = $(Int, 5);

var i1 = $(Int, 3);

var i2 = $(Int, 4);

/* Heap objects are created using
“new” */

var items = new(Array, Int, i0, i1, i2);

/* Collections can be looped over */

foreach (item in items) {

print(“Object %$
is of type %$\n”,

item, type_of(item));

}

/* Heap objects destructed via Garbage
Collection */

return 0;

}

#include “Cello.h”

int main(int
argc, char** argv) {

/* Shorthand $ can
be used for basic types */

var prices = new(Table, String,
Int);

set(prices, $S(“Apple”),  $I(12));

set(prices, $S(“Banana”), $I( 6));

set(prices, $S(“Pear”),   $I(55));

/* Tables also
support iteration */

foreach (key in prices) {

var val = get(prices, key);

print(“Price of %$ is %$\n”, key, val);

}

return 0;

}

Articles

Learning Resources:

Installation
Cello World
Quickstart
Common
Queries / Pitfalls

Articles about its creation and internal workings:

Best
Improvements of Cello 2.0
A Fat Pointer
Library
Cello vs C++
vs ObjC
Benchmarks
Garbage
Collection

More
Examples

#include “Cello.h” int main(int argc, char** argv) {   var items = new(Array, Int,     $I( 8), $I( 5), I(20),I(20),     I(20),    I(15), $I(16), I(98));/∗Iterateoverindicesusing"range"∗/foreach(iinrange(I(98));   /* Iterate over indices using "range" */  foreach (i in range(I(98));  /∗Iterateoverindicesusing"range"∗/ foreach(iinrange(I(len(items)))) {    print(“Item Range %i is %i\n”, i, get(items, i));  }   /* Iterate over every other item with “slice” */   foreach (item in slice(items, _, _, $I(2))) {    print(“Item Slice %i\n”, item);  }    return 0;}

#include “Cello.h”

/* Define a
normal C structure */

struct Point {

float x, y;

};

/* Make it
compatible with Cello */

var Point = Cello(Point);

int main(int
argc, char** argv) {

/* Create on Stack
or Heap */

var p0 = $(Point, 0.0, 1.0);

var p1 = new(Point, $(Point, 0.0,
2.0));

/* It can be shown,
compared, hashed, etc…

**

** p0: <‘Point’ At 0x000000000022FC58>

** p1: <‘Point’ At 0x00000000004C7CC8>

** cmp: 1

** hash: 2849275892l

*/

print(“p0: %KaTeX parse error: Undefined control sequence: \np at position 1: \̲n̲p̲1: %\ncmp: %i\nhash: %ul\n”,

p0, p1, $I(cmp(p0, p1)), $I(hash(p0)));

/* And collected by
the GC when out of scope */

return 0;

}

F.A.Q

为什么会有这种情况?

把Cello做为一个有趣的实验,看看C语言看起来像是被砍掉的极限。除了作为一个功能强大的库和工具箱外,对于那些想探索C语言的人来说,应该很有趣。

它是如何工作的?

建议阅读一个指针库来了解Cello是如何工作的。也可以浏览一下源代码,听说它是相当可读的。

它能用于产品吗?

最好先在业余爱好项目上试用Cello。Cello的目标是产品化之前试用,但因为它是一个怪物,它有着相当的奇特和陷阱,如果在团队中工作,或者在最后期限,那么C++等语言就有更好的工具、支持和社区。

有人用Cello吗?

有人已经尝试过它,据说,没有一个引人注目的项目使用它。Cello太大了,如果新的C项目想要便携和易于维护的话,它是一个很不错的依赖库。

runtime系统的Cello相关推荐

  1. 转:Cocoa Runtime系统知识整理

    本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 简介 与Runtime交互 ...

  2. runtime自动归档/解档

    原文出自:标哥的技术博客 前言 善用runtime,可以解决自动归档解档.想想以前归档是手动写的,确实太麻烦了.现在有了runtime,我们可以做到自动化了.本篇文章旨在学习如何通过runtime实现 ...

  3. Runtime知识点整理

    Runtime介绍 Objective-C 是一个动态语言,这意味着它不仅需要一个编译器,也需要一个运行时系统来动态得创建类和对象.进行消息传递和转发. Runtime就是这个运行时系统. Runti ...

  4. iOS runtime和runloop

    runtime 和 runloop 作为一个程序员进阶是必须的,也是非常重要的, 在面试过程中是经常会被问到的, 所以大家有必要进行研究,有能力的童鞋可以和下面作者一样, 亲历实践一下. 在简书里发现 ...

  5. oc runtime

    观 :http://yulingtianxia.com/blog/2014/11/05/objective-c-runtime/  的总结: 1.调用方法的本质: [receiver message] ...

  6. iOS之runtime

    runtime 简介: 1.通过 Objective-C 直接编写 Objective-C 代码 在程序运行期间会自动将代码转换成相应的结构体和函数. 2.通过NSObject的方法 NSObject ...

  7. iOS开发-Runtime详解(简书)

    简介 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的.比如: [receiver message]; // ...

  8. iOS学习之Runtime(二)

    前面已经介绍了Runtime系统的概念.作用.部分技术点和应用场景,这篇将会继续学习Runtime的其他知识. 一.Runtime技术点之类/对象的关联对象 关联对象不是为类/对象添加属性或者成员变量 ...

  9. runtime相关知识

    简介: objc是一门动态语言,它总是想办法把一些决定工作从编译连接推迟到运行时.也就是说只有编译系统是不够的,,还需要一个把一些一个运行时系统(runtime system)来执行编译后的代码.这就 ...

最新文章

  1. 程序员面试金典适合java么,【程序员面试金典】面试题 01.03. URL化(示例代码)
  2. 阻塞队列BlockingQueue用法
  3. [MOSS开发]:通过简单BUG跟踪Demo阐述用户控件对列表的操作
  4. python中的文件父路径怎么表达_python中的文件父路径怎么表达_如何在Python中访问父目录...
  5. mysql master slave 灾备技术_MySQL灾备恢复在线主从复制变成主主复制及多源复制【转】...
  6. 【Linux】Linux的关机和虚拟机克隆、快照
  7. java 错误码设计_关于Java中异常的设计
  8. 利用github协作开发步骤
  9. 浏览器了解(五)资源加载顺序
  10. OpenWRT原版固件安装
  11. 最近公共祖先 解题报告
  12. python从入门到实践答案第十章_Python编程:从入门到实践——【作业】——第十章(文件和异常)...
  13. 博客制作系 -- 2.4. Git
  14. UNIX 系统的下载地址
  15. GD32F103移植FreeRTOS
  16. 黑鲨官网装机大师工具如何重装win10系统,win10系统重装
  17. 通信行业名词解释ID、MD、HW、SW
  18. 【GEO数据库】数据
  19. liunx系统下搭建domian
  20. python爬虫爬取豆瓣图书

热门文章

  1. 2022-2028年中国铁路行业投资分析及前景预测报告(全卷)
  2. 2022-2028年中国耐二甲醚橡胶密封材料行业市场全景调研及发展趋势分析报告
  3. Eclipse的编码
  4. LeetCode简单题之石头与宝石
  5. 详解Spring中Bean的自动装配~
  6. deeplearning搜索空间
  7. 为放大器模拟输入模块提供可靠的输入过电压保护
  8. 人脸标记检测:ICCV2019论文解析
  9. Python:数据导入、爬虫:csv,excel,sql,html,txt
  10. python 判断字符串是否全部为数字组成(使用isdigit)