第60回 プログラミング・シンポジウム
![Cコンパイラを利用したRubyのJITコンパイラ / Programming Symposium 60](https://cdn-ak-scissors.b.st-hatena.com/image/square/fef9364efbe06a3a6c3511abcd624d8ddb753da6/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F24366f793e0a4f9993a5b12eabfe2d93%2Fslide_0.jpg%3F11540522)
#define __is_constexpr(x) \ (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8))) #include<stdio.h> #define Def 10 #define __is_constexpr(x) \ (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8))) enum test{Enum}; int main(){ int Val = 10; const int Const_val = 10; int a = __is_constexpr(Val); int b = __is_constexpr(Const_val); int c = __is_constexpr(10); int d = __
配列の全ての要素が等しいか否か mrkn 配列の全ての要素が等しいことはどう確認したら良いんだろう。 `ary.all? {|e| e == ary[0] }` これかな usa ary.uniq.size == 1 mrkn なるほど > uniq usa all?でブロック引数より速そうな予感 いやでもaryがでかくてかつ全然要素が等しくなかったらそうでもないか。 mrkn `ary.all? {|e| e.foo == ary[0].foo }` の場合はどうでしょう。map.uniq.size がいいかな usa all?は全て等しい時に遅いが、序盤で違うとわかったら速い mrkn 確かに > 序盤で違うとわかったら速い usa この辺は予想される集合の傾向で判断するしかないですかねえ。 map.uniq.sizeはmapの結果としての一時配列を作らないようにするには、えーと En
DroidKaigi 2018にて 「Annotation Processingを駆使したコード生成でボイラープレートコードを駆逐しよう!」 というタイトルで登壇します 会場にお越しになる方はご興味ありましたら見に来て下さい! 時間 : 2018/02/08 (Day 1) 16:50-17:20 場所 : Room5 droidkaigi.jp 内容 有名どころのライブラリにも活用されているAnnotation Processingによるコード生成について、そもそもどんなことができるのか、どうやって作られているのか、Androidからはどのように活用できるのかを解説します 目次 Annotation Processingって? Annotationとコード生成 JavaPoetとKotlinPoet Android開発においてどのように活用できるのか Kotlinから使う場合の注意点 ス
まえおき 巷では「プログラマーになりたい人に初学者にとって、ポインタという考え方がわけわかめ」という話がよくあります。 そこでいろいろな人が「ポインタは住所だ」とか「変数がハコで」とか手を変え品を変え分かりやすいように説明してくれています。 それでもなお「ポインタがわかりづらい」という人が後を絶ちません。 もういっそのこと、例え話をやめてド直球で攻めたらいいんじゃないでしょうか。 Hello, Worldより簡単に サンプルコード 以下のコードを考えます。 void main() { int a; int b; int c; a = 1; b = 2; c = a + b; } 「#include <stdio.h>」なんていう謎のオマジナイはこの際ナシです。あんなもの無くたってC言語は成り立ちます。 まぁ見ての通り、どこにも何も出力されませんが。 このプログラムは、「c = a + b」
C++ AdventCalendarの12日目 普段私はWEBのフロントエンドを仕事にしている。 つまり使う言語はjavascript/typescript等のScript言語だ。 ただ前職や趣味、OSS等でC++によく触っていたので昔実装したmallocの話をすることにした。 mallocとは mallocとはC言語のstdlib.hに含まれるメモリ割り当て関数のことで、 C++やその他の多くの言語で内部的に利用されている。 ヒープを割り当てる方法はいくつかあるが、このmallocがもっともメジャーといえるだろう。 mallocを再実装した 今回はmallocを自分で再実装してちょっと早くした話を書く。 再実装した理由は色々あるが最も大きな理由はただの好奇心。 yatscというtypescriptのコンパイラをC++で書こうと思って実装を始めたときに作った。 ただしyatsc自体は未完で
この前、Twitterで誰かが「コンパイラ言語でFizzbuzz書くなら、コンパイル時に全ての演算を済ませ、実行コストはI/O命令1個になるように最適化しないと」という話をしていた。いいこと言うな、と思ってスルーしていたのだが、体調不良で頭だけ動いている状態だったのでC++11でトライしてみることに。 案ずるより産むが易しというもので、割と簡単に綺麗に書けた。こんな感じ。 char配列を可変長のテンプレート引数として結合していって、文字列定数を生成するというテクニックは実際に使い所があるかもと思った。最近C++書いてないけど。 #include <cstdio> template <typename LHS, int N> struct numstr { template <char... Args> struct append { typedef typename numstr<LHS,
はじめに bashには次の2つの理由によって、組み込みコマンド(builtin command)というものが存在します。 スクリプトの高速化のため。組み込みコマンドであれば通常のコマンドを実行する場合に比べてプロセスの生成コスト(fork()/exec())が削減できる bash自身の状態を変更させるため。例えばcdコマンドを/bin/cdとして用意してbashから当該コマンドを実行しても、当該コマンドのpwdが変更されるだけで、bashのそれは変更されないため、意味がない 今回は前者に焦点を合わせて、その効果と、組み込みコマンドの自作方法について述べます。 予備知識: 組込みコマンドによるスクリプト高速化の効果 組込みコマンドそのものの存在、及びその存在意義について既にご存知のかたは、この節を飛ばしてもらって構いません。 例えば皆さんがbashスクリプトからechoコマンドを実行した場合
JJUG CCC 2016 fall のセッションスライドです。 アップロード用に追記あり。Read less
今月上旬にPHP開発者の一人Andrea Fauldsさんが以下のツイートをしていました。 PHP is a very beginner-friendly language, hello world is as easy as <?="{K]X^\31\31EYG_Q\31"^"".M_PI;— Andrea! (@notajf) 9 October 2016 このtweetに含まれる、 <?="{K]X^\31\31EYG_Q\31"^"".M_PI; と記述されたファイルをPHPで実行すると、 Hello, world! とプログラムの初歩で有名な一節が出力されます。3v4lでの実行結果 もちろんAndreaさんが言ってるvery beginner-friendly languageというのは冗談だと思いますが、 私も「あー^ (ハット)が2つあるのが紛らわしいけどまあちょっと難読な"
記事中に間違いがありました。数倍も速くはなりませんでした。確か 1.0X ~ 1.1 倍程度の高速化は得られましたがびっくりするほどの物ではありませんでした。すみません。 そろそろ Go1.7 がリリースされるそうですが、皆さん如何お過ごしですか。Go 界隈の波平こと mattn ですこんにちわ。バカモー(略 Go1.7 ではコンパイラの最適化が行われ、ビルド速度がかなり短縮される様になりました。毎日ビルドしてる僕としては非常に嬉しい機能改善ですね。 さてとてもキャッチ―なタイトルで釣ってしまった訳ですが、気にしたら負けなのでどんどん話を進めます。 var t [256]byte func f(b *[16]byte) { for i, v := range b { b[i] = t[v] } } 例えばこのコードを見て下さい。このコードはココから拝借しました。issue の内容はスコー
読み終わった。たった100Pにプログラム言語を作るための基礎(字句解析、構文解析、ランタイム、インタプリタ、仮想マシン、ネイティブコンパイルまで!)が一通り学べ、さらに本書で作った実際に動くプログラミング言語がついてくる。 $39.99 とちょっと高いがプログラム言語を作る勉強代だと考えれば最も安くそして早く(ドラゴンブックは1090P)学べるのではないだろうか。洋書なのが難点だが半分くらいはソースコードなので苦労しながらなんとかなりました。(日本語訳出てほしいなぁ) 書籍内で作る言語は2種類で Awesome Rubyの構文にPythonのインデントブロックを混ぜ合わせたようなオブジェクト型 Mio Ioを参考にしたメッセージ型 言語自体はどちらもRubyで書かれているが紹介される概念は特に言語の制約を受けないものが多い。 よかったところ yaccやbison, JVM系の構文解析ツール
このほど、「antirez / kilo|GitHub」において、Salvatore Sanfilippo氏によってC言語を使い1000行以下のソースコードで開発されたエディタ「Kilo」が公開された。2条項BSDライセンスの下でオープンソース・ソフトウェアとして公開されている。ほかのライブラリに依存することなく開発されており、作業を始めてから数時間ほどで開発されたと説明がある。C言語による学習素材やエディタ開発のベースソースコードとして利用できる。 Kiloはclocを使ったカウントでコメントや空行を除いた行数が956行とされており、1000行を下回っている。開発にはcursesライブラリといった基本的なライブラリも使われておらず、VT100の基本的なエスケープシーケンスを使って開発されている。エディタにおける保存や終了といった操作には次のキーが割り当てられている。 Ctrl-S 保存
良くあるダメなエラーメッセージ エラーが起きたときは、以下のようにエラーメッセージをどこかしらに出力すると思います。 $c->log->error('something wrong!'); ただ、このエラーメッセージって、実際に発生したときには意味がわからないことが多いのです。 $c->log->error('error!'); 本気でこういう「error!」とだけ吐くメッセージだと、エラーが起きたことしか伝わってきません。程度の差はあれ意味のわからないエラーメッセージはこの世にあふれているかと思います。 機械的なエラー情報 そういうわけで、たいていは Exception クラスや Logger クラスで多くの補助が受けられるようになっていると思います。 発生時刻 発生場所 stack trace 変数の状態 ただ、このような機械的な情報だけだと、結局、運用上は対応が難しい場面ってのが多か
やねうら王 定跡フォーマット2016ではsfen文字列とそれに対応する(その局面での定跡となる)指し手をずらずらと書くようになっているのですが、sfen文字列は、一意に定まらないということをすっかり忘れていました。 SFENで先手の持ち駒が角金歩のときの表記。 BGP : ShogiGUI, 局面ペディア PGB : Blunder.Converter PBG : やねうら王定跡フォーマット2016 — merom686 (@merom686) July 14, 2016 というのも、手駒の出力順まではsfen文字列の仕様として規定されていないからです。すでにいくつかのソフトで違いがあるようです。価値の低い駒の順(歩、香、桂、銀、金、角、飛)に並べるのが普通の感覚だと思うんですけど(Bulnder.Converter)、そうでないソフトも結構あります。USIプロトコルの仕様の説明では駒の価
こんにちは。 本日whotwiに、ツイートを分析し、よく使うことばを分析・グラフィカルに表示する機能をリリースしました。 こんな感じでツイートによく含まれるワードをワードクラウド風に表示します。 試しに企業のTwitterアカウントの中の人運営で有名なタニタさんのアカウントの結果で表示してみましょう。 こんな感じになります。 タニタさんのアカウントの特徴的な言葉が大きく表示され、数回しか言っていないようなものも小さな文字で周囲に表示されています。また「おはよう」などの回数は多いが一般的な語はやや小さめに表示されています。 whotwiは、アカウントの特徴を調べるツールなので、このようにできるだけ人と違う部分が際立って見えるように、また、意味のある語だけが出るように微調整を行いました。 使ったもの ワードクラウドの処理としては、形態素解析でテキストを単語に分けて、出現回数の多いものから表示す
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く