OIOIC 1.0.18 · 开源 · MIT License

大道至简,
以道驭智的编程语言

OIOIC(中文名“道智编程”,简称 O 语言)完全兼容 C 语言, 并以高维度扩展重塑面向对象范式。没有臃肿的运行时,没有晦涩的模板魔法—— 只有一个对象模型、五条通用接口,以及一条清晰的继承链。

  • 100%兼容 C 语言
  • 5通用对象接口
  • 64位对象标识 OID
  • 0额外运行时依赖
hello_oic.c
/* 一切皆对象:创建、打开、交互、关闭 */
#include "oioic.h"
#include "ho.h"

int main(void)
{
    OBJECT* pObj = CreateObject(OID_HO_HELLOWORLD, 0);

    Open(pObj, 0);        /* 打开对象,建立与调用者的连线 */
    Interact1(pObj, 0);    /* 与对象交互 */
    Close(pObj);           /* 关闭对象 */

    return 0;
}

完全兼容 C 的语法外壳,内里是一个自洽的对象世界。

关于 OIOIC

道智编程:一种更接近自然的抽象方式

自 2005 年起,作者赵平智持续打磨这套语言内核,并于 2007 年正式推出 OIOIC 对象机制。 它不试图取代 C,而是站在 C 的肩膀上,让“对象”成为一种朴素、统一、可被推理的构造。

完全兼容 C

沿用 C 的编译链、类型系统与源码组织方式。任何 C 代码都是 O 代码,零成本渐进式采用,无需重写既有工程。

对象即节点

对象不再是类的实例副本,而是继承链上的一个节点(ND)。一条继承链有且只有一个首节点 OIOIC 与一个末节点 LND。

通信式协作

对象之间不靠直接读写成员变量耦合,而是通过统一的接口收发消息,天然支持阻断 / 非阻断的并发模型。

“OIOIC 属于所有人,所有人都应该关心爱护发展 OIOIC 道智编程。”
—— OIOIC 版权声明

对象模型

一条继承链,贯穿首末

每个对象都携带一个 64 位标识(OID),由 OS / HO / SO 三段掩码构成: 系统域、宿主域与自身域,分别用于区分模块归属、定义来源与实例序号。

  1. FND 首节点

    一条继承链的起点,有且只有一个。这个首节点,就是 OIOIC 本身。

  2. IND 内节点

    位于首末之间的中间层,可以有多个,也可以一个都没有。

  3. LND 末节点

    继承链的终点。每创建一个对象,就生成一条继承链,而这个对象正是它的 LND。

掩码名称含义
MSKOSOS 域系统 / 模块归属
MSKHOHO 域宿主对象定义
MSKSOSO 域对象自身序号
OID_OIOIC OIOIC FND · 首节点
OID_…_MID 中间对象 IND · 内节点
OID_…_LEAF 你的对象 LND · 末节点

继承不是代码复制,而是节点之间的一条连线。

五大通用接口

OIOIC 五个字母的真正来历

OIOIC 并非缩写造词,它正是五个通用接口首字母的合写: Open、Input、Output、Interact、Close。所有对象共享同一套交互语法。

O

Open

打开对象,建立调用者与对象之间的引用计数连线。

I

Input

向对象的输入队列写入数据,由对象自身决定如何处理。

O

Output

从对象的输出队列取出数据,支持阻断与非阻断两种模式。

I

Interact

同步或异步交互,触发对象内部行为,返回值即结果语义。

C

Close

关闭对象并递减引用计数,归零时才真正释放资源。

引用计数RefCnt 管理生命周期
消息队列IQ / OQ 容量可配
阻断控制SET_BLOCKI / SET_BLOCKO
统一返回码RESULT 语义化反馈

代码示例

写起来,依然是你熟悉的 C

没有新的构建系统,没有隐藏的代码生成。头文件即约定,宏即契约。

定义对象标识

ho.h
/* 为宿主对象定义 OID,三段掩码天然隔离命名空间 */
#define  OID_HO_HELLOWORLD  MAKE_OID(OS_LOCAL, HO_HELLO, 0)

收发消息

main.c
OBJECT* p = CreateObject(OID_HO_HELLOWORLD, 0);
Input(p, msg, strlen(msg));   /* 写入输入队列 */
Interact1(p, 0);                 /* 触发对象行为  */
Output(p, buf, sizeof(buf));    /* 读取处理结果  */
Close(p);                        /* 引用计数递减  */

快速开始

四步跑起第一个 O 程序

  1. 01

    获取源码

    取得语言内核 o.h / o.c、编译器 oicc 以及标准对象库。

  2. 02

    加入工程

    把 oioic.h、oioic.c 与 se、so 目录一并加入你的 C 工程。

  3. 03

    定义 OID

    参照 ho.h 的模板格式,为你的对象分配 OID 与模块号 MSN。

  4. 04

    编译运行

    用原有编译器构建即可——O 语言的扩展在编译期完成,运行期零额外负担。

把 OIOIC 带回你的工程

语言内核、编译器、入门教程与开源案例,一整套工具链都在开源仓库里。

生态与资源

一套内核,四类配套

语言内核

OIOIC 1.0.18

o.h 与 o.c 构成对象模型的全部基础设施,包含类型、掩码、宏契约与运行时。

编译器

oicc 1.0.18

负责 O 语言扩展的语法解析与代码转换,与常规 C 工具链协同工作。

入门教程

第二版 · 中 / 英双语

从 HelloWorld 到继承链与接口设计,循序渐进地把对象思维落进代码。

开源案例

实战示例集

真实工程中的对象拆分、消息编排与生命周期管理,可直接对照学习。

OIOIC 版权声明

  1. OIOIC 属于所有人,所有人都应该关心爱护发展 OIOIC 道智编程。
  2. 所有人都可以使用 OIOIC 开发软件。
  3. 所有人都可以使用 OIOIC 创新发明、发表论文;在代码和论文中需说明是以 OIOIC 原创为基础的创新发明。

仓库代码以 MIT License 发布,Copyright (c) 赵平智。