在
export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
然后再在
export PATH=$PATH:$HOME/.cargo/bin
再执行
no_core 的时候,经常出现 libc 多了一个版本导致无法正常编译的情况,删除 commit 版本旧的那个即可
/etc/profile
里添加了 #guideexport RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
然后再在
.bashrc
.zshrc
里添加(如果自动无效的话)export PATH=$PATH:$HOME/.cargo/bin
再执行
curl https://sh.rustup.rs -sSf | sh
即可获得现烤 Rust toolchain 一份 🍰no_core 的时候,经常出现 libc 多了一个版本导致无法正常编译的情况,删除 commit 版本旧的那个即可
#PL #code #guide #daily #scheme
关于 Lice lice-lang/lice 解释器的分析
我们只看解释器实现,不看测试和文档什么的,目标为理解官方 Lice 解释器实现和汲取精华、以及提出充分利用 Kotlin 特性的建议
我们可以看到,
LanguageVersion EngineVersion Extensions MimeTypes LanguageName Names EngineName
ScriptEngine()
OutputStatement(toDisplayString)
Program(statementsCode)
MethodCallSyntax(obj: String, mid: String, vararg args: String)
Parameter(paramString)
"javax.script.engine_version", "javax.script.language_version"
"javax.script.engine", "javax.script.language", "javax.script.name"
而
bindings: SymbolList
reader: Reader
writer: Writer
errorWriter: Writer
getAttribute(name: String)
getAttribute(name: String, scope: Int)
setAttribute(name: String, value: Any?)
setAttribute(name: String, value: Any?, scope: Int)
removeAttribute(name: String) = bindings.removeVariable(name)
removeAttribute(name: String, scope: Int)
getScopes(): MutableList<Int>
getAttributesScope(name: String?): Int
getBindings(scope: Int)
setBindings(bindings: Bindings, scope: Int)
然后是
variables: MutableMap<String, Any?>
provideFunctionWithMeta(name: String, node: ProvidedFuncWithMeta)
provideFunction
defineFunction
getVariable
defineVariable
isVariableDefined
removeVariable
containsValue
clear
putAll(from: Map<out String, Any>)
containsKey
get
put
isEmpty
remove
var size = fun ...
entries: MutableSet<LiceEntry>
keys
values
关于 Lice lice-lang/lice 解释器的分析
我们只看解释器实现,不看测试和文档什么的,目标为理解官方 Lice 解释器实现和汲取精华、以及提出充分利用 Kotlin 特性的建议
org/lice/api/scripting/*
javax.script
的 API 接口我们可以看到,
LiceScriptEngineFactory
类提供以下信息LanguageVersion EngineVersion Extensions MimeTypes LanguageName Names EngineName
ScriptEngine()
OutputStatement(toDisplayString)
Program(statementsCode)
MethodCallSyntax(obj: String, mid: String, vararg args: String)
Parameter(paramString)
"javax.script.engine_version", "javax.script.language_version"
"javax.script.engine", "javax.script.language", "javax.script.name"
而
LiceScriptEngine
做这些class LiceScriptEngine : JavaxScriptEngine并且 LiceContext 做这些
private var context: LiceContext = LiceContext()
getContext()
setContext(context)
setContextIfIsLiceContext()
getFactory()
eval(scriptString, context) = eval(script, context.bindings)
eval(script: String) = eval(script, context.bindings)
eval(reader: Reader) = eval(reader.readText(), context.bindings)
eval(reader: Reader, n: Bindings) = eval(reader.readText(), n)
eval(reader: Reader, context: ScriptContext)
eval(script: String, n: Bindings)
get(key: String?): Any? = context.bindings[key]
put(key: String, value: Any?)
createBindings() = SymbolList()
getBindings(scope: Int) = context.bindings
setBindings(bindings: Bindings?, scope: Int)
bindings: SymbolList
reader: Reader
writer: Writer
errorWriter: Writer
getAttribute(name: String)
getAttribute(name: String, scope: Int)
setAttribute(name: String, value: Any?)
setAttribute(name: String, value: Any?, scope: Int)
removeAttribute(name: String) = bindings.removeVariable(name)
removeAttribute(name: String, scope: Int)
getScopes(): MutableList<Int>
getAttributesScope(name: String?): Int
getBindings(scope: Int)
setBindings(bindings: Bindings, scope: Int)
然后是
org/lice/core/*
AbstractBindingsvariables: MutableMap<String, Any?>
provideFunctionWithMeta(name: String, node: ProvidedFuncWithMeta)
provideFunction
defineFunction
getVariable
defineVariable
isVariableDefined
removeVariable
containsValue
clear
putAll(from: Map<out String, Any>)
containsKey
get
put
isEmpty
remove
var size = fun ...
entries: MutableSet<LiceEntry>
keys
values