加载中…
个人资料
扑来树袋熊
扑来树袋熊
  • 博客等级:
  • 博客积分:0
  • 博客访问:75,127
  • 关注人气:52
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
知识产权
开源软件
博文
(2019-01-30 21:56)
分类: 随想
浮云撩风斜月皎,斗间飞鸦衔星遥。
桃花影落飞神剑,碧海潮生按玉箫。
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2019-01-21 14:08)
分类: 随想
突然记起来我也是有博客的人啊,竟然已经一年多没发过东西了。倒是删了一大半,虽说写过的即是真实的过往,但就像我现在看哪怕一周前的代码都有若干不爽一样,文字这种东西,心境变了,我变得越发不想留下痕迹了。

生活最难得的是现在的平静。给大家报个平安,如果我还有粉的话,那,这篇先这样啦。

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
分类: MY-BASIC开发
由于上一篇说的 coroutine 已经引入,终于可以放心的也把结构化异常处理引入 MY-BASIC 了。并且可以确定不会和已有执行模型和将要引入的 actor 模型冲突。现在可以像这么写异常处理代码:

    ret = try
    (
        lambda ()
        (
            print 'Try.';
            return 42
        ),
        lambda (_)
        (
            print 'Catch: ', _, '.';
        ),
        lambda ()
        (
            print 'Finally.';
       &nbs
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
分类: MY-BASIC开发
昨天花了一天时间为 MY-BASIC 加上了协程支持。一共有六条语句可以用于操作协程:

1. coroutine. 接受一个 invokable 参数,返回一个 coroutine 对象;
2. yield. 中止一个 coroutine 的执行流程,交出控制权,并可以有一个可选参数作为中止返回值;
3. return. 终止一个 coroutine 的执行流程,交出控制权,并可以有一个可选参数作为中止返回值,invokable 对象执行完毕作用等同于 return;
4. move_next. 将控制权交给一个 coroutine,直到它主动让出控制权(即 yield 或 return),然后此语句返回 coroutine 是否终止;
5. get. 获取最近一次交出控制权之前 coroutine 的返回值;
6. start_coroutine. 将一个 coroutine 交给 MY-BASIC 迭代直到终止。

start_coroutine 用于 coroutine 自动调度;move_next 用于 coroutine 手动调度,等价于操作一个迭代器。

一个示例如下:

    ' Manually manipulation.
    co0 = coroutine(
        lambda () (
 
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
分类: MY-BASIC开发
不同的编程语言有不同的强制的限制,其中一些让人觉得毫无道理,而且和语言的其余部分显得有些不协调。往往这种特性是设计的时候欠考虑,或者语言经过长期演进,技术环境已与设计之初完全不同,于是除非完全颠覆从头设计,否则难免产生不协调。

比如 Python 使用缩进表示语法 block 结构,这在 90 年代初 Python 被发明出来时直到后面一段时间都没问题,而且相对其同时代的其他语言来说这种写法大多数时候更简洁。发展到本世纪初,函数式范式得到普遍重视。Python 早在 94 年的版本就加入了 lambda 表达式,但直到现在也无法支持多行 lambda。原因即是 Python 使用缩进区分语法层次,亦没有专用的语句终止分隔符,如果写出有多行语句的 lambda,对 parser 编写造成的困难事小,对用户阅读造成的歧义事大。某种程度上来说,缩进是 Python 设计中的精髓,亦是最大的“工程事故”。从这个角度来看 C++ 历经这么多版本并,特别是 1x 加入大量新特性到语言本身,没有产生什么大的不协调,不得不说是个工程奇迹。

类型系统和语法要素越单纯的语言越没有产生悖论的担忧,比如 LISP 和其他一些用做 DSL 的动态语言如 Lua, IO。

我仍然很吝啬
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
分类: MY-BASIC开发
上次说到会给 MY-BASIC 做一个可视化代码编辑器。这两天抽空用 Unity3D 写了一个。代码在 GitHub



不同于用脚本驱动的方式写业务逻辑,编辑器 UI 和脚本执行应当是并发的过程。简而言之,脚本里面如果死循环了,或者在执行较耗时的操作,UI 层面不应该被阻塞,且可中途退出或暂停(包括断点)。在 MY-BASIC 中用 suspend/resume 的机制可以实现异步效果,不过仍然不能避免遇到某些耗时的自定义函数过程中并不能触发 stepped 回调,所以在这个 repo 中我使用简单的多线程达到异步并发的效果。如果你拿它来做进一步开发,需要你自行添加线程间通信。

我家里的 iPad 比较老,一直没能玩
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
分类: MY-BASIC开发
今天抽空给 MY-BASIC 添加了使用点号 '.' 访问 referenced usertype 的函数的方法。之前只能使用:

    fun(ref, args)

这样的写法。

现在亦支持写成:

    ref.fun(args)

近期也许会给 MY-BASIC 做个可视化代码编辑器玩玩。
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
最近收到一些做嵌入式的开发者的反馈。这让我重新考虑起针对嵌入式平台做些优化。为此我特意购置了一块 Arduino Due 和一块 Arduino Mega,可以确定的是把 MY-BASIC 内核裁剪到最小也放不到 Arduino Uno 里,即使 Arduino Mega 拥有 256kB Flash,MY-BASIC 也要占掉一半,而其 8kB 的 SRAM 刚刚够初始启动并运行简单的几行代码。相比起来,Arduino Due 的 96kB SRAM 就充裕的多了。我曾不满足于在 MY-BASIC 中仅提供早期语法,所以最近两年左右添加了很多“现代”特性,持续关注这个系列的朋友应该都有所了解。不得不说这些高级特性和面向嵌入式的内存优化是相互矛盾的,我显然并没有做什么 trade off,而是选择“特性更重要”,以及我始终认为它的最佳运行平台应该是桌面或智能手机级别的硬件。不过经过简单的试验我发现为嵌入式做些小的尝试和优化仍然是有意义的一件事情,如果要在 Arduino Due 上添加更多的外围驱动,空间可能也会很快不够,不过在拥有数百 kB SRAM 的某些型号的 STM32 开发板上我想能做更多有意义的事情。这也是一个嵌入式开发者向我反馈的使用环境。所以,最近有机会的话会重新写一个针对嵌入式平台优化的 shell,比如把不必要的特性裁剪掉,针对内存做
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
分类: MY-BASIC开发
前几天无意搜到了 LowRes Coder,正好契合我对 MY-BASIC 的开发计划!在网站上找到了作者 Timo 的联系方式简单的交流了一下,发现我和他不仅对这个功能的个人项目的口味相似,经历也非常像。都在游戏 industry 干过好几年,然后有不满意的地方出来做 indie,结果因为支撑不下去了再次去找全职工作,并且热衷于鼓捣自己的小众趣味。而且这家伙很健谈,说到 retro game programming 比我还兴奋。无疑我们将从更多的交流中冒出更多灵感。哦对了,对于未来计划的哪部分开源哪部分闭源想法也相同……

玩 LRC 的过程中我稍微转变了一点思路,retro 风格的 API 和功能规则依然容易奏效。我决定增加对 retrocomputing 资料的阅读,毕竟我开始编程的时候 Apple II, Sinclair ZX, C64, Amiga 这种设备已经是上世代的古董了。我和 Timo 一致同意对复古设备的考究是一种“考古学”行为。

最直接的影响,这周一、二我给 MY-BASIC 加了几条语句:

1. REM。以前支持 ' 符号单行注释了 '[ ... '] 多行注释,现在终于支持 REM 了,虽然需要多敲几下键盘,不过这种对复
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
接上一篇日志,这次谈点编程范式方面的内容。这几天写的内容主要是作为语言设计的文档,英文版已经放到 wiki

MY-BASIC 是一个混合了多种编程范式的动态语言。除了传统的面向过程编程,它已经被融入了基于原型的 OOP,和函数式编程范式。

MY-BASIC 中的原型编程不像 JavaScript 是伪造的,也不像 Lua 中是模拟的,MY-BASIC 的 prototype 就是 prototype。并且支持原型链继承和克隆新对象。但暂不支持 mixin,也不支持扩展原型。

函数式编程有很多和命令式不一样的特性,老式命令式语言也纷纷加入了函数式编程的能力,一般来说相对于命令式编程,函数式能有效解决两个问题:异步、并发难以编写,因为人脑的思考模式是同步、线性的,写异步、并发代码的时候相当于在做人肉多核处理;并发难调试,打断点和并发的运行方式相悖,并且并发
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有