憂鬱な午後のひととき

9月18日_

Re: mapToGi

GMPを使わない割り算の実装が極端にしょぼくて遅かった. 結果的にmod pでの巾乗算が遅かったのでそこだけMontgomeryに変更して妥当な速度になった.

9月17日_

『リビジョンA』(未須本有生)

戦闘機を改良する話. 官と民間の駆け引きや企業内の足の引っ張りあいとか半沢直樹ぽい. 全然知らない世界なのでなかなかおもしろかった.

9月14日_

BLS署名デモ

漸くkey sharingとkey recoverが動いた. 終わってみれば簡単なのだがはまっていて時間を食った.

mapToGi関数がめちゃくちゃ遅いことが判明した(ペアリング演算よりも遅い). 内部でLegendre関数やinvやsquareRootを呼んでるのでそのあたりの実装がしょぼいからかな. 10倍ぐらい速くしたい.

9月13日_

mcl on WASM

Fp254BNbやFp382などを切り替えられるようにした. BLS12曲線も早く実装したい.

9月12日_

volatileのread復習

void f0(volatile int *x)
{
    *x;
}
void f1(volatile int *x)
{
    static_cast<int>(*x);
}
void f2(volatile int *x)
{
    static_cast<volatile int&>(*x);
}

f1は必ずreadする, f2は必ずreadしない. f0はC++03は曖昧, C++11以降は必ずreadする.

9月10日_

UnionFind

英語の勉強を兼ねてUnionFindをJavaで実装.

9月9日_

池袋ジュンク堂

久しぶりに来た. 英語の文法全然覚えてないので『英語ライティングルールブック』(デイヴィッド・セイン)を買ってみた.

9月8日_

WASM(WebAssembly)入門 ペアリング演算やってみた

Runtime.stackの使い方とか.

9月7日_

テンプレートテンプレートパラメータ

gc 7.2 -std=c++17で挙動がおかしいと言われて調べたら次のコードで再現した.

#include <stdio.h>
#include <string>

template<class T>
struct X {
    X(T *) { puts("xxx"); }
};

template<class T, template<class T_>class Container>
struct X<Container<T> > {
    X(Container<T> *) { puts("xxx2"); }
};

template<class T>
void func(T *) { puts("yyy"); }

template<class T, template<class T_>class Container>
void func(Container<T> *) { puts("yyy2"); }

int main()
{
    std::string s;
    X<std::string> x(&s);
    func<std::string>(&s);
}

実行結果は

xxx2
yyy

clangだと-std=c++03, c++11, c++14, c++1zのどれも"xxx"になる. Visual Studioも同じ挙動. gcc 7以降の-std=c++1zをつけたときだけxxx2になる.

P0522R0を反映したものらしい. 従来の挙動にするには-fno-new-ttp-matchingをつければよいようだ.

関数に対しては従来通りの挙動なんだけどあってるのかな.

→後者はオーバーロードなのでcharにしないとマッチしないと指摘を受けました. どうもありがとうございます. ぼけてました.

9月4日_

ISEC研究会

専門委員会にも参加で夜遅くなった. ずっと座っていたのでおしりが痛い.

8月2日_

ブラウザ上でペアリング計算

ようやくユーザが値を変えながら確認できるようなデモを作れた. 手元ではFirefox, Chrome, Edge(about:configで拡張JavaScript有効)で動いた. 64bitブラウザじゃないと大分遅いので注意.

AndroidのChrome上でも動くのはうれしい.

CライクなAPIを提供してるのだけど, destructorの無いJavaScriptでどうやってfreeを安全にさせようか.


御意見は光成滋生<herumi@nifty.com>までお願いします