`
RednaxelaFX
  • 浏览: 3053042 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

把吉里吉里3 revision 3419中Risse的部分build了出来测试

阅读更多
把吉里吉里3 revision 3419中Risse的部分build了出来测试

吉里吉里3官网
需要kirikiri3源代码的,请在官网查找其SVN repository的地址。

嘛,吉里吉里3已经在revision 3419持续了几天。11月10日更新到revision 3414时,Dee氏把渐渐变得难以控制的Rina GDS代码给删了,然后这几天在慢慢摸索Rina该如何继续开发。看来最近的开发方向主要集中在Rina上,而Risse部分在上个月底之后就一直没怎么改动。于是想build一下现有的Risse部分,看看现在的实现的完成度有多高。

==================================================================

Build的过程

开发环境:
kirikiri3-buildenv-2007-08-10.zip(包括MinGW 5.1.3,MSYS-1.0.11等。具体查看这里
Ruby 1.8.6-26 Release Candidate 2
TortoiseSVN 1.4.5, Build 10425 - 32 Bit

安装包总大小:158 MB
安装后总大小:181 MB

MinGW和MSYS我原本也有装,不过要调整到跟Dee氏用的能兼容总觉得好麻烦,干脆直接用那个all-in-one的开发环境包了。

Build目标:
kirikiri3 trunk revision 3419

源代码大小:481 MB(包括SVN文件)
占用空间:1.10 GB (包括SVN文件)

源代码中所有外部依赖都包含在SVN中,也不用分别去获取。比吉里吉里2的开发轻松多了。

Ok,把开发环境展开,配置好,马上来试试build。

首先要把外部依赖都build出来,包括Boost、Boehm GC、libogg、zlib等一堆。可是一开始build到gc那部分就囧了。某个makefile里有这么一句:
svn export src src_temp || cp -pR src src_temp

我装的是TortoiseSVN,在命令行没有"svn"这个命令可用,当然就执行了后半部分的cp。一碰到SVN的那些.svn隐藏目录,这个cp就会失败。我想来想去没想出什么好办法解决,一怒,把整个repository跟SVN断开连接,也就是把那些.svn目录都删除掉,马上就OK了。
build外部依赖的过程大概用了3个小时吧。最后总算等到了那句"all done.",唉。以前不知道为什么连这些外部依赖也总是不能顺利build完。至少这次bjam的build完全没出错,一看到bjam成功build出来我就松了口气。

然后尝试去build一下吉里吉里3的核心部分。在src\core目录里现在基本上只有risse目录是能build完的。貌似因为Rina还没完成,所以src\core\base里的东西也没有被make。也好,反正我要的就是Risse部分。把Risse给build出来,得到librisse.a。

然后来到tests\rissetest目录,把测试Risse用的外壳程序给build出来。得到rissetest.exe。

这些都做完后,来看看吉里吉里3的工作区已经变到多大了:
整个k3目录:大小 4.54 GB;占用 4.68 GB
其中build_output\bin目录:大小 348 MB
其中rissetest.exe文件:大小 23.7 MB

这大小真够夸张的……难怪Dee氏在build指引中写了“要是有10G的剩余空间应该就没什么问题了吧” T T
build的过程用有用到-DDEBUG参数,不知道要是不加debug参数,然后加上优化参数(例如-O2)会怎样呢。

==================================================================

测试过程

要运行rissetest.exe,必须附带两个外部dll:
gc.dll - Boehm GC
mingwm10.dll - MinGW的一个运行时

于是把这3个文件都复制到tests\rissetest目录里,以下面命令开始测试:
for %f in (tests\*.rs) do "rissetest.exe" %f 2> "testlog\%f.testlog.txt" 1>"testlog\%f.result.txt"

这样,所有测试结果都保存到testlog目录中。不过一个个脚本文件+对应结果查看起来也挺麻烦的,所以先把所有原始脚本文件和测试结果都复制到另一个目录里放在一起,然后另外写了个程序来处理这些结果:
C#代码:
using System;
using System.IO;
using System.Text.RegularExpressions;

namespace fx.meta.rissetest
{
    public sealed class ExtractResult
    {
        public static void Main( string[ ] args ) {
            if ( args.Length < 1 ) {
                Usage( );
                return;
            } // if

            bool isPrintContent = args[ 0 ].Contains( "c" );
            bool isPrintResult = args[ 0 ].Contains( "r" );
            bool isPrintStats = args[ 0 ].Contains( "s" );

            switch ( args.Length ) {
            case 1:
                Console.WriteLine( "Missing dir_path." );
                Usage( );
                break;
            case 2:
                ExtractResults( args[ 1 ], null, isPrintContent, isPrintResult, isPrintStats );
                break;
            case 3:
                ExtractResults( args[ 1 ], args[ 2 ], isPrintContent, isPrintResult, isPrintStats );
                break;
            default:
                Console.WriteLine( "Too many arguments." );
                Usage( );
                break;
            } // switch
        } // Main

        private static void ExtractResults(
            string dirname,
            string outname,
            bool isPrintContent,
            bool isPrintResult,
            bool isPrintStats ) {

            string[ ] filelist = Directory.GetFiles( dirname, "*.rs" );
            StreamWriter writer = null;
            int fileCount = 0;
            int passCount = 0;
            try {
                if ( outname != null ) {
                    writer = File.CreateText( outname );
                    Console.SetOut( writer );
                }

                foreach ( string fname in filelist ) {
                    // get script text
                    FileInfo fiScript = new FileInfo( fname );
                    string content = null;
                    using ( StreamReader reader = fiScript.OpenText( ) ) {
                        content = reader.ReadToEnd( );
                    }

                    // get result text
                    FileInfo fiResult = new FileInfo( fname + ".result.txt" );
                    string result = null;
                    using ( StreamReader reader = fiResult.OpenText( ) ) {
                        result = reader.ReadToEnd( );
                    }

                    // extract expected result from script
                    MatchCollection matches = Regex.Matches( content, @"//=> (.+)$", RegexOptions.Multiline );
                    string expectedResult = null;
                    bool passed = false;
                    foreach ( Match match in matches ) {
                        expectedResult = match.Groups[ 1 ].Captures[ 0 ].Value;
                    }
                    if ( ( expectedResult != null ) && ( result != null ) && expectedResult.Trim( ).Equals( result.Trim( ) ) ) {
                        passed = true;
                        passCount++;
                    }

                    Console.WriteLine( "=========================================" );
                    Console.WriteLine( "Risse Test Script No.{0}: {1}", ++fileCount, fname );
                    Console.WriteLine( "Test: {0}", ( passed ) ? "Passed" : "Failed" );
                    if ( isPrintContent ) {
                        Console.WriteLine( "-----------------------------------------" );
                        Console.WriteLine( "Test Script: {0}{1}", Environment.NewLine, content );
                    }
                    if ( isPrintResult ) {
                        Console.WriteLine( "-----------------------------------------" );
                        Console.WriteLine( "Results: {0}", result );
                    }
                    Console.WriteLine( "=========================================" );
                    Console.WriteLine( );
                } // foreach

                if ( isPrintStats ) {
                    Console.WriteLine( "=========================================" );
                    Console.WriteLine( "{0} scripts tested, {1} passed, {2} failed.", fileCount, passCount, fileCount - passCount );
                }
            } finally {
                if ( writer != null )
                    writer.Dispose( );
            } // try-finally
        } // ExtractResults

        private static void Usage( ) {
            Console.WriteLine( "Usage: ExtractResult.exe -options dir_path [out_path]" );
            Console.WriteLine( "where" );
            Console.WriteLine( "\tdir_path is the directory where the *.rs scripts" );
            Console.WriteLine( "\tand their correspoding result files are." );
            Console.WriteLine( "\tout_path is the output file. Optional." );
            Console.WriteLine( "options is one or more of [crs]:" );
            Console.WriteLine( "\tc - script [c]ontent" );
            Console.WriteLine( "\tr - [r]esult" );
            Console.WriteLine( "\ts - overall [s]tatistics" );
            Console.WriteLine( "The options are case sensitive." );
        } // Usage
    }
}


运行
引用
ExtractResult -rs tests log.txt

得到的结果是:
引用
=========================================
Risse Test Script No.1: tests\anonymous-call.rs
Test: Passed
-----------------------------------------
Results: 2
=========================================

=========================================
Risse Test Script No.2: tests\anonymous-class-define.rs
Test: Passed
-----------------------------------------
Results: "This is an instance of C"
=========================================

=========================================
Risse Test Script No.3: tests\arith-0.rs
Test: Passed
-----------------------------------------
Results: 3
=========================================

=========================================
Risse Test Script No.4: tests\arith-add.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.5: tests\arith-bitand.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.6: tests\arith-bitnot.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.7: tests\arith-bitor.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.8: tests\arith-bitxor.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.9: tests\arith-dec.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.10: tests\arith-div.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.11: tests\arith-idiv.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.12: tests\arith-inc.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.13: tests\arith-lognot.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.14: tests\arith-lshift.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.15: tests\arith-lt.rs
Test: Passed
-----------------------------------------
Results: "okok"
=========================================

=========================================
Risse Test Script No.16: tests\arith-lte.rs
Test: Passed
-----------------------------------------
Results: "okok"
=========================================

=========================================
Risse Test Script No.17: tests\arith-minus.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.18: tests\arith-mod.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.19: tests\arith-mul.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.20: tests\arith-plus.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.21: tests\arith-rbitshift.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.22: tests\arith-rshift.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.23: tests\arith-sub.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.24: tests\array-default.rs
Test: Passed
-----------------------------------------
Results: "tttt--"
=========================================

=========================================
Risse Test Script No.25: tests\array-filler.rs
Test: Passed
-----------------------------------------
Results: "vv!--!=="
=========================================

=========================================
Risse Test Script No.26: tests\array-iget-iset.rs
Test: Passed
-----------------------------------------
Results: "abcd"
=========================================

=========================================
Risse Test Script No.27: tests\array-length.rs
Test: Passed
-----------------------------------------
Results: 2
=========================================

=========================================
Risse Test Script No.28: tests\array-literal.rs
Test: Passed
-----------------------------------------
Results: ":1:2:3|:a:b:c|:1.5:2.5:3.5|"
=========================================

=========================================
Risse Test Script No.29: tests\array-new.rs
Test: Passed
-----------------------------------------
Results: "321"
=========================================

=========================================
Risse Test Script No.30: tests\array-push-pop.rs
Test: Passed
-----------------------------------------
Results: 10
=========================================

=========================================
Risse Test Script No.31: tests\array-swap.rs
Test: Passed
-----------------------------------------
Results: "4:5"
=========================================

=========================================
Risse Test Script No.32: tests\array-unshift-shift.rs
Test: Passed
-----------------------------------------
Results: 14
=========================================

=========================================
Risse Test Script No.33: tests\binding-modify-local-var.rs
Test: Passed
-----------------------------------------
Results: "1:2:5"
=========================================

=========================================
Risse Test Script No.34: tests\block-alternative-argument.rs
Test: Passed
-----------------------------------------
Results: "2y34x"
=========================================

=========================================
Risse Test Script No.35: tests\block-break-with-value.rs
Test: Passed
-----------------------------------------
Results: 5
=========================================

=========================================
Risse Test Script No.36: tests\block-break.rs
Test: Passed
-----------------------------------------
Results: 5
=========================================

=========================================
Risse Test Script No.37: tests\block-child-variable-conditional-wtite.rs
Test: Passed
-----------------------------------------
Results: 0
=========================================

=========================================
Risse Test Script No.38: tests\block-continue.rs
Test: Passed
-----------------------------------------
Results: 30
=========================================

=========================================
Risse Test Script No.39: tests\block-goto.rs
Test: Passed
-----------------------------------------
Results: 5
=========================================

=========================================
Risse Test Script No.40: tests\block-return.rs
Test: Passed
-----------------------------------------
Results: 5
=========================================

=========================================
Risse Test Script No.41: tests\block.rs
Test: Passed
-----------------------------------------
Results: 10
=========================================

=========================================
Risse Test Script No.42: tests\boolean-basic.rs
Test: Passed
-----------------------------------------
Results: "true:true:false:false"
=========================================

=========================================
Risse Test Script No.43: tests\branch-bug.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.44: tests\break-omit-brock.rs
Test: Passed
-----------------------------------------
Results: 30
=========================================

=========================================
Risse Test Script No.45: tests\call-block.rs
Test: Passed
-----------------------------------------
Results: 36
=========================================

=========================================
Risse Test Script No.46: tests\call-callback-function.rs
Test: Passed
-----------------------------------------
Results: 36
=========================================

=========================================
Risse Test Script No.47: tests\call-omit.rs
Test: Passed
-----------------------------------------
Results: "iiijjjkkk"
=========================================

=========================================
Risse Test Script No.48: tests\cast-boolean.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.49: tests\cast-integer.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.50: tests\cast-octet.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.51: tests\cast-real.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.52: tests\cast-string.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.53: tests\catch-BlockExitException.rs
Test: Passed
-----------------------------------------
Results: "this should not be caught"
=========================================

=========================================
Risse Test Script No.54: tests\class-default-initialize.rs
Test: Passed
-----------------------------------------
Results: "x:y:z"
=========================================

=========================================
Risse Test Script No.55: tests\class-define-inheritance-overwrite.rs
Test: Passed
-----------------------------------------
Results: "1"
=========================================

=========================================
Risse Test Script No.56: tests\class-define-inheritance.rs
Test: Passed
-----------------------------------------
Results: "C1D1"
=========================================

=========================================
Risse Test Script No.57: tests\class-define-shared-variable.rs
Test: Passed
-----------------------------------------
Results: 0
=========================================

=========================================
Risse Test Script No.58: tests\class-define.rs
Test: Passed
-----------------------------------------
Results: "C.m"
=========================================

=========================================
Risse Test Script No.59: tests\class-instance-new-toString.rs
Test: Passed
-----------------------------------------
Results: "Hey! This is an instance of class C"
=========================================

=========================================
Risse Test Script No.60: tests\class-name-instance-name.rs
Test: Passed
-----------------------------------------
Results: "C:xx:xx"
=========================================

=========================================
Risse Test Script No.61: tests\class-name.rs
Test: Passed
-----------------------------------------
Results: "T:T:Object:Class:Class:Module:Integer:Real:Primitive:Function:Integer:Real:String:"
=========================================

=========================================
Risse Test Script No.62: tests\class-new-inheritance-overwrite.rs
Test: Passed
-----------------------------------------
Results: "1"
=========================================

=========================================
Risse Test Script No.63: tests\class-new-inheritance.rs
Test: Passed
-----------------------------------------
Results: "This is C.m"
=========================================

=========================================
Risse Test Script No.64: tests\class-private-variable.rs
Test: Passed
-----------------------------------------
Results: 14
=========================================

=========================================
Risse Test Script No.65: tests\class-static-method-property.rs
Test: Passed
-----------------------------------------
Results: "static-variable:static-variable:instance-variable:instance-variable"
=========================================

=========================================
Risse Test Script No.66: tests\class-super.rs
Test: Passed
-----------------------------------------
Results: "A.m()B.m()"
=========================================

=========================================
Risse Test Script No.67: tests\class-super2.rs
Test: Passed
-----------------------------------------
Results: 2
=========================================

=========================================
Risse Test Script No.68: tests\closure.rs
Test: Passed
-----------------------------------------
Results: 6
=========================================

=========================================
Risse Test Script No.69: tests\coroutine-alive.rs
Test: Passed
-----------------------------------------
Results: "ftff"
=========================================

=========================================
Risse Test Script No.70: tests\coroutine-CoroutineException-dead-coroutine.rs
Test: Failed
-----------------------------------------
Results: "coroutine has already exited at tests\\coroutine-CoroutineException-dead-coroutine.rs:10"
=========================================

=========================================
Risse Test Script No.71: tests\coroutine-CoroutineException-illegal-yield.rs
Test: Failed
-----------------------------------------
Results: "coroutine has already exited at tests\\coroutine-CoroutineException-illegal-yield.rs:9"
=========================================

=========================================
Risse Test Script No.72: tests\coroutine-CoroutineException-illegal-yield2.rs
Test: Failed
-----------------------------------------
Results: "coroutine has not started yet at tests\\coroutine-CoroutineException-illegal-yield2.rs:9"
=========================================

=========================================
Risse Test Script No.73: tests\coroutine-CoroutineException-illegal-yield3.rs
Test: Failed
-----------------------------------------
Results: "coroutine is not running at tests\\coroutine-CoroutineException-illegal-yield3.rs:16"
=========================================

=========================================
Risse Test Script No.74: tests\coroutine-counter-gc.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.75: tests\coroutine-counter.rs
Test: Passed
-----------------------------------------
Results: "a:0 b:1 a:2 b:4 a:6 b:9 a:12 b:16 "
=========================================

=========================================
Risse Test Script No.76: tests\coroutine-exception-in-run.rs
Test: Passed
-----------------------------------------
Results: "[ok][ok]"
=========================================

=========================================
Risse Test Script No.77: tests\coroutine-run.rs
Test: Passed
-----------------------------------------
Results: "a:0 b:1 a:2 b:4 a:6 b:9 a:12 b:16 "
=========================================

=========================================
Risse Test Script No.78: tests\date-basic.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.79: tests\date-parser.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.80: tests\dead-block.rs
Test: Passed
-----------------------------------------
Results: 4
=========================================

=========================================
Risse Test Script No.81: tests\deep-shared-variable.rs
Test: Passed
-----------------------------------------
Results: "deadbeef"
=========================================

=========================================
Risse Test Script No.82: tests\deepchild.rs
Test: Passed
-----------------------------------------
Results: 23
=========================================

=========================================
Risse Test Script No.83: tests\deepchild2.rs
Test: Passed
-----------------------------------------
Results: 1
=========================================

=========================================
Risse Test Script No.84: tests\eval-object.rs
Test: Passed
-----------------------------------------
Results: 4
=========================================

=========================================
Risse Test Script No.85: tests\exception-BadArgumentCountException.rs
Test: Failed
-----------------------------------------
Results: "bad argument count (0 given, but 1 expected) at tests\\exception-BadArgumentCountException.rs:3"
=========================================

=========================================
Risse Test Script No.86: tests\exception-BadContextException.rs
Test: Failed
-----------------------------------------
Results: "given context is not compatible with this method/property at tests\\exception-BadContextException.rs:3"
=========================================

=========================================
Risse Test Script No.87: tests\exception-ClassDefinitionException.rs
Test: Failed
-----------------------------------------
Results: "the superclass is not a class at tests\\exception-ClassDefinitionException.rs:3"
=========================================

=========================================
Risse Test Script No.88: tests\exception-IllegalMemberAccessException-const.rs
Test: Failed
-----------------------------------------
Results: "member \"c\" is read-only at tests\\exception-IllegalMemberAccessException-const.rs:5"
=========================================

=========================================
Risse Test Script No.89: tests\exception-IllegalMemberAccessException-final-initialize.rs
Test: Failed
-----------------------------------------
Results: "member \"initialize\" is final, cannot be overridden at tests\\exception-IllegalMemberAccessException-final-initialize.rs:2"
=========================================

=========================================
Risse Test Script No.90: tests\exception-IllegalMemberAccessException-final.rs
Test: Failed
-----------------------------------------
Results: "member \"final_func\" is final, cannot be overridden at tests\\exception-IllegalMemberAccessException-final.rs:11"
=========================================

=========================================
Risse Test Script No.91: tests\exception-IllegalMemberAccessException-property-read.rs
Test: Failed
-----------------------------------------
Results: "property \"p\" cannot be read at tests\\exception-IllegalMemberAccessException-property-read.rs:8"
=========================================

=========================================
Risse Test Script No.92: tests\exception-IllegalMemberAccessException-property-write.rs
Test: Failed
-----------------------------------------
Results: "property \"p\" cannot be written at tests\\exception-IllegalMemberAccessException-property-write.rs:8"
=========================================

=========================================
Risse Test Script No.93: tests\exception-IllegalMemberAccessException-var-member-const.rs
Test: Failed
-----------------------------------------
Results: "member \"c\" is read-only at tests\\exception-IllegalMemberAccessException-var-member-const.rs:5"
=========================================

=========================================
Risse Test Script No.94: tests\exception-InstantiationException.rs
Test: Failed
-----------------------------------------
Results: "cannot create instance from this class at tests\\exception-InstantiationException.rs:3"
=========================================

=========================================
Risse Test Script No.95: tests\exception-NoSuchMemberException.rs
Test: Failed
-----------------------------------------
Results: "member \"v\" not found at tests\\exception-NoSuchMemberException.rs:3"
=========================================

=========================================
Risse Test Script No.96: tests\finally-except.rs
Test: Passed
-----------------------------------------
Results: "exception thrown, but n = -1"
=========================================

=========================================
Risse Test Script No.97: tests\finally-goto-from-try.rs
Test: Passed
-----------------------------------------
Results: -1
=========================================

=========================================
Risse Test Script No.98: tests\finally-no-except.rs
Test: Passed
-----------------------------------------
Results: -1
=========================================

=========================================
Risse Test Script No.99: tests\finally-try-in-finally.rs
Test: Passed
-----------------------------------------
Results: -1
=========================================

=========================================
Risse Test Script No.100: tests\function-local-recurse.rs
Test: Passed
-----------------------------------------
Results: 24
=========================================

=========================================
Risse Test Script No.101: tests\function-shared-variable-dependence.rs
Test: Passed
-----------------------------------------
Results: 0
=========================================

=========================================
Risse Test Script No.102: tests\function-shared-variable-scope.rs
Test: Passed
-----------------------------------------
Results: 4
=========================================

=========================================
Risse Test Script No.103: tests\function-shared-variable-scope2.rs
Test: Passed
-----------------------------------------
Results: 1
=========================================

=========================================
Risse Test Script No.104: tests\global-function.rs
Test: Passed
-----------------------------------------
Results: "hogehoge"
=========================================

=========================================
Risse Test Script No.105: tests\global-object.rs
Test: Passed
-----------------------------------------
Results: 3
=========================================

=========================================
Risse Test Script No.106: tests\global-variable.rs
Test: Passed
-----------------------------------------
Results: 10
=========================================

=========================================
Risse Test Script No.107: tests\goto.rs
Test: Passed
-----------------------------------------
Results: "abcdef"
=========================================

=========================================
Risse Test Script No.108: tests\incontextof-dynamic.rs
Test: Passed
-----------------------------------------
Results: "instance-global-global-global"
=========================================

=========================================
Risse Test Script No.109: tests\incontextof.rs
Test: Passed
-----------------------------------------
Results: 5
=========================================

=========================================
Risse Test Script No.110: tests\inheritance.rs
Test: Passed
-----------------------------------------
Results: 3
=========================================

=========================================
Risse Test Script No.111: tests\instance-by-new-method.rs
Test: Passed
-----------------------------------------
Results: "abc"
=========================================

=========================================
Risse Test Script No.112: tests\instanceof.rs
Test: Passed
-----------------------------------------
Results: "o...o.o..|oo..ooo..|o.o.oo.|.oo.oo.|...ooo.|o.|ooo..|ooo..|ooo..|ooo..|.oo.."
=========================================

=========================================
Risse Test Script No.113: tests\integer-new-times.rs
Test: Passed
-----------------------------------------
Results: 8
=========================================

=========================================
Risse Test Script No.114: tests\isA.rs
Test: Passed
-----------------------------------------
Results: "o...o.o..|oo..ooo..|o.o.oo.|.oo.oo.|...ooo.|o.|ooo..|ooo..|ooo..|ooo..|.oo.."
=========================================

=========================================
Risse Test Script No.115: tests\local-binding-deep-function.rs
Test: Passed
-----------------------------------------
Results: 3
=========================================

=========================================
Risse Test Script No.116: tests\local-binding-in-binding.rs
Test: Passed
-----------------------------------------
Results: 7
=========================================

=========================================
Risse Test Script No.117: tests\local-binding-local-variable-indirect.rs
Test: Passed
-----------------------------------------
Results: 3
=========================================

=========================================
Risse Test Script No.118: tests\local-binding-local-variable.rs
Test: Passed
-----------------------------------------
Results: 3
=========================================

=========================================
Risse Test Script No.119: tests\local-binding-var.rs
Test: Passed
-----------------------------------------
Results: 0
=========================================

=========================================
Risse Test Script No.120: tests\logical-and-or-shortcut.rs
Test: Passed
-----------------------------------------
Results: 2
=========================================

=========================================
Risse Test Script No.121: tests\logical-and-or-shortcut2.rs
Test: Passed
-----------------------------------------
Results: 11
=========================================

=========================================
Risse Test Script No.122: tests\logical-and.rs
Test: Passed
-----------------------------------------
Results: "ok:ok:ok:ok:ok"
=========================================

=========================================
Risse Test Script No.123: tests\logical-or.rs
Test: Passed
-----------------------------------------
Results: "ok:ok:ok:ok:ok"
=========================================

=========================================
Risse Test Script No.124: tests\member_decl.rs
Test: Passed
-----------------------------------------
Results: 0
=========================================

=========================================
Risse Test Script No.125: tests\module-define.rs
Test: Passed
-----------------------------------------
Results: "12M"
=========================================

=========================================
Risse Test Script No.126: tests\module-new.rs
Test: Passed
-----------------------------------------
Results: "12M"
=========================================

=========================================
Risse Test Script No.127: tests\native-binder-remove-reference.rs
Test: Passed
-----------------------------------------
Results: 1
=========================================

=========================================
Risse Test Script No.128: tests\number-isNaN.rs
Test: Passed
-----------------------------------------
Results: "nyynnnn"
=========================================

=========================================
Risse Test Script No.129: tests\object-new.rs
Test: Passed
-----------------------------------------
Results: 3
=========================================

=========================================
Risse Test Script No.130: tests\object-new2.rs
Test: Passed
-----------------------------------------
Results: 3
=========================================

=========================================
Risse Test Script No.131: tests\octet-lesser-compare.rs
Test: Passed
-----------------------------------------
Results: "false:true:false:false:true:false:true:true:false"
=========================================

=========================================
Risse Test Script No.132: tests\phi-coalescing-bug-multiple-use-of-vars.rs
Test: Passed
-----------------------------------------
Results: 1
=========================================

=========================================
Risse Test Script No.133: tests\phi-liveness-bug.rs
Test: Passed
-----------------------------------------
Results: "-+-+:2"
=========================================

=========================================
Risse Test Script No.134: tests\property-define-class.rs
Test: Passed
-----------------------------------------
Results: "result: -6,6"
=========================================

=========================================
Risse Test Script No.135: tests\property-define-global.rs
Test: Passed
-----------------------------------------
Results: "result: -6,6"
=========================================

=========================================
Risse Test Script No.136: tests\property-implicit-this.rs
Test: Passed
-----------------------------------------
Results: "str!"
=========================================

=========================================
Risse Test Script No.137: tests\return-omit-0.rs
Test: Passed
-----------------------------------------
Results: 9
=========================================

=========================================
Risse Test Script No.138: tests\return-omit-1.rs
Test: Passed
-----------------------------------------
Results: 9
=========================================

=========================================
Risse Test Script No.139: tests\return-omit-goto.rs
Test: Passed
-----------------------------------------
Results: "t"
=========================================

=========================================
Risse Test Script No.140: tests\return-omit-if.rs
Test: Passed
-----------------------------------------
Results: "false:true::true"
=========================================

=========================================
Risse Test Script No.141: tests\return-omit-loops.rs
Test: Passed
-----------------------------------------
Results: "void:B:void:B:void:B"
=========================================

=========================================
Risse Test Script No.142: tests\return-omit-switch.rs
Test: Passed
-----------------------------------------
Results: "ABC:ABC:ACC:ABC:CCC:AB"
=========================================

=========================================
Risse Test Script No.143: tests\return-omit-synchronized.rs
Test: Passed
-----------------------------------------
Results: "locking!"
=========================================

=========================================
Risse Test Script No.144: tests\return-omit-try-0.rs
Test: Passed
-----------------------------------------
Results: "a"
=========================================

=========================================
Risse Test Script No.145: tests\return-omit-try-1.rs
Test: Passed
-----------------------------------------
Results: "a"
=========================================

=========================================
Risse Test Script No.146: tests\return-omit-try-2.rs
Test: Passed
-----------------------------------------
Results: "bb"
=========================================

=========================================
Risse Test Script No.147: tests\return-omit-try-3.rs
Test: Passed
-----------------------------------------
Results: "a:void:void:a"
=========================================

=========================================
Risse Test Script No.148: tests\return-omit-try-goto.rs
Test: Passed
-----------------------------------------
Results: "t"
=========================================

=========================================
Risse Test Script No.149: tests\return-omit-var.rs
Test: Passed
-----------------------------------------
Results: "n!"
=========================================

=========================================
Risse Test Script No.150: tests\scope-local-function.rs
Test: Passed
-----------------------------------------
Results: "hogehoge"
=========================================

=========================================
Risse Test Script No.151: tests\string-charAt.rs
Test: Passed
-----------------------------------------
Results: "adffa--"
=========================================

=========================================
Risse Test Script No.152: tests\string-lesser-compare.rs
Test: Passed
-----------------------------------------
Results: "false:true:false:false:true:false:true:true:false"
=========================================

=========================================
Risse Test Script No.153: tests\string-literal-emb-expr.rs
Test: Passed
-----------------------------------------
Results: "abc45truefalse"
=========================================

=========================================
Risse Test Script No.154: tests\string-new-length.rs
Test: Passed
-----------------------------------------
Results: 9
=========================================

=========================================
Risse Test Script No.155: tests\string-newmethod.rs
Test: Passed
-----------------------------------------
Results: "ababababab"
=========================================

=========================================
Risse Test Script No.156: tests\string-substr.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.157: tests\switch-go-through.rs
Test: Passed
-----------------------------------------
Results: "*+-+--"
=========================================

=========================================
Risse Test Script No.158: tests\synchronized-break.rs
Test: Passed
-----------------------------------------
Results: "exited"
=========================================

=========================================
Risse Test Script No.159: tests\synchronized-break2.rs
Test: Passed
-----------------------------------------
Results: "exited"
=========================================

=========================================
Risse Test Script No.160: tests\synchronized-goto.rs
Test: Passed
-----------------------------------------
Results: "abcdef"
=========================================

=========================================
Risse Test Script No.161: tests\synchronized-goto2.rs
Test: Passed
-----------------------------------------
Results: 12
=========================================

=========================================
Risse Test Script No.162: tests\synchronized-return.rs
Test: Passed
-----------------------------------------
Results: "return by exception"
=========================================

=========================================
Risse Test Script No.163: tests\this-proxy.rs
Test: Passed
-----------------------------------------
Results: "global-a:class-b:instance-c:local-d:@:@:@:@"
=========================================

=========================================
Risse Test Script No.164: tests\thisproxy-optimization-bug.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.165: tests\thread-exception.rs
Test: Failed
-----------------------------------------
Results: "Exception! at tests\\thread-exception.rs:3"
=========================================

=========================================
Risse Test Script No.166: tests\thread-global-variable-as-a-flag.rs
Test: Passed
-----------------------------------------
Results: "end"
=========================================

=========================================
Risse Test Script No.167: tests\thread-synchronized-block.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.168: tests\thread-synchronized-function.rs
Test: Passed
-----------------------------------------
Results: "ok"
=========================================

=========================================
Risse Test Script No.169: tests\throw-toException.rs
Test: Passed
-----------------------------------------
Results: "4321!!"
=========================================

=========================================
Risse Test Script No.170: tests\try-break.rs
Test: Passed
-----------------------------------------
Results: "exited"
=========================================

=========================================
Risse Test Script No.171: tests\try-break2.rs
Test: Passed
-----------------------------------------
Results: "exited"
=========================================

=========================================
Risse Test Script No.172: tests\try-conditional-catch.rs
Test: Passed
-----------------------------------------
Results: "A:B:non caught exception"
=========================================

=========================================
Risse Test Script No.173: tests\try-continue.rs
Test: Passed
-----------------------------------------
Results: 12
=========================================

=========================================
Risse Test Script No.174: tests\try-goto.rs
Test: Passed
-----------------------------------------
Results: "abcdef"
=========================================

=========================================
Risse Test Script No.175: tests\try-goto2.rs
Test: Passed
-----------------------------------------
Results: 12
=========================================

=========================================
Risse Test Script No.176: tests\try-nest.rs
Test: Passed
-----------------------------------------
Results: 1
=========================================

=========================================
Risse Test Script No.177: tests\try-return.rs
Test: Passed
-----------------------------------------
Results: "return by exception"
=========================================

=========================================
Risse Test Script No.178: tests\try.rs
Test: Passed
-----------------------------------------
Results: "return by exception"
=========================================

=========================================
Risse Test Script No.179: tests\void-basic.rs
Test: Passed
-----------------------------------------
Results: "::void"
=========================================

=========================================
Risse Test Script No.180: tests\while-loop.rs
Test: Passed
-----------------------------------------
Results: 26
=========================================

=========================================
180 scripts tested, 164 passed, 16 failed.


嗯,so far so good。所以可以看出现在Risse的进展还算可以,只有协程部分的测试fail了;虽然异常处理的那几个脚本也"fail"了,不过一看运行结果就知道那其实是正确行为。换句话说,Risse已经相当实用,即使就这么拿来嵌入到一个程序中实际使用也不成大问题。看来已经值得拿来研究了呢。
(<= 这人只是在找借口推脱掉继续研究吉里吉里2中TJS2部分的麻烦而已 T T)

随便抓出其中的一个脚本来研究下:
closure.rs
// スクリプト言語「りせ」テスト用スクリプト
{

	var func = function() {
		var a = 0;
		return function () { return ++a; };
	};
	var la = func();
	var la_1 = la();  // la_1 => 1
	var la_2 = la();  // la_2 => 2
	var la_3 = la();  // la_3 => 3
	return la_1 + la_2 + la_3; //=> 6
}


然后来看看生成的代码:
######################################
function anonymous function 42 nest level 2
######################################
========== VM block #2 (anonymous function 42) ==========
#(4) 	var func = function() {
#(5) 		var a = 0;
#(6) 		return function () { return ++a; };
00000 const %0, *0 // *0=1
00003 sread %1, [1:0]
00006 add %2, %1, %0
00010 swrite [1:0], %2
00013 return %2

######################################
function anonymous function 16 nest level 1
######################################
========== VM block #1 (anonymous function 16) ==========
#(3) 
#(4) 	var func = function() {
#(5) 		var a = 0;
00000 const %0, *0 // *0=0
00003 swrite [1:0], %0
#(6) 		return function () { return ++a; };
00006 const %0, *1 // *1="<VM block #2>"
00009 sshare %0
00011 func %1, %0
00014 return %1

######################################
function toplevel nest level 0
######################################
========== VM block #0 (toplevel) ==========
#(2) {
#(3) 
#(4) 	var func = function() {
00000 const %0, *0 // *0="<VM block #1>"
00003 sshare %0
00005 func %1, %0
#(5) 		var a = 0;
#(6) 		return function () { return ++a; };
#(7) 	};
#(8) 	var la = func();
00008 call %0, %1()
#(9) 	var la_1 = la();  // la_1 => 1
00013 call %1, %0()
#(10) 	var la_2 = la();  // la_2 => 2
00018 call %2, %0()
#(11) 	var la_3 = la();  // la_3 => 3
00023 call %3, %0()
#(12) 	return la_1 + la_2 + la_3; //=> 6
00028 add %0, %1, %2
00032 add %1, %0, %3
00036 return %1

注意到其中#(xxx)的是注释,xxx是源代码的行号,后面跟着的是对应源代码的内容。
Risse VM的指令集与TJS2 VM的相比变化不太大。不过中间增添了SSA形式的中间代码,让我颇感兴趣。另外,Risse中的函数终于能有正确的lexical scope,不会想TJS2那样允许嵌套函数定义却不按lexical scope来确定访问链。

明天考试之后再继续疯狂吧 XD
分享到:
评论
3 楼 RednaxelaFX 2007-11-17  
昨天还在说在rev 3419停留了几天,今天就rev 3420了。主要还是集中在Rina的开发上,so it's not part of my concern...yet。
2 楼 RednaxelaFX 2007-11-16  
编译出来的东西大不过是因为开了-DDEBUG而已吧。不加入debug symbols外加代码优化的话应该会小很多。

对我来说krkr3比krkr2单在build的方面已经有了质的飞跃:再也不用因为可恶的Borland的库而徘徊在无法编译的门槛外。几乎所有用的工具都是“标准”的……怎么定义“标准”这挺暧昧的,不过至少GNU Make也算是得到广泛接受的开源的build tool,将来移动到linux上也比较方便。由于现在手上krkr3所有的binary都是在自己的机器上从source而build出来的,需要编辑时也没有以前那么担心(嗯,我原本一直都是用预先build好的bjam...因为自己build总出错,不知道为什么)

上面列出来的数字只有krkr3的。如果把当前版本的krkr2也从SVN里check出来,然后成功build出来的话,占据的空间未必会小多少。由于krkr2的外部依赖不在SVN里,需要自己另外收集,光这部分就很可观了。当时为了build出TJS2 VM,也用了几百MB……

至于Risse,本来就是TJS3的另一个名字而已嘛,当然还是保持了JavaScript的相似度;应该说比TJS2更像JavaScript(2?)了,就差没有原型链的机制……
1 楼 shawind 2007-11-16  
才看到那段c代码吓了一跳,Dee怎么那么NB,后来才反应过来。新的脚本果然还是仿javascript的。
虽然他提供了依赖的包,编译看上去还是那么麻烦,而且还这么大......感觉在这个方面,krkr3并没有比krkr2有明显的改善。

相关推荐

    吉里吉里XP3

    吉里吉里XP3提取工具安卓版android-实用工具

    krkr 吉里吉里 中文版

    《krkr 吉里吉里 中文版》是一款由日本开发者W.Dee设计的高级文本冒险游戏(恋爱AVG)制作引擎,名为KRKR或KAG3。这款工具以其强大的功能和可扩展性在游戏制作社区中备受青睐,使得创作者能够轻松地构建具有丰富剧情...

    吉里吉里2安卓手机模拟器.apk

    吉里吉里2安卓手机模拟器.apk

    AVG游戏Android移植框架源码(吉里吉里与NS)

    AVG游戏Android移植框架源码主要涉及了将传统的AVG(冒险游戏)从桌面平台迁移到Android设备的技术,其中核心是吉里吉里(KRIKRI)引擎和NS(Nscripter)引擎的实现。这两款引擎在游戏开发者中非常流行,主要用于...

    吉里吉里最新版.apk

    吉里吉里最新版.apk

    krkrsdl2:吉里吉里SDL2プロジェクト

    変のプログラムは,KAG(吉里吉里アドベンドベーチャーム)3の変更バージョンと共に使用できます。详细については,次の场所を参照してください: : 吉里吉里SDL2はを使用してにコンパイルすることも可能です。 Web...

    XP3文件解包工具

    XP3文件是游戏行业中常见的一种数据打包格式,尤其在一些早期的大型多人在线角色扮演游戏(MMORPG)中广泛使用。这种格式通常包含游戏的资源,如音频、图像、脚本和其他重要文件,为了减小存储空间并提高加载速度,...

    xp3拆包工具(小白适用)

    内含xp3拆包工具、操作说明,适用于非专业人士

    xp sp3补丁下载

    xp sp3补丁,sp2升为sp3补丁下载。如果使用360安全卫士的话,也可以直接下载安装最好,打开修复漏洞界面,在功能性补丁里可以找到这个补丁,选择下载即可,不过速度慢了点。对速度有要求的,可以直接下载xp sp3补丁...

    Fate/hollow ataraxia

    吉里吉里[きりきり] 2 実行コア/2.25.11.909 (SVN revision:1109; Compiled on Sep 12 2005 22:44:16) TJS2/2.4.19 Copyright (C) 1997-2005 W.Dee and contributors All rights reserved. 12:48:07 ! バージョン情...

    xp3文件打包解包工具kikiriki

    3. 更新:在不解包整个文件的情况下,可以直接更新.xp3文件中的特定部分。这对于迭代开发尤其方便,减少了重复的工作量。 在使用Kikiriki时,我们需要通过命令行界面来操作。例如,我们可以输入特定的命令来打包一...

    85709703768437z安卓吉里kr模拟器!!!!!!!!.apk

    85709703768437z安卓吉里kr模拟器!!!!!!!!.apk

    吉里奇

    【吉里奇】,在IT领域中,"吉里奇"可能是指一款名为Jirachi的软件或技术,但没有足够的上下文来确认其具体含义。不过,由于标签指定为"CSS",我们可以推测这里可能是指一个与CSS(层叠样式表)相关的项目或工具,...

    Yangi-Davr-:扬吉里克拉里

    【标题】:“Yangi-Davr-:扬吉里克拉里”这个标题可能源自乌兹别克语或塔吉克语,直译为“新的时代”或“新时代”,但具体含义和背景需要更多上下文信息来解读。在IT领域,这可能指的是一个软件项目、更新或者是一种...

    KrkrExtract:可以提取和打包krkr2和krkrz的xp3文件的工具

    wiki还在建设中,不知道什么时候能完成。受保护的程序一律不支持,支持就是打开潘多拉魔盒,你得保证各类bypass不冲突。krkr2打包请直接使用UI上的封包功能krkrz打包请直接使用Universal Patch功能转发本工具请附上...

    krkr实现滚动存档界面示例

    在IT行业中,游戏开发是一个非常活跃的领域,而krkr引擎(又称吉里吉里)是其中一款广泛应用的游戏制作工具,特别适合制作2D视觉小说和小型RPG游戏。本示例将详细介绍如何使用krkr引擎实现一个滚动式的存档界面。 ...

    Java游戏开发组件LGame简易测试版0.1.5

    出于效率考虑,LGame中所有组件都不依赖于Swing,而是基于AWT独立绘制成型,因此它可以将自身的运行环境压缩到最小,一个压缩后不足4MB的精简JRE,已足够支持它的运行,也就是与RMXP或吉里吉里2的运行库大小相仿佛,...

    KAGeXpress

    它基于吉里吉里2(KiriKiri2)和Kirikiri Adventure Game 3这两款强大的游戏引擎,旨在降低游戏开发门槛,让创作者能更加便捷地实现自己的创意。 首先,我们来了解一下KAGeXpress的核心特点。作为一款AVG游戏制作...

    Econometrics-USU-SP21:教授拥有的Github计量经济学存储库。 贾汉吉里

    Econometrics-USU-SP21:教授拥有的Github计量经济学存储库。 贾汉吉里

    BPX060(050)S24FXX_XENB1060(1050) EMC.pdf

    3. **地址**:韩国京畿道永仁市乔因区阳基面吉里66-6号 4. **联系方式**: - 电话:+82-31-679-9600 - 传真:+82-31-336-1184 ### 二、客户信息 1. **公司名称**: - 公司1:Bridgepower Corporation - 地址:...

Global site tag (gtag.js) - Google Analytics