无功状态机

5年前,在RxJs,Beacon,... etc.js中寻找合适的解决方案之后,停在flyd.js上,仅使用streamon ,combin 库中的三个功能编写了4-6个项目。 其余的都没用,我想把它打包一下。 因此, alak出现了,0.3之前的第一个版本只有20-30行,并完全替换了fly。

一年后, 0.4版已经出现在72行上,具有模式匹配和混合(通过飞行或通过vue计算出的合并模拟)。 经过三年和数十个项目-感觉很好,分享了经验并发布了1.0。



幻想之地


一生都沉浸在FRP中,从教科书中编写经典的OOP 可以像沉浸在深水域之外的深处, 将自己的头打到头。 我花了几周的时间来适应函数而不是变量的思想。 三个月后,我已经完全欣赏了该应用程序的反应图-该程序可以看作是树的脉络或根/分支。 我认为对梵语等古代语言的简单兴趣和对精灵昆尼亚的热爱帮助了我。 捏鼻子时low耳朵是潜水员的基本技能。 成功的经典OOP程序员将需要沉浸于沉浸式知识技能中。 没有什么可以帮助经验丰富的功能主义者,但是也许他们可以帮助我们克服现有的形式和耀斑说明。

未知的名字


在哲学上,单子被称为宇宙的基本粒子-神的粒子,这是一个相当低级的概念。 在幻想世界的规格中,以及对FRP的一般理解中,monad是更高级别的东西,内部包含函子。 Wikipedia在常规和OCaml上下文中有两个函子定义。 在alak上下文中,基本粒子函子是一个包含数据的函数,当更改时,相关的函数/函子将更新。 一切就像在excel表中一样。



在bacon.js中,这称为“ 原子更新 ”,而RxJ则没有。

在alak中,代码可能如下所示:

import A from 'alak' //    -    alak const userId = A.flow(); //         const followers = A.flow(); const profile = A.flow(); const tweets = A.flow(); //  userId -> profile  getProfile const getProfile = id => api.getProfile(id).then(profile); userId.up(getProfile); //   userId.up(id => { api.getFollowers(id).then(followers) api.getTweets(id).then(tweets); }); 

在codeandbox上运行
更改userId导致响应个人资料tweet中的反应性更改。

一切开始


与Go一样,对Alak仿函数的所有使用均基于对流进行思考的能力,但是从通道中进行读取时,构造具有多个连接/边的图形时所花费的所有精力,流的侦听器不会因此而减少。

即使在angular.js中,这也足以精美地解决超出复杂性和复杂性的状态。 对我来说,angular2上的十字架是对RxJS施加了可疑的反应性。 看到ReduX,我回到了PureMVC的实现上,走了两步。

在这篇文章中,我像许多现代演讲者一样,敦促您放弃程序性思考,放弃OOP模式的重担,并开始着手编写人文/文学法典。 今天的Alak擅长以声明方式描述堆栈的反应图。

我们认为视图反应性(jsx / svelte / html模板引擎)是理所当然的。
-为什么我们在商店中没有相同的反应性?

Source: https://habr.com/ru/post/zh-CN467531/


All Articles