- 浏览: 3056135 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
友情支持草泥马语官方网站:>>= 猛击这里 =<<
草泥马语是一种脱胎自Whitespace的全新语言。它是如此的新,我们可以放心的把Whitespace程序升级为草泥马版。官网提供的发行版里就有ws2gmh工具帮我们完成升级。
在WS2GMH.java中,升级的核心逻辑如下:
(注意该程序保留了\n;另外Java I/O的默认处理是读文件的时候把\r\n变成\n)
这是一个while-switch结构。不考虑运行效率,有没有办法写得更精悍一点呢?
先来看JavaScript版本甲:
可以在浏览器里测试:
如果从外部文本编辑器复制过来的话要注意了,有些编辑器会自动转换掉了单个的\n或\r,或\r\n,总之复制进来前注意一下……
然后,JavaScript版本乙:
当然mapping直接写在ws2gmh()里也行,只不过要重复求值有点不太爽。要实验的话照样放到前面的HTML里换掉版本甲即可。
用JavaScript能行,用Ruby当然也能。版本甲:
版本乙:
版本乙变种:
这个变种对mapping的变化敏感度更低些,但运行时开销更大些
于是官方版WS2GMH的完整逻辑就可以用以下脚本实现:
当然用Java也能实现正则版,只是写起来麻烦……懒得写了。
在原帖里顺手加了个Ruby版本乙的变种……连正则表达式也可以不污染 =_=|||
嗯咪……反正甲乙都一样是用回调函数版。我是无所谓。甲是用来演示&& ||比if...else短的情形用的而已 =_=
至少IE6上就有等价于gsub的东西了……就是replace。放心用。
要知道JS里正则替换g不g是写在正则表达式的后缀/属性上的,而不是写在函数名上……
replacement can be a string or a function to be called for each match.
这个很有趣,w3school上面只提到了string,没有提到回调函数
而我在ie上测试也没有问题,这是个很好用的skill
这个请参考Mozilla文档:String.replace
当调用replace提供两个参数时,第二个参数应该是一个回调函数,其参数列表的格式是:
1、匹配到的整个子串
2、第一个捕获分组匹配到的子串
3、第二个捕获分组匹配到的子串
……
N、最后一个捕获分组匹配到的子串
N+1、匹配到的整个子串在源字符串中的偏移量
N+2、整个源字符串
JavaScript的函数参数列表中变量有多少个其实没多大关系,反正编译器不会把形式参数与实际参数个数不同看作错误,所以……
其实这帖真正的看点是JavaScript版本甲。飘过……
草泥马语是一种脱胎自Whitespace的全新语言。它是如此的新,我们可以放心的把Whitespace程序升级为草泥马版。官网提供的发行版里就有ws2gmh工具帮我们完成升级。
在WS2GMH.java中,升级的核心逻辑如下:
int ch; while ((ch = reader.read()) != -1) { switch (ch) { case ' ': // writer.append("[Space]"); ch = '草'; break; case '\t': // writer.append("[Tab]"); ch = '泥'; break; case '\n': // writer.append("[LF]\n"); writer.append('马'); break; } writer.append((char) ch); }
(注意该程序保留了\n;另外Java I/O的默认处理是读文件的时候把\r\n变成\n)
这是一个while-switch结构。不考虑运行效率,有没有办法写得更精悍一点呢?
先来看JavaScript版本甲:
function ws2gmh(wsSrc) { return wsSrc.replace(/( )|(\t)|(\n)/mg, function (_, p1, p2, p3) { return p1 && '草' || p2 && '泥' || p3 && '马\n' }) }
可以在浏览器里测试:
<html> <meta http-equiv="Content-Type" content="text/html;charset=GBK" /> <head> <script type="text/javascript"> function ws2gmh(wsSrc) { return wsSrc.replace(/( )|(\t)|(\n)/mg, function (_, p1, p2, p3) { return p1 && '草' || p2 && '泥' || p3 && '马\n' }) } function sync() { var ws_textarea = document.getElementById('ws_textarea') var gmh_textarea = document.getElementById('gmh_textarea') // strip the CRs, mimic Java's file I/O behavior var ws_src = ws_textarea.value.replace(/\r/mg, '') gmh_textarea.value = ws2gmh(ws_src) } </script> </head> <body> <div> <p>Whitespace:<br /> <textarea id="ws_textarea" cols="80" rows="10" width="100%" onkeyup="sync()"></textarea> </p> </div> <div> <p>草泥马语:<br /> <textarea id="gmh_textarea" cols="80" rows="10" width="100%" readonly="true" disabled="true"></textarea> </p> </div> </body> </html>
如果从外部文本编辑器复制过来的话要注意了,有些编辑器会自动转换掉了单个的\n或\r,或\r\n,总之复制进来前注意一下……
然后,JavaScript版本乙:
var mapping = { ' ' : '草', '\t': '泥', '\n': '马\n' } function ws2gmh(wsSrc) { return wsSrc.replace(/[ \t\n]/mg, function (s) { return mapping[s] }) }
当然mapping直接写在ws2gmh()里也行,只不过要重复求值有点不太爽。要实验的话照样放到前面的HTML里换掉版本甲即可。
用JavaScript能行,用Ruby当然也能。版本甲:
def ws2gmh(ws_src) ws_src.gsub(/( )|(\t)|(\n)/m) { $1 && '草' || $2 && '泥' || $3 && "马\n" } end
版本乙:
def ws2gmh(ws_src) mapping = { ' ' => '草', "\t" => '泥', "\n" => "马\n" } ws_src.gsub(/[ \t\n]/m) {|s| mapping[s] } end
版本乙变种:
def ws2gmh(ws_src) mapping = { ' ' => '草', "\t" => '泥', "\n" => "马\n" } ws_src.gsub(/[#{Regexp.escape mapping.keys.join}]/m) {|s| mapping[s] } end
这个变种对mapping的变化敏感度更低些,但运行时开销更大些
于是官方版WS2GMH的完整逻辑就可以用以下脚本实现:
#!/usr/bin/env ruby # -*- coding: gbk -*- def ws2gmh(ws_src) mapping = { ' ' => '草', "\t" => '泥', "\n" => "马\n" } ws_src.gsub(/[ \t\n]/m) {|s| mapping[s] } end if __FILE__ == $0 begin ws_file, gmh_file = ARGV raise unless ws_file && File.extname(ws_file) =~ /\.ws/i gmh_file ||= ws_file[0..-3] + 'gmh' open(gmh_file, 'wb') {|f| f << ws2gmh(File.read(ws_file)) } rescue puts 'Usage: ws2gmh <ws_file> [gmh_file]' end end
当然用Java也能实现正则版,只是写起来麻烦……懒得写了。
评论
11 楼
iaimstar
2009-12-09
好吧,我承认确实比较短 >_<
10 楼
RednaxelaFX
2009-12-09
iaimstar 写道
不过我喜欢乙
至少map被独立管理起来了,不会污染回调函数
至少map被独立管理起来了,不会污染回调函数
在原帖里顺手加了个Ruby版本乙的变种……连正则表达式也可以不污染 =_=|||
9 楼
RednaxelaFX
2009-12-09
iaimstar 写道
不过我喜欢乙
至少map被独立管理起来了,不会污染回调函数
至少map被独立管理起来了,不会污染回调函数
嗯咪……反正甲乙都一样是用回调函数版。我是无所谓。甲是用来演示&& ||比if...else短的情形用的而已 =_=
8 楼
RednaxelaFX
2009-12-09
night_stalker 写道
js 从第几个版本起有 gsub? 如果跨浏览器的话我就不用在服务器上实现一遍 gsub 了……
至少IE6上就有等价于gsub的东西了……就是replace。放心用。
要知道JS里正则替换g不g是写在正则表达式的后缀/属性上的,而不是写在函数名上……
7 楼
night_stalker
2009-12-09
js 从第几个版本起有 gsub? 如果跨浏览器的话我就不用在服务器上实现一遍 gsub 了……
6 楼
iaimstar
2009-12-09
不过我喜欢乙
至少map被独立管理起来了,不会污染回调函数
至少map被独立管理起来了,不会污染回调函数
5 楼
iaimstar
2009-12-09
replacement can be a string or a function to be called for each match.
这个很有趣,w3school上面只提到了string,没有提到回调函数
而我在ie上测试也没有问题,这是个很好用的skill
4 楼
RednaxelaFX
2009-12-09
iaimstar 写道
return wsSrc.replace(/( )|(\t)|(\n)/mg, function (_, p1, p2, p3)
这个用法很新宣,fx解释下为啥/() \t 和\n能作为p1,p2,p3来调用function?
这个用法很新宣,fx解释下为啥/() \t 和\n能作为p1,p2,p3来调用function?
这个请参考Mozilla文档:String.replace
当调用replace提供两个参数时,第二个参数应该是一个回调函数,其参数列表的格式是:
1、匹配到的整个子串
2、第一个捕获分组匹配到的子串
3、第二个捕获分组匹配到的子串
……
N、最后一个捕获分组匹配到的子串
N+1、匹配到的整个子串在源字符串中的偏移量
N+2、整个源字符串
JavaScript的函数参数列表中变量有多少个其实没多大关系,反正编译器不会把形式参数与实际参数个数不同看作错误,所以……
3 楼
iaimstar
2009-12-09
return wsSrc.replace(/( )|(\t)|(\n)/mg, function (_, p1, p2, p3)
这个用法很新宣,fx解释下为啥/() \t 和\n能作为p1,p2,p3来调用function?
这个用法很新宣,fx解释下为啥/() \t 和\n能作为p1,p2,p3来调用function?
2 楼
RednaxelaFX
2009-12-09
iaimstar 写道
何等的蛋疼
其实这帖真正的看点是JavaScript版本甲。飘过……
1 楼
iaimstar
2009-12-09
何等的蛋疼
发表评论
-
Christmas Wish 2013?
2013-10-23 12:27 0For me: Apple MacBook Pro with ... -
HotSpot VM的源码阅读活动?
2012-02-23 22:41 26179陆续被许多同好问过HotSpot VM源码阅读方面的问题。 最 ... -
あけおめことよろ 2012版
2011-12-31 22:27 22050照例发篇辞旧迎新帖。 ... -
Hotmail邮箱的POP和SMTP配置
2011-10-07 21:42 45353今天给奶奶在她的iPad上配置live.cn邮箱真是折腾得不行 ... -
IDF 2011北京看到的某平板
2011-09-11 17:59 3107最近可能会连着发几篇 ... -
HP Compaq nx9040的配置
2011-09-07 14:07 0基本参数 型号 Compaq nx90 ... -
MacBook Air,以及之前我的几个笔记本的使用体验(草稿中,慢慢更新)
2011-09-06 23:04 0这不是一篇测评。只是我自己使用的感受。流水帐,想到哪写到哪,慢 ... -
Ultrabook,以及最近关注过的另外一些超便携装备
2011-08-21 16:21 0http://yavaeye.com/p/show/ultra ... -
MacBook Air 965入手
2011-08-11 16:23 9184等了快两周终于到手了… 把主要工作机换成它之后再补充点使用 ... -
[纯水] 草稿箱…
2011-07-25 14:24 2350看到PermGen的讨论一直没消停,但许多人对PermGen的 ... -
身体确实重要
2011-05-27 00:04 4392昨天和今天。过了两天完全没有编程、完全没有JVM的生活。 不过 ... -
几种系统的uname输出
2011-05-05 17:19 3365收集一些uname的输出对比用。 如果有跑Solaris的人路 ... -
gettimeofday与VDSO
2011-04-22 14:12 0vsyscall http://docs.redhat.co ... -
IDF2011见闻——草稿篇
2011-04-18 00:19 0上次去参加了JavaOne之后过了好久也没把资料整理好,帖子差 ... -
转岗成功
2011-04-08 10:14 0正明 不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。 ... -
[纯水/真相] 奖杯一枚
2011-03-11 18:18 3510好久没拿过啥奖啊什么的了,突然拿到个奖杯形状的东西也挺开心的。 ... -
刚拿到的几张CD
2011-03-09 12:43 2006过年的时候订的几张CD终于到手了。忍不住一晒。直接上图 ... -
i18n bug in Netbeans Platform?
2011-02-24 15:21 0JDK7 build 130 jvisualvm jv ... -
一道题
2011-01-09 23:05 0唔,没做出来,马克 -
JavaOne 2010感想——草稿篇
2011-01-04 22:18 4386本来是想专注记录JavaOne北京2010的见闻,无奈北京站比 ...
相关推荐
《Maya多边形头发插件GMH2_6_For_Maya汉化版:解锁毛发模拟的新境界》 在3D建模和动画领域,Maya作为一款强大的工具,一直备受专业人士的喜爱。然而,创建逼真的毛发效果始终是一项挑战。正是在这种背景下,GMH2_6_...
Maya多边形头发插件是一个非常强大好用的Maya插件,可以在Maya中轻松完成多边形头发的建模的修改,让你轻松制作各种头发模型,有需要的朋友欢迎下载Maya多边形头发插件使用。 2.6版本更新: 发型转多边形或曲线,...
GMH1.1安装方法 把scripts里面的东西放到我的文档maya的scripts文件夹里面 把icon放进对应的maya版本的pref的icon文件夹里面 把 shelves里面的放进对应的maya版本的pref的shelves文件夹里面
GrassMudHorse 编程语言一种受 Whitespace 启发的基于堆栈... GrassMudHorse 解释器:( gmh ) $ gmh [file.gmh]空白到 GrassMudHorse 转编译器:( ws2gmh ) $ ws2gmh <[file.ws] >[file.gmh]GrassMudHorse to W
GMH2 (Geo Maya Hair 2) is a more advanced version of GMH script, specialized in hair modeling & stylizing, developed by Phung Dinh Dzung at Thunder Cloud Studio. User can easily model complex hair ...
预测数字3游戏数字组合分段,结合其他条件可以有效减少投注资金。
标题 "less_gmh" 指的是一种用于批量压缩CSS代码的工具,它基于JavaScript语言。这个工具的主要目的是优化前端性能,通过减少CSS文件的大小来加快网页加载速度。在Web开发中,CSS代码的压缩是性能优化的重要环节,它...
在给定的压缩包`gmp.zip`中,包含了三个关键文件:`gmh.h`、`libgmp-6.1.1.lib`和`libgmp-10.dll`。 `gmh.h`是GMP库的头文件,它包含了所有你需要在C++代码中使用GMP库的函数和数据结构的声明。通过包含这个头文件...
《GMH标准操作程序:肠道微生物与健康》 在当今生命科学领域,肠道微生物与人体健康的关系日益受到重视。GMH(Gut Microbiota and Health)项目专注于探索这一领域,通过标准化的操作流程来深入研究肠道微生物群落...
2.MH5000-31一般交付清单列表 4.B5000模块PCB设计指导 5G工业模组MH5000 6.MH5000天线设计要求2019-11-29 8-1.MH5000-31 Windows USB 驱动安装指南_v1.0 8-2.华为模块Android内核驱动集成指导-(V100R001_V2.0.0, ...
2. **网格生成**:Gmsh的强项在于其自动网格划分功能,可以生成高质量的四面体、五面体、六面体、三角形和四边形等元素的混合网格。网格细化策略灵活,可以根据几何复杂度和物理问题的需求自适应地调整。 3. **...
2. 引用API:在代码中引用国密基础包提供的类和方法,如org.bouncycastle.jce.provider.BouncyCastleProvider,进行加密、解密、签名等操作。 3. 测试验证:在集成后进行充分的单元测试和系统测试,确保所有功能正常...
支持Intel Viiv 欢愉科技技术,体验全新数字家庭娱乐科技 支持Intel Pentium D/ Pentium 4处理器 支持新一代 DDR2 667MHz双信道内存架构 内建高速SATA界面传输速率可达3Gb/s 内建Intel GMA950显示芯片,体验全新视觉...
hair模拟hair模拟hair模拟hair模拟hair模拟hair模拟hair模拟hair模拟hair模拟hair模拟
* 主板:华擎 880GMH/USB3,价格499元 * 内存:金士顿 2GB DDR3 1333,价格280元 * 硬盘:WD 500GB 7200转 16MB(串口/RE3),价格299元 * 光驱:建兴 IHDP118-26,价格110元 * 液晶显示器:明基 G900WD,价格850元 ...
**2. 许可密钥支持** - 如有任何关于许可密钥的疑问或需要协助,请在组件XX-SER-LIKEY-BOJ上开启支持案例。 **3. 试用与评估** - 如果您希望对未授权的产品或许可选项进行试用或评估,请联系您的帐户经理安排...
例如,题目1中,要证明EF=GH,可以通过构造辅助线,如过点G、E分别作GM⊥BC和EN⊥CD,使垂足分别为M、N,然后利用全等三角形ENF与GMH证明它们的边相等,从而得出EF=GH。 其次,第二类问题通常要求证明一条线段等于...
采用从头算方法,讨论了9,10-二...根据广义Mulliken-Hush(GMH)模型,计算了电荷复合过程的电子耦合矩阵元。结果表明,[DCA…DUR]配合物的S0→S1和S0→S2跃迁产生了两个强的局域激发态,S0→S3跃迁直接导致电荷分离
2. gmhfac.m:可能实现了GMH(Givens-Matthews-Haug)旋转,这是一种矩阵操作,用于对矩阵进行约简或对角化,这是离散化过程中的常见步骤。 3. rocochk.m:这个名字可能指的是“正交性检查”,这可能是检查离散化后...