5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Tiny Code の紹介

Last updated at Posted at 2019-07-13

本稿は、2019 年 4 月 19 日に開催された JAGA #68 で発表した「文化としてのプログラミング: tiny code の紹介」のスライドを元に、Qiita 用の原稿として編集したものです。

image.png image.png

Tiny Code とは?

 定義などは特にありません。Reddit で tinycode と検索すると、tiny code を取り巻く雰囲気は分かるのではないかと思います。https://www.reddit.com/r/tinycode/

以下、つらつらと。

Web server in C

Web server in 58 lines of C

 Linux で動作するもののようです。ダイナミックライブラリによるコンテンツを表示させています。

A tiny web server in C

 こちらも Linux で動作するもののようです。

CG (レンダラ)

 グローバルイルミネーションを 99 行の C++ で実現しています。コードは小さいですが、ノイズの少ない綺麗な画像を生成するためには、それなりの時間が必要です。

image.png
※ 上記の画像ですが、サンプル数は 1 ピクセルあたり 200 で画像生成しました。

ゲーム

名刺に印刷できるゲームプログラム

 名刺にプログラムを印刷するという、なかなか洒落たことをなされているようです。

image.png

Ski ゲームとか FPS などを作っていらっしゃるようです。

Ski ゲーム
image.png

こちらは FPS だそうです。
image.png

7 行オセロ

 2ch(現在は 5ch)の「七行プログラミング」スレッドより、7行オセロ。コンピュータの思考ルーチン込。これもスゴイです。

image.png

拙作ですが、先手後手を選択可能にした改造版を作ってみました:
image.png
https://qiita.com/iigura/items/c0259b1b93b3b7ed06f5

Tiny Code な言語処理系

「リハビリがてらにlis.pyをlis.rbに書き直してみた」

「((Pythonで) 書く (Lisp) インタプリタ)」

 上のページでも紹介されていますが、「コメントや空行を除くと90行で、ソースコードは4Kバイト以下だ」そうです。

さらなる改良版「((Pythonで) 書く ((さらに良い) Lisp) インタプリタ)」

  • 新しいデータ型 - 文字列、論理型、複素数、ポート
  • 新しい構文 - 文字列、コメント、クォート、#リテラル
  • マクロ - ユーザ定義、ならびに組み込みの派生構文
  • 末尾再帰最適化するより良い eval
  • 継続 (call/cc)
  • 任意個の引数を持つ手続き
  • エラー検出と拡張構文、等々
  • http://www.aoky.net/articles/peter_norvig/lispy2.htm

Tiny Lua Forth – 75 行による Forth

 拙作の Forth 処理系。Lua で記述しております。

  • 内部インタプリタ:いわゆる VM(=Virtual Machine) は 6 行
  • 外部インタプリタ:一般的な言語でいうところのインタプリタは 32 行
  • 辞書:ライブラリ(言語システムを構成するもの含む)は 28 行
  • REPL – 9 行
  • https://qiita.com/iigura/items/a9b0fff73f7f9639ca3c

tinyc

 Marc Feeley による C。lexer+parser+code generator+VM で 291 行だそうです。

ミニ C インタプリタ

IOCCC

 IOCCC とは、The International Obfuscated C Code Contest のことで。国際難読化 C コードコンテストなどと呼ばれています。たった 28 行で記述された、vi 風エディタ Anthony's Editor などの名作が、このコンテストにより世に広まっています( https://github.com/SirWumpus/ioccc-ae/tree/master/91 )。

なお、このコードを読みやすく普通に書くと 360 行になるそうです。現代風に書くと 120 行でまとめることができます( https://qiita.com/iigura/items/678aca225956272bdc10 )。

メガデモ - intro 系

 4キロバイトでどこまでできるのかを競うものだそうです。4K intro。ちょっと信じがたいですが、YouTube にありましたので、紹介。

最後に

 計算機の進歩とともにプログラムサイズは肥大の一途をたどっております。しかし、小さなコードでもここまでできるんだ、と思うと中々感慨深いものがあります。また、長いプログラムよりも短いプログラムの方が読みやすく理解もし易いため、学習に役立てるのではないか?とも思います。

 とはいえ、コードゴルフ的になってしまうと、高機能は言語を使えばコードは短くなります。また、デモ系のように超絶技巧を駆使し、極限まで圧縮したコードは職人の技の競演という面白さはありますが、初学者のための教材には向いていない気もします。

 文化としてのプログラミング Tiny Code - という概念については、このあたりの整理が必要なんだろうなぁ、と漠然と思いつつ本稿を終わります。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?