TL;DR (概要) Crystalのような破壊的変更がアクティブなプログラミング言語の本を作る場合、バージョンアップで本の内容が壊れることが よくある。 この問題に対処するため、技術書典5で頒布する予定の本では、サンプルコードが正しく動作することをCIで確認するようにした。 ソースコードのフォーマット忘れが無いかもチェックするようにした。 ↑のようなことができたのはAsciidoctorのソースコードをincludeする機能の力が大きい。 ついでにRedPenで文章の校正も行なうようにした。 長期間に渡ってメンテナンスする予定の本であればこのような工夫するのは当然だし、そうでなくても本の品質を高める意味でこの工夫には価値があると思う。 はじめに(ポエム) Crystal-JPというプログラミング言語Crystalの日本語ユーザーグループで、Crystalの普及に勤しんでいる、ということに
クロスアビリティ Winmostarサポートチームです。 0. はじめに 結晶系の第一原理計算を実施する場合、事前に対象となる結晶の対称性を把握する必要がある。また、計算セルをPrimitiveセルへと変換しなければならない。しかしながら、比較的に大きなユニットセルを有する結晶においては、空間群を特定してPrimitiveセルを抽出することは容易ではない。少なくとも、手作業ではまず不可能である。本記事では、任意の結晶について、その対称性および空間群に関する処理を遂行するライブラリー"spglib"を紹介する。 1. spglib spglibはBSDライセンスにて、以下のURLからダウンロードできる。 当該ライブラリーのコンパイルおよびインストール方法については、このURLを参照のこと。この記事では、spglibライブラリーの使い方について解説する。C言語、Fortran、Python、R
#!/usr/bin/env crystal #http://nabetani.sakura.ne.jp/hena/orde27ligmir/ #https://qiita.com/Nabetani/items/0b2f459ec128c89948f4 #x,y D={ '.'=>{ [0,-1]=>[0,-1], #N [1,0]=>[1,0], #E [0,1]=>[0,1], #S [-1,0]=>[-1,0], #W }, '1'=>{ [0,-1]=>[1,0], [1,0]=>[0,-1], [0,1]=>[-1,0], [-1,0]=>[0,1], }, '0'=>{ [0,-1]=>[-1,0], [1,0]=>[0,1], [0,1]=>[1,0], [-1,0]=>[0,-1], }, } H=5;W=5 while line=gets m=line.chomp.spl
1年で150個のPull Requestを出した話。あるいはOSSに継続的にコントリビュートするということについてRubyCSSOSSCrystal なんかエモいこと書きたくなったので書きます。 はじめに CrystalというRubyライクなプログラミング言語のコンパイラに、1年間(2016/12/26〜2017/12/25)で150個のPull Requestを出しました。 今年は閏年ではなかったので365 / 150 = 2.43333...、というわけで3日に1回以上のペースでPull Requestを出したことになります。 随分とたくさんのPull Requestを出したものです。 また、150個のうちマージされたものは106個でした。 こうした活動の中で感じたことを適当に書いていきたいと思います。 継続的にOSSにコントリビュートするために 継続的にOSSにコントリビュートするた
require "./lib_dpdk" def hello_thread(arg : Void*) : LibC::Int LibC.printf("Hello from lcore: %d\n", LibDpdk.per_lcore__lcore_id) 0 end fun main(argc : Int32, argv : UInt8**) : Int32 Crystal.main do LibDpdk.rte_eal_init(argc, argv) LibDpdk.rte_eal_mp_remote_launch(->hello_thread, nil, LibDpdk::RteRmtCallMasterT::CallMaster) LibDpdk.rte_eal_mp_wait_lcore end end % sudo crystal run src/hello.cr EAL:
Crystal bindings to DPDK, development in progress. Hello World (examples/hello.cr) require "../src/dpdk" class Hello < Dpdk def hello_thread printf("Hello from lcore: %d\n", rte_lcore_id) end def main(argc, argv) rte_eal_init(argc, argv) rte_eal_mp_remote_launch(hello_thread) rte_eal_mp_wait_lcore end end Hello.run Requirements Crystal (0.24.1) Recent Clang (5.0) or GCC, make and coreutils Working
x = Array(Float64).new(100){ rand(10.0..20.0) } y = Array(Float64).new(100){ rand(100.0..200.0) } Gnuplot.plot do |s| s << "set title 'SCATTER'" s << "plot '-' pt 6 lt rgb 'red' t 'circle'" s << to_gp([x, y]) end memo = 0 x = Array(Float64).new(100,0.0) 100.times do |i| memo = memo + rand(-0.9..1.0) x[i] = memo end Gnuplot.plot do |s| s << "set title 'LINES'" s << "plot '-' with lines title 'x'" s
・Crystal 言語の 2015年とそれまでの生い立ちを振り返ってみて ・Crystal 言語の 2016年を振り返ってみて ・Crystal 言語周辺の 2017年は?(妄想) ・ドラマ仕立てで見た、Crystal 言語の2017年の継続として書きました。 Crystalプログラミング言語 (日本語Crystal言語)の特徴は、"Fast as C, Slick as Ruby" です。 Crystalプログラム言語は、私が長年待ち焦がれていた言語です。 それは多くの方が同様に感じていると信じています。 振り返ってみるとプログラム言語は、ソフトウェア工学の初期から最も基本的で進展を支える技術の一つとして、多くの企業、研究機関が取り組んできました。したがって、いまさらまた新しい言語?と感じられる方も多い分野だと感じられるかもしれません。一方でプログラム言語は、実際100種どころか多種多様
公式 crenv rubyのスクリプトで処理が遅いと思うところでcrystalを取り入れてみようかな、程度のモチベーションで使ってみる。 crystalのDockerfileを示す。 yumで必須はgcc,git FROM centos:centos7.4.1708 MAINTAINER TestUser ENV container docker ##### crystal environment var ENV crystal_ver=0.20.0 #最新は投稿時点で0.24.1 ENV CRENV_ROOT=/usr/local/crenv ##### yum setting & install RUN yum update -y && yum clean all RUN yum swap -y fakesystemd systemd && yum clean all #RUN yum
require "../src/lib/base" module IpBlockingMethods private macro target_addresses? src = pkt.u32(IP_SRC_OFS) blocking_ips.any? { |x| x == src } end private macro process_per_type mark_drop_and_next if ipv4? && target_addresses? end end module ProcessPacketsMethods private macro process_each_packets each_packet do process_per_type end end end module MainMethods macro main_loop until @quit_signal rt
Crystal コンパイラを改造してチューニングしたら、5万行ぐらいから百数行ぐらいになった!!ヤった! Hello Crystal DPDK to LLVM IR (100ish lines) require "../src/dpdk" class Hello < Dpdk def hello_thread printf("Hello from lcore: %d\n", rte_lcore_id) end def main(argc, argv) rte_eal_init(argc, argv) rte_eal_mp_remote_launch(hello_thread) rte_eal_mp_wait_lcore end end Hello.run # # Run the program # # sudo build/hello % sudo build/hello EAL: Det
spawnの構文はGoっぽい。 それはともかく。2から9まで配列にProcをセットする部分で、別のProcを噛ませないと、 internal errorで 落ちた。びっくり。 #!/usr/bin/env crystal #http://qiita.com/Nabetani/items/1c83005a854d2c6cbb69 #http://nabetani.sakura.ne.jp/hena/ord24eliseq/ def isqrt(n) return 0 if n<=0 return 1 if n<4 # 1 x,y=0,n while x!=y&&x+1!=y x,y=y,(n//y+y)//2 end x end def icbrt(n) return -icbrt(-n) if n<0 return 0 if n==0 return 1 if n<8 # 1,7 x,y=0
#!/usr/bin/env crystal #http://qiita.com/Nabetani/items/23ebddb44f0234e7fb15 #http://nabetani.sakura.ne.jp/hena/ord28spirwa/ dir="ESWN" while l_=gets line=l_.chomp.split(':') n,e,s,w=line[0].split(',').map(&.to_i64) l=[e,s,w,n] days=line[1].to_i64+1 (0..1/0.0).each{|i| [ l[i%4]+(i%4==0 ? 1 : 0), (i/4+1)*2, l[i%4]-(i%4==3 ? 1 : 0), ].each_with_index{|e,j| days-=e if days<0 puts dir[(i+j)%4] break e
GoはIIf(VB6と同様の、短絡しないなんちゃって3項)使ってます Java/C#等は今回は多分割愛します。。 #!/usr/bin/env perl #http://nabetani.sakura.ne.jp/hena/orde24tancho/ #https://qiita.com/Nabetani/items/928d6a94d83c21ef64d7 use strict; use warnings; use IO::Handle; STDOUT->autoflush(1); sub comb{ my($n,$k)=@_; my $r=1; for(my $i=0;$i<$k;$i++){ $r=$r*($n-$i)/($i+1) } return $r } while(<>){ my($b,$n)=split(',',$_); $b--; $n--; my $topdigit=1
Crystalについて Ruby のように書きやすく C のように速いプログラミング言語 DMM INSIDEの記事 設計思想 Ruby 風な文法 型推論による変数・メソッドの静的型付け 容易に記述可能な C 言語バインディング マクロとジェネリクスによるコンパイル時のコード生成 高速なネイティブコードを出力 Crystal-JP すごい C言語の数十倍から数百倍遅くなると言われまくってるRubyに対して、ほぼ同じような書き方でCやC++,Rustに匹敵する高いパフォーマンス!!らしい!! 少し使って見た CrystalによるHello World! Crystal : 0.24.2 (2018-03-10)で実行した Crystalはプログラム自体がメインルーチンなので
Static binaries on OSX is a hard issue, but Go achieved by using syscall directly. There is syscall package on Crystal too. Basic code is as following. ... str = "Hello, World!\n" syscall(WRITE, 1_u64, str.to_unsafe, str.size.to_u64) syscall(EXIT) % objdump -d hello hello: file format Mach-O 64-bit x86-64 Disassembly of section __TEXT,__text: __text: 1f60: 48 89 35 99 00 00 00 movq %rsi, 153(%rip)
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く