Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2015/09/28 プレもくもく会 #2

Open
ignisan opened this issue Sep 28, 2015 · 8 comments
Open

2015/09/28 プレもくもく会 #2

ignisan opened this issue Sep 28, 2015 · 8 comments

Comments

@ignisan
Copy link
Contributor

ignisan commented Sep 28, 2015

No description provided.

@ignisan
Copy link
Contributor Author

ignisan commented Sep 28, 2015

各自の作業内容

  • ignis: Boost.Hanaのドキュメント読み続けたり、コンパイル試してみたり
  • h_hiro/maraigue: 何種類かのソルバー(Excelとかにあるあれです)で遊ぶ予定
  • usagi: https://github.com/usagi/usagi 夏ほどから新たに整理しはじめた自分ライブラリーのドキュメント整備でもする
  • LoliGothick: 自作ライブラリのMSVC対応をします(gccとclangではとおるがMSVCでエラーが出ている)

@maraigue
Copy link
Contributor

やること: いくつかのソルバーについて、C++からの使い方を調べて実際に利用してみる。

  • SAT(充足可能性問題)用のものを試す。
  • 以前に、LP(線形計画問題)用のものとしてGLPKを使ったことがあるので(http://www.slideshare.net/maraigue/chinese-postman)、こちらについては以前とは異なる問題設定に適用することを考える。

@y-jono
Copy link

y-jono commented Sep 28, 2015

やること:Clang のAST解析ツールに入門する

@usagi
Copy link

usagi commented Sep 28, 2015

今日やったことー

@ignisan
Copy link
Contributor Author

ignisan commented Sep 28, 2015

やること

Boost.Hanaのドキュメント読み続けたり、コンパイル試してみたり

Boost.HanaのURLとか

Github

https://github.com/ldionne/hana

Sites

http://ldionne.com/hana/

作業リスト

gcc5.2でのコンパイルテスト

In file included from ../hana/include/boost/hana/assert.hpp:14:0,
                 from minus.cpp:7:
../hana/include/boost/hana/config.hpp:52:5: 警告: #warning "You appear to be using GCC, which is not supported by Hana yet." [-Wcpp]
 #   warning "You appear to be using GCC, which is not supported by Hana yet."

とりあえず警告出る。GCC5.2は一部バグが有るらしく完全サポートはしてない。

Tutorialのサンプルコードの場所

http://ldionne.com/hana/ のtutorialにあるコードはコンパイルできるソースファイルが

hana/example/tutorial/

ディレクトリにある。

BOOST_HANA_CONSTANT_CHECK

Boost.Hanaでは

  • BOOST_HANA_RUNTIME_CHECK
  • BOOST_HANA_CONSTEXPR_CHECK
  • static_assert
  • BOOST_HANA_CONSTANT_CHECK

というAssertionを使うことになる。
その中でもよく使うことになるであろうBOOST_HANA_CONSTANT_CHECK
についてソースを見てみることにした。

 #   define BOOST_HANA_CONSTANT_CHECK_IMPL(tmpvar, expr)                     \
        auto tmpvar = expr;                                                 \
        static_assert(::boost::hana::Constant<decltype(tmpvar)>::value,     \
        "the expression " # expr " does not yield a Constant");             \
                                                                            \
        static_assert(::boost::hana::value(tmpvar), # expr)                 \
    /**/

#   define BOOST_HANA_CONSTANT_CHECK(...)                                   \
        BOOST_HANA_CONSTANT_CHECK_IMPL(                                     \
            BOOST_HANA_PP_CAT(boost_hana_tmp_, __LINE__),                   \
            (__VA_ARGS__)                                                   \
        )                                                                   \
    /**/

boost::hana::Constant<decltype(tmpvar)>::valueと:boost::hana::valueまでは追えなかったが、だいたい挙動はつかめる。

@maraigue
Copy link
Contributor

やりたいこと

試していたのはminisatというソフトです。 http://minisat.se/MiniSat.html

「制約充足問題」と呼ばれる問題を解くためのプログラムで、例えば

((not A) or (not B)) and (A or C) and ((not B) or (not C))

のように論理式が与えられたとき、TRUEにするようなA, B, Cの組み合わせは存在するか?を答えてくれる(あればそれを返す)というものです。

一般には組み合わせが爆発して計算時間が爆発しますが、それをなるべく効率的に解いてくれるというものです。

いくつかのパズルはこの形に直して解けます。例:数独

できたこと

インストールに手間取ったので、インストールができたというところです。

C++で利用する方法を調べていたのですが、あまりよい解説がないので(サンプルはあるけど https://github.com/niklasso/minisat-examples 解説があるわけでないのでわかりにくい)、もう少し調べてみようというところです。

@loliGothicK
Copy link

本日の成果

MSVCに無事対応

原因

xtgmath.hのジェネリックすぎる関数fma

解決

        template< class T1, class T2, class T3 >
        inline constexpr auto fma(T1&& v1, T2&& v2, T3&& v3)
        {/*...*/}

としていたところを

        template< class T1, class T2, class T3 >
        inline constexpr auto fma(interval<T1> const& v1, T2&& v2, T3&& v3)
        {/*...*/}

などとし、特殊化された関数のオーバーロードを羅列することで
呼び出し優先度を高めて解決した.


参考サイト
本の虫:ADLへの対処法
http://cpplover.blogspot.jp/2010/02/adl.html

@y-jono
Copy link

y-jono commented Sep 28, 2015

作業成果

公式ページの入門資料

http://clang.llvm.org/docs/IntroductionToTheClangAST.html

以下、入門動画を見ながら内容を抜粋

ASTContext ( 2:25頃 )

  • Keeps information around the AST

** Identifier Table 識別子テーブル
** Source Manager ??

  • Entry Point into the AST
    TranslationUnitDecl* getTranslationUnitDecl() ??

Core Classes ( 3:19頃 )

Clang AST で登場する主要なクラス

  • Decl 宣言
  • Stmt 文
  • Type 型

ほとんど進まず。残り40分ほど。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants