Remove Golang. Although it has been working nicely, I am concerned the double GC will become a problem sometime down the road.
duangsuse::Echo
V8 和 Go 都有 GC 系统,而且 Go 的 GC 开始还被认为是低效的
(说到 GC 动苏还无法理解 Lua 的四色增量 Mark-and-Sweep GC 系统)
(说到自动内存管理想到 C++ 程序员都知道的 Rc)
(说到 GC 想到之前的一个问题:如果以后 Lime 用 C 重写要不要写 GC,最后的答案是不需要,别问我为什么,考虑一下 Lime 执行的方式)
(说到自动内存管理想到 C++ 程序员都知道的 Rc)
(说到 GC 想到之前的一个问题:如果以后 Lime 用 C 重写要不要写 GC,最后的答案是不需要,别问我为什么,考虑一下 Lime 执行的方式)
Forwarded from 永久封存 | Yuuta 台 | 😷 #Pray4Wuhan (Yuuta)
发现现在 Yuuta 的 Chrome 地址输入建议 输入
git 的话第一个已不是 GitHub,而是 GitLab 了(Forwarded from Ruby 资讯
现在 Python 大红大紫的原因是因为它经常用于机器学习,人工智能,数据分析等方面,其实这些 Ruby 也能做到,比如:
https://github.com/arbox/machine-learning-with-ruby
https://github.com/SciRuby/sciruby
但是在某些方面,Ruby 的应用还是一片空白,比如 AR,Docker 管理 (没有 gem 库),桌面 GUI 程序 (QtRuby 和 wxRuby 都已经几年没更新了)。
要想让更多人使用 Ruby,必须打破只知道 Rails on Ruby 这个错误观点,跟随当前热点,让大家知道 Ruby NOT Only Rails。
https://github.com/arbox/machine-learning-with-ruby
https://github.com/SciRuby/sciruby
但是在某些方面,Ruby 的应用还是一片空白,比如 AR,Docker 管理 (没有 gem 库),桌面 GUI 程序 (QtRuby 和 wxRuby 都已经几年没更新了)。
要想让更多人使用 Ruby,必须打破只知道 Rails on Ruby 这个错误观点,跟随当前热点,让大家知道 Ruby NOT Only Rails。
GitHub
GitHub - arbox/machine-learning-with-ruby: Curated list: Resources for machine learning in Ruby
Curated list: Resources for machine learning in Ruby - arbox/machine-learning-with-ruby
Forwarded from 永久封存 | Yuuta 台 | 😷 #Pray4Wuhan (Yuuta)
现在 Python 大红大紫的原因是因为它经常用于机器学习,人工智能,数据分析等方面
说得太对了,甚至中学信息课都开始学 PY
说得太对了,甚至中学信息课都开始学 PY
#life #Ruby
最近打算写一本 Ruby 入门文档,算是内部文档吧
突然自我感觉良好或许可以拉几个人入坑,于是想自己出一个入门手册,能让无任何经验的小白变成入门 Ruby 的 Rubyist 并且会给予他们往后发展的资源,不会缺少开源精神培养
打算叫这本手册
有机结合类似《Metaprogramming Ruby II》的故事、Ruby BNF、示例于一体。
剧中你是上海二中的一名高一新生,加入了计算机社团并在社长
文档中会包含
内容包含
测试程序有
此外,还会有
希望这个假期能写完
最近打算写一本 Ruby 入门文档,算是内部文档吧
突然自我感觉良好或许可以拉几个人入坑,于是想自己出一个入门手册,能让无任何经验的小白变成入门 Ruby 的 Rubyist 并且会给予他们往后发展的资源,不会缺少开源精神培养
打算叫这本手册
《小白的 Ruby 红宝书》 ,使用 LibreOffice Writer 排版有机结合类似《Metaprogramming Ruby II》的故事、Ruby BNF、示例于一体。
剧中你是上海二中的一名高一新生,加入了计算机社团并在社长
滑小稽 的带领下从编程小白逐步变成了解 Ruby 语法结构、通晓 Ruby OO 理念的 Ruby 家并愉快的使用你学到的知识编写一些简单的算法并继续在计算机社中学习 Ruby 元编程、Java、C、Scheme 相关的知识文档中会包含
序言、致谢(随便致谢...)、目录、Future Reading内容包含
c0. 字面量、语法结构上的块、函数调用(额外知识:一个简单的词法规则和分词逻辑)
c1. 运算符、引入 Proc 对象(额外知识:运算符重载)
c2. 函数定义和 Proc、方法调用、变量
c3. 对象和 Hash
c4. 控制流语句
c5. 类和模块
c6. 收尾、完整示例代码和 BNF
测试程序有
t0. 选择排序和快速排序算法
t1. 基于 Sinatra 的简单论坛后端(不使用数据库)
此外,还会有
Ruby 元编程、Java、C、Scheme 入门番外希望这个假期能写完
Forwarded from Solidot
霍金的声音将被发射到太空
英国知名理论物理学家霍金(Stephen Hawking)的骨灰本周五被安葬在西敏寺(Westminster Abbey),位于著名博物学家达尔文和科学家牛顿之间。安葬在西敏寺是一种极其罕见的荣誉,很少授予科学家。在霍金之前,最后两位安息在西敏寺的科学家分别是 1937 年的原子物理学家卢瑟福(Ernest Rutherford)和 1940 年的汤姆森(Joseph John Thomson)。霍金于今年三月去世,享年 76 岁。他写了多本非常受欢迎的科普著作。欧洲航天局(ESA)将把他的声音发射到太空。Media
https://www.solidot.org/story?sid=56877
英国知名理论物理学家霍金(Stephen Hawking)的骨灰本周五被安葬在西敏寺(Westminster Abbey),位于著名博物学家达尔文和科学家牛顿之间。安葬在西敏寺是一种极其罕见的荣誉,很少授予科学家。在霍金之前,最后两位安息在西敏寺的科学家分别是 1937 年的原子物理学家卢瑟福(Ernest Rutherford)和 1940 年的汤姆森(Joseph John Thomson)。霍金于今年三月去世,享年 76 岁。他写了多本非常受欢迎的科普著作。欧洲航天局(ESA)将把他的声音发射到太空。Media
https://www.solidot.org/story?sid=56877
下面是由奇特版本 Ruby BNF 翻译来的
语法基于
为
然后是真的语法规则
Ruby EBNF语法基于
Ruby v1.9为
《小白的 Ruby 红宝书》 翻译终结符 (无法继续用子表达式描述的符号)使用 ALL-CAPS 或使用 '' 包裹非终结符 使用小写[] 内的表达式可选{} 内的表达式可以出现多次也可以不出现| 切分多种可能的匹配情况() 用于包裹表达式以提高运算符优先级; Lexical rules
; Lexer 逻辑比这个特殊一些,不能当作是真正的词法规则,只能用于参考
; 内用规则
; dummy rules
any_char -> ; any character
char -> ; any character, alias for any_char
identifier -> ; sequence in /[a-zA-Z_]{a-zA-Z0-9_}/
; 正则
regexp -> /{any_char}/ ['i' | 'o' | 'p']
| '%r' char {any_char} char
; Heredoc 注释
heredoc -> << (identifier | string) {any_char} identifier
; 字符串
string -> '"' {any_char} '"'
| '’' {any_char} '’'
| '‘' {any_char} '‘'
string2 -> '%' ('Q' | 'q' | 'x') char {any_char} char
; 全局变量名称
global -> '$' identifier | `$` any_char | '$-' any_char
; 有效变量名
varname -> global | '@' identifier | identifier
operation -> identifier ['!' | '?']
; 有效方法名
fname -> identifier | '..' | '|' | '^' | '&' | '<=>' | '==' | '===' | '=~' | '>'
| '>=' | '<' | '<=' | '+' | '-' | '*' | '/' | '%' | '**' | '<<' | '>>' | '~' | '+@'
| '-@' | '[]' | '[]='
; 符号,如 :[]= :a :var
symbol -> ':' fname | ':' varname
; 赋值运算符,>>= 和垃圾 Monad 类型系统没关系
; 皮一下,吐 Monad 类型系统无聊的属性
op-assign -> '+=' | '-=' | '*=' | '/=' | '%=' | '**=' | '&=' | '|=' | '^=' | '<<=' | '>>=' | '&&=' | '||='
然后是真的语法规则
; 从小到大 233
; 字面量们如 2132、"Hello"、:Hello、%q[233]、<<AAAbbcAAA、/a-z/
literal -> NUMERIC | symbol | string | string2 | heredoc | regexp
; 变量值
variable -> varname | NIL | SELF
; 例子: { 'foo' => 'bar' }
; { :a => :b, :b => :c}
; 在 Ruby 新版里,应该使用 { a: :b, b: :c }
assocation -> arg '=>' arg
assocations -> assocation {',' assocation}
singleton -> variable | '(' expr ')'
; 方法参数列表
; 由于特殊逻辑使用 EBNF 表述起来很麻烦,简要说一下
; 你可以在参数列表里使用 '*' identifier 表示 vararg name
; 也可以使用 '&' identifier 表示自动转换 block 为 Proc 对象,这个 identifier 就是 Proc 参数名
; '*' vararg name 和 '&' block arg 后不能出现一般方法参数
; Ruby 新版还支持 default value,对于这种情况,identifier '=' expr 的视为一般方法参数
arglist -> identifier {',' identifier}
; 类似 ES 的 newline 自动切分
; def foo arg0 arg1; puts arg0; puts arg1; end
t -> ';' | '\n'
; 参数列表定义
arg-decl -> '(' arglist ')' | arglist t
args -> arg {',' arg}
; 方法调用参数
call-args -> args
| args [',' assocations] [',' '*' arg] [',' '&' arg]
| assocations [',' '*' arg] [',' '&' arg]
| '*' arg [',' '&' arg] | '&' arg
| command
; 这一部分我也蒙蔽(逃
block-var -> lhs | mlhs
mlhs -> [mlhs-item {',' mlhs_item}] ['*' [lhs]] | '*' lhs
mlhs-item -> lhs | '(' mlhs ')'
lhs -> variable | primary '[' [args] ']' | primary '.' identifier
mrhs -> args [',' '*' arg] | '*' arg
; 程序结构的 BNF
program -> compstmt
compstmt -> stmt {t expr} [t]
; 语句们
stmt -> call DO ['|' [block-var] '|'] compstmt END
| UNDEF fname
| ALIAS fname fname
| stmt IF expr
| stmt WHILE expr
| stmt UNLESS expr
| stmt UNTIL expr
| BEGIN '{' compstmt '}'
| END '{' compstmt '}'
| lhs '=' command [DO ['|' [block-var] '|'] compstmt end]
| expr
expr -> mlhs '=' mrhs
| RETURN call-args
| YIELD call-args
| expr AND expr
| expr OR expr
| NOT expr
| command
| '!' command
| arg
call -> function | command
command -> operation call-args
| primary '.' operation call-args
| primary '::' operation call-args
| SUPER call-args
function -> operation ['(' [call-args] ')']
| primary '.' operation '(' [call-args] ')'
| primary '::' operation '(' [call-args] ')'
| primary '.' operation
| primary '::' operation
| SUPER '(' [call-args] ')'
| SUPER