真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

darsd的wasm支持幾乎所有的d運行時-創(chuàng)新互聯(lián)

原文
大家好,我再次試用亞當wasm最小運行時,昨天我取得了很大的進步.
目前,唯一沒有實現(xiàn)特性是try/catch/finally/throw等,主要是因為引擎不用它,我想問你們當前使用它的反饋,我已寫了一個僅測試wasm運行時的文件:

創(chuàng)新互聯(lián)建站是一家專注于成都網站制作、成都網站設計、外貿營銷網站建設與策劃設計,城關網站建設哪家好?創(chuàng)新互聯(lián)建站做網站,專注于網站建設十載,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:城關等地區(qū)。城關做網站價格咨詢:18980820575
// ldc2 -i=. --d-version=CarelessAlocation -i=std -Iarsd-webassembly/ -L-allow-undefined -ofserver/omg.wasm -mtriple=wasm32-unknown-unknown-wasm arsd-webassembly/core/arsd/aa arsd-webassembly/core/arsd/objectutils arsd-webassembly/core/internal/utf arsd-webassembly/core/arsd/utf_decoding hello arsd-webassembly/object.d

import arsd.webassembly;
import std.stdio;

class A {int _b = 200;
    int a() {return 123; }
}

interface C {void test();
}
interface D {void check();
}

class B : A, C
{int val;
    override int a() {return 455 + val; }

    void test()
    {rawlog(a());
        int[] a;
        a~= 1;
    }
}

void rawlog(Args...)(Args a, string file = __FILE__, size_t line = __LINE__)
{writeln(a, " at "~ file~ ":", line);
}


struct Tester
{int b = 50;
    string a = "hello";
}
void main()
{float[] f = new float[4];
    assert(f[0] is float.init);
    f~= 5.5; //附加
    f~= [3, 4];
    int[] inlineConcatTest = [1, 2] ~ [3, 4];

    auto dg = delegate()
    {writeln(inlineConcatTest[0], f[1]);
    };
    dg();
    B b = new B;
    b.val = 5;
    A a = b;
    a.a();
    C c = b;
    c.test();
    assert(cast(D)c is null);
    Tester[] t = new Tester[10];
    assert(t[0] == Tester.init);
    assert(t.length == 10);

    switch("hello")
    {case "test":
            writeln("broken");
            break;
        case "hello":
            writeln("工作的猜串");
            break;
        default: writeln("哈哈");
    }
    string strTest = "test"[0..$];
    assert(strTest == "test");


    Tester* structObj = new Tester(50_000, "內聯(lián)分配");
    writeln(structObj is null, structObj.a, structObj.b);

    int[string] hello = ["hello": 500];
    assert(("hello" in hello) !is null, "No key hello yet...");
    assert(hello["hello"] == 500, "Not 500");
    hello["hello"] = 1200;
    assert(hello["hello"] == 1200, "重賦值不工作");
    hello["h2o"] = 250;
    assert(hello["h2o"] == 250, "New member");


    int[] appendTest;
    appendTest~= 50;
    appendTest~= 500;
    appendTest~= 5000;
    foreach(v; appendTest)writeln(v);
    string strConcatTest;
    strConcatTest~= "Hello";
    strConcatTest~= "World";
    writeln(strConcatTest);
    int[] intConcatTest = cast(int[2])[1, 2];
    intConcatTest~= 50;
    string decInput = "a";
    decInput~= "こんいちは";
    foreach(dchar ch; "こんいちは")
    {decInput~= ch;
        writeln(ch);
    }
    writeln(decInput);
    int[] arrCastTest = [int.max];

    foreach(v; cast(ubyte[])arrCastTest)
        writeln(v);

}

目前已通過所有這些測試.這表明從D運行時Arsd自定義運行遷移時,幾乎得到了所有的常見特征.表明唯一失去的是WASIlibc.但引擎不會使用它的全部,而只有它的一個子集.所以,我想說,現(xiàn)在誰都可玩它.

話雖如此,還是要謹慎地建議,雖然我?guī)砹诉@些實現(xiàn),但我并不關心內存泄漏,因此,它是不帶垃集的運行時:粗心分配.但是!如果自己清理,移植一些程序是可能的.因為引擎不會在循環(huán)泄漏內存(因為那會使它觸發(fā)GC,從而變慢),所以完全可用它.
“但為什么不繼續(xù)SkoppeWASM工作呢?”,不管我怎么努力,我構建不了LDC運行時.在最小運行時上,做這項工作要容易得多.

我不打算用它替代druntime.我已做了使引擎網絡工作最小子集的特性.我仍期待和等待真實的druntime.
可在以下位置測試PR:位置

這很好,謝謝你!!堅持下去,我可能真會決定用你的游戲引擎來做項目. 😃

現(xiàn)在大的問題是,對接如WebGLWebAPI接口的狀態(tài)如何?需要多少JS膠水代碼?最好是可自動化所有JS樣板文件,這樣我就不必為D項目編寫一行JS,就可在WASM中工作.

這一部分非常簡單,可用opDispatchD調用它,或按eval串傳遞它.

但是我有個計劃,應該會管用:執(zhí)行

setTimeout(collect, 0);

這樣,在事件循環(huán)空閑時運行它.
然后wasm棧為空時,可掃描純內存.
:D需要第2線程.
這是錯誤的,即使在普通桌面上,也不需要第二個線程.
wasm上使用GC的問題是,webasm棧是不透明的.你可讓編譯器輸出影子棧或,當它是空的時,如上掃描計劃.都應起作用,但是我還沒有時間來實現(xiàn).

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧


網站標題:darsd的wasm支持幾乎所有的d運行時-創(chuàng)新互聯(lián)
網頁地址:http://weahome.cn/article/dhgohi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部