TeXmacs towards ChezScheme: The Module System

By sadhen at 2018-01-19 • 0人收藏 • 358人看过

The customized module system in TeXmacs

eg1.

(texmacs-module (sub mymodule))

(display "Loading my module\n")

(define-public (pippo a b)
 (+ a b))
(texmacs-module (math math-edit)
  (:use (utils library tree)
        (utils library cursor)
        (utils edit auto-close)
        (math math-drd)
        (generic format-geometry-edit)))

TeXmacs对Guile的模块相关代码改动不多。但是guile2.0以上旧代码就无法work。^1


The corresponding syntax R6RS

(library (balloons)
  (export make push pop)
  (import (rnrs))
  (define (make w h) (cons w h))
  (define (push b amt)
    (cons (- (car b) amt) (+ (cdr b) amt)))
  (define (pop b) (display "Boom! ") 
                  (display (* (car b) (cdr b))) 
                  (newline)))

R6RS的这种语法可以支持在同一个文件中多个package,但没有文件天生的隔离性。个人感觉多个一层括号。


Scala中的package利用了文件的特点,但是比Java的更加复杂:

// sample code from Pragmatic Scala
package society {

  package professional {
    class Executive {
      private[professional] var workDetails = null
      private[society] var friends = null
      private[this] var secrets = null

      def help(another: Executive): Unit = {
        println(another.workDetails)
        println(secrets)
        println(another.secrets) //ERROR
      }
    }

    class Assistant {
      def assist(anExec: Executive): Unit = {
        println(anExec.workDetails)
        println(anExec.friends)
      }
    }
  }

  package social {
    class Acquaintance {
      def socialize(person: professional.Executive) {
        println(person.friends)
        println(person.workDetails) // ERROR
      }
    }
  }
}



When it comes to ChezScheme


^1: http://gnu-guile.7481.n7.nabble.com/Problem-with-modules-in-Guile-2-0-td10482.html

^2: http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-10.html#node_sec_7.3


10 个回复 | 最后更新于 2018-01-30
2018-01-19   #1

扫了一眼R5RS,没有看到package相关的定义。


http://www.schemers.org/Documents/Standards/R5RS/HTML/

2018-01-19   #2

回复#1 @sadhen :

r5rs没有package定义

2018-01-20   #3

回复#2 @theschemer :

已经有一些利用了 guile 的模块系统写成的 package 了,那么是否可以考虑通过某种不需要改动已有代码的方式,让现存在guile library(仅仅是模块这个部分)可以在ChezScheme中运行。这边仅仅考虑模块系统的兼容性。


比如Scheme有没有什么类似Scala中的编译插件这样的手段?

2018-01-20   #4

回复#3 @sadhen :

对于一些在chez中没有的guile语法,可以使用宏的方式使得最少的改动来换取最大的兼容性

2018-01-21   #5

回复#4 @chui :

以我目前对Chez的了解,还不知道怎么通过宏来实现自定义的模块系统。


Any clues?

2018-01-21   #6

回复#5 @sadhen :

https://deathking.github.io/yast-cn/contents/chapter15.html

https://www.scheme.com/tspl4/syntax.html#./syntax:h0

你可以了解一下,sheme 的宏简单而又强大

2018-01-22   #7

回复#6 @chui :


非常抱歉,这样直白地问一个问题


自己是出于一种用最短的时间、最少的知识解决一个问题的想法,或许这样的想法太“功利”了。


个人对Scheme的了解确实有限,以前看SICP也看了一半,囧。


我先学三个月Scheme,在回过头来看一看这个问题。

2018-01-22   #8

正常的想法啦,try and make it work

2018-01-23   #9

回复#8 @chui :

也就是说 用宏可以写个guile和chez之间的兼容层

让它运行在chez上?

2018-01-23   #10

对,当然这样只能做到语法上兼容,具体还要看看你的项目中guile的使用情况

登录后方可回帖

登 录
信息栏

Scheme中文社区

推荐实现 ChezScheme / r6rs / r7rs large
theschemer.org
Q群: 724577239

精华导览

社区项目

包管理器:Raven
HTTP服务器:Igropyr (希腊火)
官方插件:vscode-chez

社区目标:

完善足以使Scheme工程化和商业化的库,特别是开发极致速度的Web服务器和ANN模块。

一直以来Scheme缺少一个活跃的中文社区,同时中文资料的稀少,导致大多数因为黑客与画家和SICP而接触Scheme的朋友,在学完SICP后无事可做,不能将Scheme转换为实际的生产力。最后渐渐的放弃。
同时Chicken等实现,却因效率问题无法与其他语言竞争。本社区只有一个目的,传播Scheme的文明之火,在最快的编译器实现上,集众人之力发展出足够与其他语言竞争的社区和库。


友情链接:

Clojure 中文论坛
函数式·China


Loading...