Berry

空间分析的三个传统:从三份讣告谈起

荒凉一梦 提交于 2020-04-27 20:20:22
空间分析的三个传统:从三份讣告谈起 河海大学 张晓祥 xiaoxiang@hhu.edu.cn 2012年11月于美国凤凰城 原文出处:http://blog.sina.com.cn/s/blog_643115fc010139m4.html,已征得作者同意转载。 原博主按: 美国《纽约时报》是世界级的大报,其中有一个很特别的版面——“讣告版”(obituaries),这个版面会发表有成就的人物去世的悼念文章,死后能够上《纽约时报》讣告版是一种哀荣。读者通过讣告可以快速了解逝者的人生经历和成就,这些讣告通常文笔生动、夹叙夹议,广受读者欢迎。本文希望从最近几年逝世的三位世界著名科学家的一生来反思在我国GIS发展过程中所遗失或者忽视的空间分析的三大传统,分别是 Charles ReVelle教授所代表的空间分析的 工程学传统 、Walter Isard教授所代表的空间分析的 经济学传统 、Reginald Golledge教授所代表的空间分析的 心理学传统 。 Charles ReVelle教授 Walter Isard教授 Reginald Golledge教授 (1938-2005) (1919-2010) (1937-2009) 三位近年逝世的科学大家,他们代表了空间分析的三个传统! 一、GIS的野蛮增长 GIS是一个新兴的领域,过去十多年经历了飞速的甚至是野蛮的增长

Berry 实现:自动扩充的调用栈

末鹿安然 提交于 2020-01-24 23:09:55
概述 调用栈用于存储函数执行过程中调用链上所有函数的局部变量等调用信息。Berry 调用栈特指脚本程序的调用栈,而不是 C 的调用栈。 在 be_vm.h 中可以看到 VM 结构中和调用栈相关的字段: struct bvm { // ... bvalue *stack; /* stack space */ bvalue *stacktop; /* stack top register */ bstack callstack; /* function call stack */ // ... }; stack 和 stacktop 用于维护存储局部变量的栈(以下简称“变量栈”,函数的栈空间指 vm.stack 中被该函数使用的一段空间),而 callstack 为函数栈帧的堆栈。 我们用一个简单的脚本来说明上述字段的作用: def func1(c) return c + 1 end def func2(b) return func1(b) + 2 end def func3(a) return func2(a) + 3 end 当我们执行 func3(10) 的时候,执行到 func1 内部时调用链最长: call stack top +-------------------------+ | function: func1 | | local variable(s): c | +-

Berry 指令设计

柔情痞子 提交于 2019-12-03 00:04:31
Berry 脚本源代码需要被编译为字节码指令流才能被 Berry 虚拟机执行。本文将描述 Berry 字节码指令(下面简称指令)的定义,解释器源码中对指令的定义可以参考 be_opcode.h 文件。 指令的构成 一条指令占用 4 个字节,也就是一个 32 位的整数,准确地说应该是 32 位的无符号整数。一条指令由操作码(Operation Code)和若干操作数构成,不同操作码的指令可以有不同的操作数成分。任何情况下,指令可能是以下几种情况: Mode 1 Mode 2 Mode 3 Mode 4 Mode 5 OP: 6 bits OP: 6 bits OP: 6 bits OP: 6 bits OP: 6 bits A: 8 bits A: 8 bits A: 8 bits sAx: 26 bits Ax: 26 bits B: 9 bits sBX: 18 bits Bx: 18 bits --- --- C: 9 bits --- --- --- --- 其中模式 1 和模式 2 比较常用,模式 4 和模式 5 目前没有用到。在所有几种模式中,一条指令的 32 位被分为不同的字段,例如模式 1 中被分为 6 位的 OP 字段,8 位的操作数 A 字段,9 位的操作数 B 字段以及 9 位的操作数 C 字段。 每种字段都有一个名字,以下是各字段名称的含义: 字段 Bits

Berry 异常处理实现

爷,独闯天下 提交于 2019-12-02 13:05:09
语法 最近在实现 Berry 的异常处理特性,进过初步的调查后决定使用类似 Python 的 try-except 异常处理模式,为此要引入三个新的关键字: try :表示异常捕获块的开始,位于异常捕获块中的代码抛出的异常将会被捕获,并由 except 语句指定的代码来处理。 except :由该关键字构成的语句后跟随一个用于处理指定异常的代码块。 raise :该语句用于抛出一个异常。 异常处理的常见写法类似这样: try ... raise error except ErrorName: ... end 在 Berry 中, raise 语句后允许跟 1 到 2 个表达式,第一个表达式为抛出的异常值,第二个可选参数为额外的参数。 except 语句的写法则比较多: excpet Exception: :捕获 Exception 异常。 excpet [Exception1, Exception2, ...]: :捕获 Exception1 、 Exception2 等异常。 excpet Exception, arg :捕获 Exception 异常,同时获取一个额外参数 arg 。 excpet [Exception1, Exception2, ...], arg :捕获 Exception1 、 Exception2 等异常,同时获取一个额外参数 arg 。 except

Oracle正则表达式函数

妖精的绣舞 提交于 2019-11-29 21:30:44
Oracle支持正则表达式函数举例。 Regexp_substr :用来提取一个字符串的一部分。 Regexp_substr('first filed, second filed, thirdfiled', [^,]*,') Pattern为', [^,]*,'表示以,开始逗号,中间空一个格,连续0或多个非逗号字符,最后还是逗号,这样,返回则为', second filed,'。 ------------------------------------------------------------------------------- Regexp_instr :用来pattern的起始位置。 如有一组地址,返回邮编的位置 regexp_instr('Jone Smith,10045 Berry Lane,SanJoseph,CA 91234-1234','[[:digit:]]{5}([-[[:digit:]]{4}])?$') 显然结果位置是91234-1234对应的起始位置。 ------------------------------------------------------------------------------- Regexp_replace :用来将pattern替换成需要替换的字符串,相比传统的replace函数,该函数相比较灵活。例如: 'Jone