# HG changeset patch # User Takahiro SHIMIZU # Date 1525665567 -32400 # Node ID 74859abd87cc5c5656ed4bb507fbccb4dc4a7c22 # Parent 0d0c8ed9adb42dc71ae0afa57d2f679f6dda8972 update cli tool diff -r 0d0c8ed9adb4 -r 74859abd87cc .hgignore --- a/.hgignore Tue May 01 09:37:02 2018 +0900 +++ b/.hgignore Mon May 07 12:59:27 2018 +0900 @@ -25,3 +25,4 @@ lib/Slideshow/local/* .vstags .DS_Store +local/* diff -r 0d0c8ed9adb4 -r 74859abd87cc cpanfile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpanfile Mon May 07 12:59:27 2018 +0900 @@ -0,0 +1,5 @@ +requires 'Smart::Options'; +requires 'Class::Tiny'; +requires 'Path::Tiny'; +requires 'File::chdir'; +requires 'Capture::Tiny'; diff -r 0d0c8ed9adb4 -r 74859abd87cc lib/CLI.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/CLI.pm Mon May 07 12:59:27 2018 +0900 @@ -0,0 +1,191 @@ +package CLI; +use strict; +use warnings; +use utf8; + +use DDP { deparse => 1 }; + +use Smart::Options; +use Smart::Options::Declare; +use Time::Piece; +use Time::Seconds; +use Capture::Tiny qw/capture/; +use Path::Tiny; +use File::chdir; +use Carp qw/croak/; + +use Class::Tiny qw/ template root_dir/; +use feature 'say'; + +sub run { + my($self,@args) = @_; + my $opt = Smart::Options->new->options( + file => { describe => 'target file', alias => 'f'} + ); + $opt->subcmd( + new => Smart::Options->new(), + build => Smart::Options->new(), + open => Smart::Options->new->default('target' => 'slide.md'), + 'build_open' => Smart::Options->new->default('target' => 'slide.md'), + upload => Smart::Options->new(), + memo => Smart::Options->new(), + edit => Smart::Options->new(), + zip => Smart::Options->new(), + ); + + my $result = $opt->parse(@args); + my $command = $result->{command} // "open"; + + my $option = $result->{cmd_option}->{f} || $result->{cmd_option}->{file} || 0; + + my $call= $self->can("cmd_$command"); + croak 'undefine subcommand' unless $call; + $self->$call($option); +} + +sub cmd_new { + my ($self) = @_; + my ($y,$m,$d) = _y_m_d(); + my $slide = path($self->root_dir)->child($y)->child($m)->child($d)->child('slide.md')->touchpath; + path($self->template)->copy($slide); +} + +sub cmd_build { + my($self,$target) = @_; + + if ($target){ + $target = path($target); + $self->_build($target->dirname,$target->basename); + } else { + $self->_build($self->_search_recently_day()); + } +} + +sub _build { + my ($self,$dir,$target) = @_; + + $target //= 'slide.md'; + + say "[AUTO] BUILD at $dir/$target"; + + local $CWD = $dir; + + my ($stdout,$stderr,$exit) = capture { + system("slideshow build ${target} -t s6cr"); + }; + + croak "Perl can't build...." if $stderr; +} + +sub cmd_build_open { + my($self,$target) = @_; + $self->cmd_build($target); + if($target){ + $target =~ s/\.md$/\.html/; + } + $self->cmd_open(path($target)); +} + +sub cmd_open { + my($self,$slide) = @_; + + my $target; + + if ($slide){ + $target = $slide; + } else { + $slide = 'slide.html'; + $target = $self->_search_recently_day()->child($slide); + } + + if($target->realpath){ + system 'open', ($target->realpath); + } else { + croak 'dont found slide.html'; + } +} + +sub cmd_upload { + say "[AUTO]hg addremove"; + my ($stdout,$stderr,$exit) = capture { + system("hg addremove"); + system("hg add"); + }; + + + croak "didn't add" if $stderr; + + say "[AUTO]hg commit -m auto-Update generated slides by script"; + + ($stdout,$stderr,$exit) = capture { system('hg commit -m "auto-Update generated slides by script"');}; + + if ($stderr) { say $stderr; croak "didn't commit";} + + say "[AUTO]hg push"; + + ($stdout,$stderr,$exit) = capture { system('hg push'); }; + + if ( $stderr ) { + say $stderr; + croak "didn't commit"; + } else { + say $stdout; + } +} + +sub _y_m_d { + my $t = localtime; + # ex... 2018/02/14 + ($t->strftime('%Y'), $t->strftime('%m'), $t->strftime('%d')); +} + +sub _search_recently_day { + my($self) = @_; + my ($y,$m,$d) = _y_m_d(); + my $root_dir = path($self->root_dir)->child($y)->child($m); + + my $date = shift @{ [sort { $b->stat->mtime <=> $a->stat->mtime } $root_dir->children]}; + return $date; +} + +sub cmd_memo { + my ($self) = @_; + my ($y,$m,$d) = _y_m_d(); + my $memo = path($self->root_dir)->child($y)->child($m)->child($d)->child('memo.txt')->touchpath; + exec $ENV{EDITOR},($memo->realpath); +} + +sub cmd_edit { + my ($self) = @_; + my $recent_day = $self->_search_recently_day(); + my @targets = $recent_day->children(qr/\.md$/); + my $target = pop @targets; + exec $ENV{EDITOR},($target->realpath); +} + +sub cmd_zip { + my ($self) = @_; + my $recent_day = $self->_search_recently_day(); + my $t = localtime; + my $zip = $recent_day->child('zip.txt')->touch->opena; + + $t-= ONE_WEEK; + + for(1..7){ + my($y,$m,$d)=($t->strftime('%Y'), $t->strftime('%m'), $t->strftime('%d')); + my $memo = path($self->root_dir)->child($y)->child($m)->child($d)->child('memo.txt'); + + unless ($memo->exists) { + $t += ONE_DAY; + next; + } + + say $zip "$y-$m-$d----"; + say $zip $memo->slurp; + say $zip "----------"; + $t += ONE_DAY; + } +} + + +1; diff -r 0d0c8ed9adb4 -r 74859abd87cc lib/Slideshow/Util.pm --- a/lib/Slideshow/Util.pm Tue May 01 09:37:02 2018 +0900 +++ b/lib/Slideshow/Util.pm Mon May 07 12:59:27 2018 +0900 @@ -46,7 +46,6 @@ return { build => "recent"}; } - } elsif ( $arg eq "build-open"){ return { build_open => 1}; @@ -93,8 +92,22 @@ return $date; } - - +# sub zip { +# my $recently = _search_recently(shift); +# my $t = localtime; +# +# my ($y,$m,$d) = ($t->strftime('%Y'), $t->strftime('%m'), $t->strftime('%d')); +# my $zip = $root_dir->child($y .'/'. $m .'/'. $d .'/'.'zip.txt')->touchpath; +# +# $t -= ONE_WEEK; +# +# for(1..7){ +# my ($y,$m,$d) = ($t->strftime('%Y'), $t->strftime('%m'), $t->strftime('%d')); +# my $memo = $root_dir->child($y .'/'. $m .'/'. $d .'/'.'memo.txt')->touchpath; +# $zip->append($memo->slurp); +# } +# } +# sub build_recently { my $recently = _search_recently(shift); _build($recently); diff -r 0d0c8ed9adb4 -r 74859abd87cc slide-cr --- a/slide-cr Tue May 01 09:37:02 2018 +0900 +++ b/slide-cr Mon May 07 12:59:27 2018 +0900 @@ -1,42 +1,8 @@ #!/usr/bin/env perl use strict; use warnings; -use utf8; - -use lib "lib","lib/Slideshow/local/lib/perl5"; - -use Slideshow::Util; -use feature 'say'; - -my $flags = getopts(@ARGV); - -if ( $flags->{help} ){ - help(); - exit; -} - -if ($flags->{new}){ - new(set_template('lib/template.md'),"slides"); -} elsif ($flags->{build}) { - build_recently("slides"); -} elsif ($flags->{build_open}) { - build_recently("slides"); - open_slide("slides"); -} elsif ( $flags->{open}) { - open_slide("slides"); -} elsif ($flags->{memo}) { - edit_memo("slides"); -} elsif ( $flags->{edit}) { - edit_slide("slides"); -} else { - build_pinpoint($flags->{build_point}); -} +use lib 'lib'; +use CLI; - -sub help { - say 'slider [new build build-open open edit]'; -} - - -__END__ +CLI->new(template => $ENV{CR_TEMPLATE}, root_dir => $ENV{CR_ROOT_DIR})->run(@ARGV); diff -r 0d0c8ed9adb4 -r 74859abd87cc slides/2018/05/01/slide.md --- a/slides/2018/05/01/slide.md Tue May 01 09:37:02 2018 +0900 +++ b/slides/2018/05/01/slide.md Mon May 07 12:59:27 2018 +0900 @@ -1,12 +1,213 @@ -title: 近況報告 +title: CbCによるMoarVMの改良 author: Takahiro Shimizu profile: lang: Japanese # 研究内容 -* OS +- Perl5の後継言語として開発されているPerl6はMoarVMと呼ばれるVMを搭載している. +- Perl6はMoarVM,JVM上で動くRakudoと呼ばれる実装と,コンパイラ開発者用のサブセットであるNQPが主な実装となっている. +- 現在Perl6及びMoarVMは全体的な速度がPerl5と比較し低下しており,実務として利用できるレベルに達していない. +- またPerl6の実装自体巨大なcase-switch文など見通しが悪くなっている. +- 本研究では継続を中心に開発されたContinuation based Cを用いてMoarVMの改良を検討する. + +# 今週の進捗 + +- dalmoreでCbCgccでMoarVM/NQPが動きました + +# MoarVMのclone + +- MoarVMをgithubからcloneする + +``` +$ git clone https://github.com/MoarVM/MoarVM.git +``` + +# MoarVMのmake + +- Perlの`Configure.pl`を叩いてMakefileを生成する + - 別のディレクトリからは叩け無い仕様に成っていた + +``` +./Configure.pl --cc /usr/local/x86-cbc/bin/gcc --debug --compiler gcc --prefix=/mnt/dalmore-home/one/src/build_perl6/MoarVM` +``` + +- オプション +- cc + - コンパイラのパスを設定する +- debug + - debugオプション +- compiler + - コンパイラの種類を指定する + - gcc, clang, clをサポートしている +- toolchain + - "posix", "gnu", "bsd" and "msvc"のツールチェインを選択可能 +- prefix + - make installの先を指定 + +# llvmでの実行 + +``` +(dalmore) ./Configure.pl --cc /usr/local/cbclang/bin/clang +``` + +- セグフォで死ぬ + +``` +0. Program arguments: /net/open/CentOS/local/cbclang/bin/clang-7.0 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -disable-free -main-f +ile-name io.c -mrelocation-model pic -pic-level 2 -mthread-model posix -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse +-init-array -target-cpu x86-64 -dwarf-column-info -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -momit-leaf-frame-pointer -c +overage-notes-file /mnt/dalmore-home/one/src/MoarVM/src/platform/posix/io.gcno -resource-dir /net/open/CentOS/local/cbclang/lib/clang/7.0.0 - +D NDEBUG -D _REENTRANT -D _FILE_OFFSET_BITS=64 -D DEBUG_HELPERS -D MVM_TRACING=0 -D MVM_CGOTO=1 -D MVM_RDTSCP=1 -D MVM_BUILD_SHARED -I 3rdpar +ty/libuv/include -I 3rdparty/libuv/src -I 3rdparty/libatomicops/src -I 3rdparty/libtommath -I 3rdparty/dyncall/dynload -I 3rdparty/dyncall/dy +ncall -I 3rdparty/dyncall/dyncallback -I 3rdparty/sha1 -I 3rdparty/tinymt -I 3rdparty/dynasm -I 3rdparty/cmp -I 3rdparty -I src -internal-isy +stem /usr/local/include -internal-isystem /net/open/CentOS/local/cbclang/lib/clang/7.0.0/include -internal-externc-isystem /include -internal +-externc-isystem /usr/include -O3 -Werror=declaration-after-statement -Werror=pointer-arith -fdebug-compilation-dir /mnt/dalmore-home/one/src +/MoarVM -ferror-limit 19 -fmessage-length 136 -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -vectorize-sl +p -o src/platform/posix/io.o -x c src/platform/posix/io.c +1. parser at end of file +clang-7.0: error: unable to execute command: Segmentation fault +clang-7.0: error: clang frontend command failed due to signal (use -v to see invocation) +clang version 7.0.0 +Target: x86_64-unknown-linux-gnu +Thread model: posix +InstalledDir: /usr/local/cbclang/bin +clang-7.0: note: diagnostic msg: PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, a +nd associated run script. +clang-7.0: note: diagnostic msg: +******************** + +PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT: +Preprocessed source(s) and associated run script(s) are located at: +clang-7.0: note: diagnostic msg: /tmp/io-e696e2.c +clang-7.0: note: diagnostic msg: /tmp/io-e696e2.sh +clang-7.0: note: diagnostic msg: + +******************** +``` + +# make + +``` +$ make -j 50 && make install +``` + +- 何故かsrc側にもmoarのバイナリが生成された +- `/mnt/dalmore-home/one/src/build_perl6/MoarVM/bin`にMoarのバイナリが生成 + + +# NQPのmake + + +``` ++dalmore+one ./Configure.pl --prefix=/mnt/dalmore-home/one/src/build_perl6/nqp --backends=moar --with-moar=/mnt/dalmore-home/one/src/build_perl6/MoarVM/bin/moar +``` -# hoge -* foo - * puyo +- オプション +- `prefix` + - ビルド先 +- `backends` + - NQPが走るVMを選択する +- `--with-moar` + - MoarVMを使う場合MoarVMのパス + +# バージョン + +``` +Creating tools/build/install-jvm-runner.pl ... + +===SORRY!=== +Found /mnt/dalmore-home/one/src/build_perl6/MoarVM/bin/moar version 2018.04-1-g577857a, which is too old. Wanted at least 2018.04-18-ge7d79d8 +69 + +No suitable MoarVM (moar executable) found using the --prefix +(You can get a MoarVM built automatically with --gen-moar.) +``` + +- MoarVMとバージョンが異なるらしくエラーが発生した + +``` +/mnt/dalmore-home/one/src/build_perl6/MoarVM/bin/moar --libpath=src/vm/moar/stage0 src/vm/moar/stage0/nqp.moarvm --bootstrap --module-path=ge +n/moar/stage1 --setting-path=gen/moar/stage1 \ + --setting=NQPCORE --no-regex-lib --target=mbc \ + --output=gen/moar/stage1/NQPP6QRegex.moarvm gen/moar/stage1/NQPP6QRegex.nqp +/usr/bin/perl -MExtUtils::Command -e mkpath gen/moar/stage1/gen +/usr/bin/perl tools/build/gen-version.pl /mnt/dalmore-home/one/src/build_perl6/nqp /mnt/dalmore-home/one/src/build_perl6/nqp/share/nqp/lib > +gen/moar/stage1/nqp-config.nqp +Can't locate Digest/SHA.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl +5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at tools/build/gen-version.pl line 9. +BEGIN failed--compilation aborted at tools/build/gen-version.pl line 9. +make: *** [gen/moar/stage1/nqp.moarvm] Error 2 +``` + +- バージョンを更新したところ`Digest::SHA`が入っていないエラーが発生した + +# Perlモジュールの追加 + +- 最近のPerlのモジュールinstallツールのcpanmをoneにいれました +- `yum install perl-devel`を実行してperlのコアモジュールを追加した +- `curl -L https://cpanmin.us | perl - --sudo App::cpanminus ` +- `cpanm --force Digest::SHA` + + +# MacOSX上でのgccのエラー + +``` +$./Configure.pl --prefix=/Users/anatofuz/workspace/cr/Basic/build_perl6 --cc /Users/anatofuz/workspace/cr/build_gcc/bin/gcc --compiler gcc +``` + +これを実行すると + +``` +compiling 3rdparty/libuv/src/unix/darwin-proctitle.o +compiling 3rdparty/libuv/src/unix/fsevents.o +In file included from /System/Library/Frameworks/Security.framework/Headers/AuthSession.h:32:0, + from /System/Library/Frameworks/Security.framework/Headers/Security.h:43, + from /System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h:43, + from /System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h:27, + from /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/IconsCore.h:23, + from /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h:22, + from /System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h:39, + from /System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h:23, + from 3rdparty/libuv/src/unix/darwin-proctitle.c:33: +/System/Library/Frameworks/Security.framework/Headers/Authorization.h:193:7: error: variably modified 'bytes' at file scope + char bytes[kAuthorizationExternalFormLength]; + ^~~~~ +In file included from /System/Library/Frameworks/Security.framework/Headers/AuthSession.h:32:0, + from /System/Library/Frameworks/Security.framework/Headers/Security.h:43, + from /System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h:43, + from /System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h:27, + from /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/IconsCore.h:23, + from /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h:22, + from /System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h:39, + from 3rdparty/libuv/src/unix/fsevents.c:49: +/System/Library/Frameworks/Security.framework/Headers/Authorization.h:193:7: error: variably modified 'bytes' at file scope + char bytes[kAuthorizationExternalFormLength]; + ^~~~~ +make: *** [3rdparty/libuv/src/unix/fsevents.o] Error 1 +make: *** Waiting for unfinished jobs.... +In file included from /System/Library/Frameworks/CoreGraphics.framework/Headers/CGContext.h:18:0, + from /System/Library/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h:9, + from /System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h:11, + from /System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h:35, + from 3rdparty/libuv/src/unix/darwin-proctitle.c:33: +/System/Library/Frameworks/CoreGraphics.framework/Headers/CGFont.h:53:40: error: initializer element is not constant + static const CGFontIndex kCGGlyphMax = kCGFontIndexMax; + ^~~~~~~~~~~~~~~ +In file included from /System/Library/Frameworks/CoreGraphics.framework/Headers/CGContext.h:21:0, + from /System/Library/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h:9, + from /System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h:11, + from /System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h:35, + from 3rdparty/libuv/src/unix/darwin-proctitle.c:33: +/System/Library/Frameworks/CoreGraphics.framework/Headers/CGPath.h:391:15: error: expected identifier or '(' before '^' token + typedef void (^CGPathApplyBlock)(const CGPathElement * element); + ^ +/System/Library/Frameworks/CoreGraphics.framework/Headers/CGPath.h:393:53: error: unknown type name 'CGPathApplyBlock' + CG_EXTERN void CGPathApplyWithBlock(CGPathRef path, CGPathApplyBlock CF_NOESCAPE block) + ^~~~~~~~~~~~~~~~ +make: *** [3rdparty/libuv/src/unix/darwin-proctitle.o] Error 1 +``` + + +とフレームワークのコンパイルエラーが発生する. +これはbrew経由で入れたgcc-7でも発生した