タグ

2017年10月12日のブックマーク (8件)

  • 型クラスの歴史を軽くひも解く - Qiita

    現在、型クラスは Haskell のみならず、様々な言語で実装されたり似たようなものが実装されている言語機能です。 そういった風潮にも拘わらず、型クラスはどうにも大仰に捉えられがちに感じます。勿論、Haskell でも当初の仕様に比べると、最新の仕様はややこしいし、GHC の拡張や他機能と組み合わせるともっとややこしいのは事実ですが。 ということで、型クラスとはそもそもどういう motivation で発明、導入されたのか、簡単に調べてみます。 Haskell の型クラスは 1992 年の Haskell 1.2 で導入されました。1.2 のレポートに以下のような記述があるので間違ってないはず(他の言語でより早く実装されてるかもしれないけどそこまで調べてると時間なくなるので見ないふりをする。)。 Haskell is a large and complex language. design

    型クラスの歴史を軽くひも解く - Qiita
  • C言語でインクルードするだけで使えるNon-movingで正確なコピーGCを作った - Qiita

    インクルードするだけで使えるNon-movingで正確なGCをC言語用に作りました。 行数がコメントを除いて100行に満たない非常に小さなライブラリです。 GCのアルゴリズムとしてはCheneyのコピーGCを採用しています。 通常のCheneyのコピーGCではメモリ空間のうち半分が無駄になってしまいメモリ効率が悪かったり、 GC発生時にオブジェクトが移動してしまいC言語のようなポインタを直接触れる言語との相性が悪いという欠点がありました。 今回はヒープ全体を二重連結リストとして管理することでそのような問題を解決しています。 ちなみにこれはTreadmill GCのアイデアと同じです。(が、アルゴリズム自体はTreadmill GCではありません。) APILinuxのlist.hに非常に近い見た目になっています。 ある構造体をgcで管理したい場合はstruct gc_head型のメンバを

    C言語でインクルードするだけで使えるNon-movingで正確なコピーGCを作った - Qiita
    xef
    xef 2017/10/12
  • 差分検出アルゴリズム三種盛り - Object.create(null)

    こんばんは. 気がつけばもうずいぶんと涼しくなってきました. 勢い余って凍ってしまったりせぬよう, くれぐれも普段の言動にはお気をつけください. はじめに さて, 我々人類にはどうしても二つの文字列 (あるいは行ごとに区切られたテキスト) 間の差分を求めなければいけない瞬間が発生します. 先人たちはそういった時のために diff のようなツールを開発し, それを利用することで文明はめざましい発展を遂げてきました. しかしながら, 使用するアルゴリズムを比較検討したい場合, 「差分」の定義を変えるなどして既存のアルゴリズムに変更を加えたい場合, diff のない異世界に飛ばされて自分で実装しなければいけない時などにおいては, 差分検出アルゴリズムについての理解が必要不可欠です. というわけで, この記事では文字列間の差分検出とは何かということと, 差分を求める三種類のアルゴリズムの紹介・解説

    差分検出アルゴリズム三種盛り - Object.create(null)
  • The Absurdly Underestimated Dangers of CSV Injection

    I’ve been doing the local usergroup circuit with this lately and have been asked to write it up. In some ways this is old news, but in other ways…well, I think few realize how absolutely devastating and omnipresent this vulnerability can be. It is an attack vector available in every application I’ve ever seen that takes user input and allows administrators to bulk export to CSV. That is just about

  • Hands-on Introduction to Extensible-Effects

    Extensible Effects: understanding them, implementing them, using them. A Tutorial Effects is a model of side-effects as an interaction between a program and a handler, which is an authority in charge of resources that receives and acts on program requests. Effects let us represent side-effects in pure computations. The explicitness about possible and not possible side-effects, the localized handli

  • A Little Story About the `yes` Unix Command | Matthias Endler

    What's the simplest Unix command you know? There's echo, which prints a string to stdout and true, which always terminates with an exit code of 0. Among the series of simple Unix commands, there's also yes. If you execute it without arguments, you get an infinite stream of y's, separated by a newline: y y y y (...you get the idea) What seems to be pointless in the beginning turns out to be pretty

    A Little Story About the `yes` Unix Command | Matthias Endler
  • Exploding Git Repositories – Kate Murphy

    Exploding Git Repositories If you are an adventurous sort (and can handle a potential reboot) I invite you to clone this tiny repo: Were you able to clone it? Unless you have quite a lot of memory (both RAM and storage) git was killed, ran out of memory, or you had to reboot. Why is this? It is a perfectly formed repo made of only 12 objects. How does a tiny repo cause git to run out of memory? Th

    Exploding Git Repositories – Kate Murphy
    xef
    xef 2017/10/12
  • 初期化配列の実装 - Qiita

    こんにちは、最近ハマっている初期化配列について紹介したいと思います。 はじめに 皆さんプログラミングをする時に配列を使ってますか?使ってない人はほとんどいないのではないでしょうか? 長さNの固定長配列AはN個の要素を格納でき、かつ任意の位置に保存された要素A[i]を最悪定数時間(以下、定数時間)で読み書き可能な最も基的なデータ構造の一つです。配列の様々な操作の中で読み書きについで頻出する重要な操作が、配列の全ての要素を指定した値に書き換える初期化操作です。配列の初期化は配列長に対して線形な時間がかかるため、配列長が長い場合や、初期化が頻出する処理では配列の初期化操作が大きなボトルネックとなります。この問題を解決するデータ構造が初期化配列です。記事ではシンプルな初期化配列の実装法、folkloreアルゴリズムを紹介したいと思います。 初期化配列とは通常の読み書きに加え、配列の全ての要素を

    初期化配列の実装 - Qiita