Skip to content

Commit

Permalink
增加文档
Browse files Browse the repository at this point in the history
  • Loading branch information
entropy-cloud committed Feb 5, 2025
1 parent bb2bf48 commit 9132339
Show file tree
Hide file tree
Showing 9 changed files with 531 additions and 48 deletions.
Binary file added docs/compare/mps/editor-for-concept.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/compare/mps/mps-concept.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/compare/mps/textgen-aspect.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
394 changes: 347 additions & 47 deletions docs/compare/nop-vs-mps.md

Large diffs are not rendered by default.

15 changes: 15 additions & 0 deletions docs/faq/faq-about-nop-design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# 1. 关于差量化推理管线的问题

![](../theory/nop/delta-pipeline.png)

问题: **每一层为什么要设计其他层用的信息?是delta部分吗?**

回答:每一层向下一层推导得到的信息只是备选的,每一层都有自己独特的诉求和抽象,这些信息并不要求都在上一层存在。通过这种方式,可以保证每一层既是独立的,有是相互关联的。独立性体现在最终控制权在本层,不会损失任何能力。可以从本层开始,完全忽略前一层推导的来的信息。每一层设计有其他层的信息这有两个原因:1. 本来各层之间就存在隐含的关系,比如数据层的类型是整数,最外层的界面层显示的时候应该是一个整数输入控件,这个信息应该可以跨层保持 2. 为了统一配置方便,一些UI层的信息虽然数据层用不上,也可以暂存在数据层。比如orm.xml中字段上可以配置`ui:show`来控制字段在增删改查哪些页面中显示。ui:show是一个扩展属性,并不是orm模型的一部分,但是作为扩展属性保存在ORM模型中,在推导过程中先是传播到XMeta模型中继续作为扩展属性,推导到XView层的时候才起作用。在Excel模型中就可以配置`ui:show`属性。

问题:`ui:show`这种扩展属性的存放规则有相应的文档吗 或者是可定制的,所以使用者也得额外规定哪些属性可以存放在上层?

回答:使用者可以自由定制,额外选择哪些属性可以放在上层,但是如何向下传播是自己在代码生成器里自行控制的。Nop平台的所有DSL的所有节点缺省都允许保存扩展属性。NopORM中的实体对象同样允许保存任意扩展属性。在Nop平台中永远采用`(data, metadata)`配对设计,确保在最细的粒度处,在信息的近旁总是可以找到一个地方保存Delta信息。

问题: 这图是单向的,有没有可能是双向的。理论上,前端交互体验上的一些数据,比如微信发现页面的配置,或者输入对应的快捷键,也可能需要保存到数据库。

回答:需要区分编译期和运行时。本质上从DataModel到UiModel,这是在编译期构造的信息推导管道。在运行时,推导之后建立的运行时的信息传输管道自然是双向的。从更大的视角去考虑,对比前端Redux框架的单项数据流(数据驱动),你可以将这个推理管线看作是编译期的一种单向模型驱动。UI层如果有新的需求,那么会导致从最基础的数据模型那里可能发生修改,再传播到UI模型。如果不涉及到存储数据,则也可以导致在更高层模型修改。
4 changes: 4 additions & 0 deletions docs/theory/ecs-explained.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# 从可逆计算看ECS架构

[游戏开发中的 ECS 框架](https://zhuanlan.zhihu.com/p/20056728243)

14 changes: 13 additions & 1 deletion docs/theory/next-generation-lang.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,18 @@
### 二、**意图导向编程(Intent-Oriented Programming)**

- **创新点**

1. 显式分离**程序意图**(What)和**实现细节**(How)
2. 内置自然语言注释层与机器可解析的意图标记(如`@optimize_for_latency`

- **案例**

```plaintext
#intent: 实现一个快速排序算法,优先内存效率
#constraint: 输入规模可能达到10^6级别
[AI生成或推荐的实现代码]
```

- **解决问题**:让AI更精准理解需求,减少"代码正确但不符合意图"的错误

---
Expand Down Expand Up @@ -77,28 +80,34 @@
### 四、**概率化编程原语(Probabilistic Primitives)**

- **创新点**

- 原生支持概率分布类型(如`Gaussian(μ=0, σ=1)`
- 内置贝叶斯推理引擎

- **应用场景**

```python
sensor_data ~ Normal(mean=ground_truth, sd=0.1) # 自动生成概率模型
```

- **解决问题**:简化机器学习模型的实现,使AI能直接操作概率语义

---

### 五、**自省与可解释性增强**

- **创新点**

1. 代码执行过程自动生成解释轨迹(Explanation Trace)
2. 决策链的因果标记(`becauseof`关键字)

- **示例**

```python
if x > threshold: # @becauseof(input_statistics.summary())
trigger_alert()
```

- **解决问题**:解决AI生成代码的"黑箱"问题,增强调试和审计能力

---
Expand All @@ -115,15 +124,18 @@
### 七、**伦理约束内嵌(Ethical Constraints as First-Class Citizen)**

- **创新点**

- 类型系统扩展支持伦理属性(如`PersonalData @encrypted`
- 资源访问的合规性验证前置

- **示例**

```python
def process(data: UserProfile @GDPR_Compliant) ->
@Fairness(metric=demographic_parity):
# 代码逻辑
```

- **解决问题**:在语言层面确保AI生成代码符合伦理规范

---
Expand Down Expand Up @@ -342,7 +354,7 @@
- **草图识别**:绘制UI草图即时生成前端框架代码
- **AR编程辅助**:通过Hololens等设备三维可视化数据流
- **技术栈整合**

```mermaid
graph LR
A[语音输入] --> B(意图识别引擎)
Expand Down
29 changes: 29 additions & 0 deletions docs/theory/thinking-in-functional-programming.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,120 +7,149 @@
## 三. 从函数到函子

## 一. 引言

### 1.1 函数式编程的兴起

- 函数式编程的历史背景
- 为什么函数式编程在现代开发中越来越重要
- 实用主义视角下的函数式编程:从理论到实践

### 1.2 文章目标

- 探讨函数式编程的核心思想
- 从实用主义角度分析函数式编程的优势与挑战
- 提供实际案例,帮助读者理解如何将函数式编程应用于现实问题

---

## 二. 函数式编程的核心思想

### 2.1 纯函数与不可变性

- 纯函数的定义与特性
- 不可变数据结构的优势
- 纯函数在实践中的应用场景

### 2.2 高阶函数与函数组合

- 高阶函数的概念与作用
- 函数组合:将小函数组合成复杂逻辑
- 实际案例:使用高阶函数简化代码

### 2.3 声明式编程

- 声明式编程与命令式编程的对比
- 如何通过声明式编程提高代码可读性
- 实际案例:使用声明式风格处理数据

---

## 三. 函数式编程的核心工具

### 3.1 函子(Functor)

- 函子的定义与基本操作(`fmap`
- 函子的实际应用:处理容器中的值
- 实际案例:使用函子处理可选值(`Maybe`

### 3.2 单子(Monad)

- 单子的定义与核心操作(`return``bind`
- 单子的实际意义:处理副作用与计算顺序
- 实际案例:使用单子处理异步操作(`Promise`

### 3.3 应用函子(Applicative Functor)

- 应用函子的定义与操作
- 应用函子与函子、单子的关系
- 实际案例:使用应用函子处理多个上下文中的函数

---

## 四. 函数式编程的实用价值

### 4.1 代码的可维护性

- 纯函数与不可变性如何提高代码的可维护性
- 实际案例:重构命令式代码为函数式风格

### 4.2 并行与并发编程

- 函数式编程如何简化并行与并发编程
- 实际案例:使用函数式编程处理多线程任务

### 4.3 测试与调试

- 纯函数如何简化单元测试
- 实际案例:为函数式代码编写测试

### 4.4 函数式编程的局限性

- 函数式编程的学习曲线
- 性能问题与优化策略
- 何时选择函数式编程,何时选择其他范式

---

## 五. 函数式编程在现代开发中的应用

### 5.1 前端开发

- 函数式编程在前端框架中的应用(如React、Redux)
- 实际案例:使用函数式编程构建UI组件

### 5.2 后端开发

- 函数式编程在服务器端开发中的应用(如Node.js、Scala)
- 实际案例:使用函数式编程处理API请求

### 5.3 数据处理与机器学习

- 函数式编程在数据处理中的应用(如MapReduce)
- 实际案例:使用函数式编程处理大规模数据集

---

## 六. 函数式编程的未来

### 6.1 函数式编程与新兴技术

- 函数式编程在区块链、物联网等领域的应用
- 函数式编程与人工智能的结合

### 6.2 函数式编程的普及与教育

- 如何降低函数式编程的学习门槛
- 函数式编程在计算机教育中的角色

### 6.3 函数式编程的社区与生态

- 函数式编程语言的发展趋势(如Haskell、Elm、Clojure)
- 函数式编程工具与库的生态系统

---

## 七. 结论

### 7.1 函数式编程的核心价值

- 从实用主义角度总结函数式编程的优势
- 函数式编程如何改变开发者的思维方式

### 7.2 如何开始学习函数式编程

- 推荐学习资源与路径
- 实践建议:从小项目开始,逐步深入

### 7.3 函数式编程的未来展望

- 函数式编程在软件开发中的长期影响
- 开发者如何拥抱函数式编程的思想

---

## 参考文献

- 相关书籍、论文与在线资源
- 函数式编程语言与工具的官方文档

Expand Down
Loading

0 comments on commit 9132339

Please sign in to comment.