memo.xight.org

日々のメモ

カテゴリ : プログラミング

1ページ目 / 全2ページ

読みにくいソースコード

C言語

http://www0.us.ioccc.org/1988/westley.c
http://www0.us.ioccc.org/2000/bmeyer.c
http://www0.us.ioccc.org/2000/dhyang.c

Malbolgeによるプログラム (99 Bottles of Beer | Language Malbolge)

http://www.99-bottles-of-beer.net/language-malbolge-995.html

Whitespace によるプログラム

http://compsoc.dur.ac.uk/whitespace/hworld.ws

追記 [2006-09-19]

swk's log - 2006-09-16 - 読みにくいソースコード
http://www.kagami.org/diary/2006-09-16-1.html

ioccc - 1987 - korn.c
http://www0.us.ioccc.org/1987/korn.c

Reference

The International Obfuscated C Code Contest
http://www0.us.ioccc.org/main.html

ロベールの小部屋 - 最凶言語 Malbolge
http://d.hatena.ne.jp/Robe/20060824

Wikipedia - Chef_programming_language
Wikipedia - Shakespeare_programming_language
Wikipedia - Malbolge

via

スラッシュドット ジャパン | おすすめのソースは?
http://slashdot.jp/askslashdot/article.pl?sid=06/09/03/0721254

プログラミング・コンテストなど

Valladolid Programming Contest Problem Set

  http://online-judge.uva.es/problemset/
  スペインのValladolid(バリャドリード)大学が提供するOnline Judge.
  問題を解いてプログラムをメールで送るとプログラムが正しいかどうか判定して返してくれる.

Valladolid Online Judge - Contest Hosting Service

  http://acm.uva.es/contest/
  スペインのValladolid(バリャドリード)大学が提供するプログラミングコンテスト.

Ural State University Problem Set

  http://acm.timus.ru/

Ural State University Contest

  http://acm.timus.ru/contest.aspx

International Problem Solving Contest

  http://ipsc.ksp.sk/

参考になる本

本: アルゴリズムC++
本: C言語による最新アルゴリズム事典

Reference

  京都大学 情報学研究科 通信情報システム専攻 - 論理回路分野 (岩間研究室) - Hiroki YANAGISAWA - ACM/ICPC対策室 - Topics - 練習
  http://www.lab2.kuis.kyoto-u.ac.jp/~yanagis/acmicpc/topic/practice.html
  はてなダイアリー - 純粋関数型雑記帳
  http://d.hatena.ne.jp/tanakh/
  Rubyist Magazine - 0003号 - ウバベストシーズン
  http://jp.rubyist.net/magazine/?0003-uva

プログラムの難読化

オーバーロード誘導 (Overload Induction)

  可能な限り多くのメソッドに対しオーバーロードを誘導.
  難読化,最適化,サイズ縮小に効果を発揮.
  

Reference

  mixiコミュニティ - プログラムの難読化
  http://mixi.jp/view_community.pl?id=103670
  AG-TECH - オーバーロード誘導 (Overload Induction)
  http://www.agtech.co.jp/products/preemptive/dasho/overload_induction.html

Viscuit - ビスケット

Summary

  絵を動かすために,絵でプログラムを作るツール
  絵でプログラムを表現するので,難しいことを覚えなくてもプログラミングの楽しさが分かる.

Reference

  ビジュアルプログラム言語 Visucuit
  http://www.viscuit.com/
  VistuitWiki
  http://yami.viscuit.com/

via

  たまにっき。 - 2005-01-12 - ビジュアルプログラム言語 Viscuit
  http://www.oikaze.com/~tamada/Diary/2005-01-12.html#2005-01-12-6

プログラミングテクニック—UNIXコマンドのソースコードにみる実践プログラミング手法 UNIX MAGAZINE COLLECTION

Summary

Amazon - 本: プログラミングテクニック—UNIXコマンドのソースコードにみる実践プログラミング手法 UNIX MAGAZINE COLLECTION

Reference

本: プログラミングテクニック—UNIXコマンドのソースコードにみる実践プログラミング手法 UNIX MAGAZINE COLLECTION

via

  TokuLog! - 2004-01-21
  http://tokuhirom.dnsalias.org/~tokuhirom/cl/2004-01-21-3.html

Groovy

Summary

  Java の文法と機能をベースとしたスクリプト言語.

特徴

  コンパイルが不要
  動的な型付けが可能
  文法上の制限を緩和
  通常のJavaアプリケーション内でGroovyスクリプトを実行可能
  シェルインタプリタを提供

Reference

  Groovy
  http://groovy.codehaus.org/
  @IT - Java Solution - Groovyに触ってみよう
  http://www.atmarkit.co.jp/fjava/rensai3/devworks05/devworks05_1.html

Brainf*ck

Summary

  プログラミング言語の一つ.
  Urban Mullerがコンパイラがなるべく小さくなる言語として考案した.
  実行可能な命令は8つのみ.

言語仕様

> ポインタをインクリメントする.
< ポインタをデクリメントする.
+ ポインタが指す値をインクリメントする.

ポインタが指す値をデクリメントする.

. ポインタが指す値を出力する.
, 1バイトを入力してポインタが指す値に代入する.
[ ポインタが指す値が0なら、対応する ] までジャンプする.
] ポインタが指す値が0でないなら、対応する [ にジャンプする.

- Brainf*ckでHello world

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

Brainf*ckでHello world その2

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]++++++++++.

Reference

Wikipedia - Brainfuck
Wikipedia - Hello World - Brainfuckでの例
  http://ja.wikipedia.org/wiki/Hello_world#Brainfuck.E3.81.A7.E3.81.AE.E4.BE.8B
  kMonos.NET - いろんなげんご @ 人工言語世界 - Brainf*ck
  http://www.kmonos.net/alang/etc/brainfuck.php

via

  TokuLog! - 2004-10-15
  http://tokuhirom.dnsalias.org/~tokuhirom/cl/2004-10-15.html#2004-10-15-4

なでしこ

Summary

  日本語プログラム言語「ひまわり」の後継

改善点

  ・句読点による区切りが不要に
  ・オブジェクト指向っぽいことができる
  ・インデントによる構造化プログラミング
  ・配布実行ファイルのサイズ大幅減
  ・実行速度が10倍以上高速に

Reference

  日本語プログラム言語「ひまわり」
  http://hima.chu.jp/
  日本語プログラム言語「なでしこ」
  http://nadesi.com/

via

  窓の杜 - 2004-10-14
  http://www.forest.impress.co.jp/article/2004/10/14/nadesiko.html

HSP - Hot Soup Processor

Summary

  Windows9x/NT/2000/XP対応のインタプリタ言語

O2とは

  個人では開発が難しかったオンラインソフトのためのロビー,マッチング,ユーザ認証を代行するシステム
  HSPと連携させることでオンラインソフトを容易に作成可能.

Reference

  Onion Software - Hot Soup Processor
  http://www.onionsoft.net/hsp/
  Onion Software O2
  http://o2.zener.co.jp/

バグとの付き合い方

Summary

・バグは無くならない
・バグを生んだ他人を責めない
・バグを生んでも,見つけてすぐに直せばいい
・バグを見つけやすいように色々な方策を講じよう

  ほとんどのバグはAPIの仕様の理解不足から生じる.
  (ココでのAPIとは「自分以外の人が作ったモノ全て」)

APIの例

・OSのシステムコール
・低レベルなライブラリ(libcなど)
・X Window Systemライブラリ(Xlib, Xt)
・GNOMEライブラリ(glib, GDK, GTK+, gnome-lib, etc.)
・Win32 API,(Windows)COM
・libapr, libapr-util


回避策

・マニュアルを良く読む
・馴染みが薄いAPIの場合,そのAPIの動作だけを確認する小さなコードを書く
・自分の書くコードでは,assert(3)で条件を明示する
・自分の書くコードでは,外部に見せる関数(モジュール境界)に極度に気を使う
  ・公開ヘッダにきちんとコメントをつける
  ・公開ヘッダは保守的にする(仕様はあまり変えず,公開部分も最小限にする)


抜本的な解決策

・言語仕様から見直す (ポインタの無い言語にする,など)
・他人の作ったAPIは使わない
・枯れて良く知っている環境に安住して,そこから離れない(POSIXの環境から離れない,など)


具体的な例

・そのネットワークAPIはブロックするのかしないのか?
・そのAPIはスレッドセーフか否か?
・APIが返すメモリの所有者は?
・APIに渡すメモリの所有者は?
・(設計に問題があるにせよ)現実的には,呼び出し順序が意味を持つAPI群は多いので,そのコンテキスト依存性は?


Reference

  Ariel Networks - バグとの付き合い方
  http://dev.ariel-networks.com/blog/?itemid=347
  Ariel Networks - 失敗を恐れない文化 - 産み落とした多くのバグへの鎮魂歌 -
  http://dev.ariel-networks.com/blog/?itemid=50

4th Generation Language (4GL) - 第4世代言語

4GLとは

業務に必要な簡易ツールがどうしても必要なとき,
社内にプログラマーがいれば事足りるのですが,
そうそう社内にソフト開発ができる人材がいるわけではありません.
そこで登場したのが,スクリプターと呼ばれる簡易プログラム言語です.
これならさほど難しくなく目的のツールを開発できますので,
若干の社員教育をすれば,誰もが簡単にちょっとしたツールを
作れるようになります.
しかしプログラム業界は既にオブジェクト指向やVisual的な開発環境が
主流になって複雑化しており,従来のプログラム言語やスクリプターを
さらに簡単かつ視覚的編集が行えるように進化させる必要がありました.
そこで登場したのが第4世代言語です.ウィザード形式で視覚的な
プログラミングを行うことによって生産効率を上げたものです.
極論ではありますが,マウス操作だけでツール開発を行い,
誰もが簡単に短時間で目的のツールを作成できるようにという構想でもあります.


  ゲーム製作に例えると,○○ゲームツクールなどに当てはまる.

一覧

第1世代言語 機械語
第2世代言語 アセンブリ語
第3世代言語 C言語,Fortran,COBOL,Java 等
第4世代言語 Visual Basic,Power Builder,Delphi,Natural,Uniface
- Reference
  IT用語辞典 - 第4世代言語 (4GL)
  http://e-words.jp/w/E7ACAC4E4B896E4BBA3E8A880E8AA9E.html
  真・コンピュータ用語辞典 - 4GL
  http://www.geocities.co.jp/SiliconValley/5634/t82D3_0004.html#1113
  NAVER - 知識plus - 第四世代言語(4GL)とは
  http://plus.naver.co.jp/browse/db_detail.php?dir_id=1&docid=17606
  IBM - developerWorks - Linux - これからのオープン・ソース時代におけるCOBOLの位置付け
  http://www-6.ibm.com/jp/developerworks/linux/000929/j_cobol.html
  Beacon IT - Natural
  http://www.beacon-it.co.jp/products/pro_serv/deve/natural/index.shtml
  日本コンピュウェア - Uniface
  http://www.compuware.co.jp/products/uniface/uniface.html