char*_ = "'""/*"; #include <stdio.h> #define m 21 #define o(l, k) for(l=0; l<k; l++) #define n(k) o(T, k) int E,L,O,R,G[42][m],h[2][42][m],g[3][8],c [42][42][2],f[42]; char d[42]; void v( int b,int a,int j){ printf("\33[%d;%df\33[4%d" "m ",a,b,j); } void u(){ int T,e; n(42)o( e,m)if(h[0][T][e]-h[1][T][e]){ v(e+4+e,T+2 ,h[0][T][e]+1?h[0][T][e]:0); h[1][T][e]=h[ 0][T][e]; } fflush(stdout); } void q(
#include <stdio.h> #include <math.h> #define X #define Y {} #define C } #define o { #undef main char m[500][99],v[99],R; int*a,b,n,i,j,W,A; float Q,G,D,M,T,B,O,U,V,N,y,e(); P(g,R,u)float*g,R,u;{int c;for(*g=1,c=u;c--;*g*=R);} X K(g,R,u)float*g,u;char R; o if(R=='+')*g+=u; if(R=='-')*g-=u; if(R=='*')*g*=u; if(R=='/')*g/=u; if(R=='^')P(g,*g,u); C w(g,R,u)float*g,u;char R; /**/{int b,f;A=atoi(*++a);b
C言語プログラムの独創性で競い合うプログラミングコンテスト、International Obfuscated C Code Contest(IOCCC)の全作品を日本語で紹介することを目指すサイトです。 更新履歴: 2021/12/31: IOCCC 2020の解説を公開しました。 2021/06/12: IOCCC 2019の解説を公開しました。 2021/06/06: IOCCC 2018の解説を公開しました。 2021/05/30: IOCCC 2015の解説を公開しました。 2021/05/23: IOCCC 2014の解説を公開しました。 2021/05/17: IOCCC 2013の解説を公開しました。 2021/05/08: IOCCC 2012の解説を公開しました。 2021/05/01: IOCCC 2011の解説を公開しました。 2021/04/25: IOCCC 20
マイクロカーネルは浪漫に溢れる非常に作りがいのあるソフトウェアです。この記事は,「マイクロカーネルベースのOSの一から作ってIaaSで動かす」ことを目標に作ったマイクロカーネルベースのOS Resea(りーせあ)の設計と実装について軽くまとめた物です。 ソースコードはGitHubにあります。 マイクロカーネルとは Linuxのようなモノリシックカーネルでは色んな機能がカーネル空間で動きますが,マイクロカーネルではユーザプロセスたちが互いに通信しながらOSを作り上げます。プロセス・スレッド・仮想メモリ管理,プロセス間通信,タイマーといった必要最低限の機能だけをカーネルが担います。デバイスドライバやファイルシステムといった残りの機能は,独立したユーザプロセスとして動きます。たとえデバイスドライバが暴走しても他のコンポーネントを壊すことはないのです。マイクロカーネルは信頼性が高く,疎結合で美しい
はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム この本には一冊の本に盛り込むにはやや欲張りな内容を詰め込みました。本書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 この本では、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを本書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう
最近作ってたオモチャがだいたいまとまってきました。 https://github.com/shinh/elvm 第12回 kernel/vm 勉強会で発表した時のスライド: http://shinh.skr.jp/slide/elvm/000.html これは何かというと、前作った bflisp を改良したり整理したりしたもので、 C 言語をシンプルな中間言語 (EIR) に変換する改造 8cc と、その中間言語を Brainfuck をはじめとした他言語に変換するバックエンドから成り立っています。 bflisp との差分は、 Brainfuck 以外のバックエンドを追加しやすくしたり、バックエンドを C で書いて、完全に Brainfuck だけで 8cc.bf を再現することができるようにしたり、という感じです。 特に興味深いであろうバックエンドとしては、 Brainfuck, Unl
1/27 >> First Last ELVM Compiler Infrastructure はまじしん一ろう
Unlambdaで動くCコンパイラができました。 https://github.com/irori/8cc.unl id:shinichiro_hさんのbflispで使われている改造版8ccのアセンブリ出力からUnlambdaへのトランスレータです。 これで同一のCプログラムをBrainfuckとUnlambdaの両方で動かせます。便利! ただBrainfuckと比べてもかなり重くて、8ccのセルフコンパイルをすると10GB以上のメモリを消費して37時間かかりました。整数の表現が真偽値24個のリスト(もちろん真偽値もリストも関数で表現される)で結構でかいので、メモリを大量に使うプログラムだと厳しいようです。別の整数表現も試してみたんですが遅かったので断念しました…。 Lazy K でも同じようにやればできると思います。気が向いたらそのうち。
https://github.com/shinh/bflisp/blob/master/8cc.bf Brainfuckで動くCコンパイラができました。このコンパイラ自身で同じコンパイラをコンパイルすることも可能です(ただし5時間以上かかる)。前回との差分はレジスタの幅とデータメモリ空間を24bitに広げたことと、いくつかバグをつぶしたことです。 これまでわざわざ手書きで書いていたBrainfuckのプログラムを、Cのコードから生成することでお手軽に作れるようになりました…とさ。 sizeof(int)==1 で 1byte==24bits だったりする変なアーキテクチャな上に、ビット演算とかがないですけど。
原文: Notes on Programming in C Rob Pike 1989年2月21日 Copyright (C) 2003, Lucent Technologies Inc. and others. All Rights Reserved. Lucent Public License Version 1.02 前書き KernighanとPlaugerによる“The Elements of Programming Style” (「プログラム書法」木村泉訳)は重要で影響力のある本です。この本にはそれだけの価値があります。しかし、その中の簡潔なルールが、本来意図されたような哲学の簡潔な表現としてではなく、よいスタイルのレシピとして受け取られているように私は時々感じます。この本が変数名は意味を持つようにつけられるべきだと言うなら、名前が使い方を説明するちょっとしたエッセイのような
CodeIQ中の人、millionsmileです。 CodeIQではすっかりお馴染みの問題となっている「コードゴルフ」。その元祖ともいえる本がこの度めでたく復刻となりました!!! 『ショートコーディング 職人達の技法』 執筆者は、CodeIQの出題者で人気問題をたくさんだしているOzyさんです! CodeIQの出題者ってことは・・・ そうです!この本がもらえる問題が掲載中です! 「コード美人」っていう名の問題です。 正解したらコード美人バッジがもらえるし、本がもらえるかもしれないです。 ■コード美人(受付締切:2月24日(月)AM10:00まで) https://codeiq.jp/ace/ozy4dm/q723 本の内容については、Ozyさんからの寄稿記事にてお楽しみください! ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ ショートコーディング、再び Ozyです。 2007年 本書
http://golf.shinh.org/p.rb?Hello+broken+keyboard ゴルフなんだけど、文字数じゃなくて文字種を減らす、という問題。 Hello, world! だとあまり面白くもないかな…と予想してたんだけど、予想に反してかなり楽しい問題になったようだった。 C のこの解答が謎だと言われたりしてるようなので適当に説明。 http://golf.shinh.org/reveal.rb?Hello+broken+keyboard/shinh_1346768972&c putchar とか printf とか puts 文字種増えすぎるので使ったら負けと思ってて、というわけで putchar のアドレスをそのまま使って、 ( ( int ) ( * ) ( int ) ) にキャストして使ってやればいいだろう、ってのが基本的なアイデア。ただし、 putchar のア
Hello broken keyboardがすごかったので一年半ぶりに日記を書いてみる。 というか一年半も経つとさすがにはてな記法とかほとんど忘れてますね……それはさておき。 C shinhさんの回答が凄すぎてよくわからない。 ((int(*)())(t*t*(t*t+a*a)*t*t*(t*t+a*a)*(m+a*a*a*t*t)+**(int**)(((t+t*(t+a)*a*t*t)*(t*t+a*a*(t+a*a))+a)*((t+t*a*t*t*t)*(t+t*t*t*a+a*a*a*a)+m)*t))) の部分は、計算すると ((int(*)())(294736+**(int**)134513438) ということになるようです。134513438といえば関数やグローバル変数のアドレスに割と近いですが、そこにあるポインタの指すポインタの指す値が何を意味しているのか、それに2947
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く