トップ «前の日記(2006-09-07) 最新 次の日記(2006-09-09)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2006-09-08

_ SYNSYNACKEOT

LANの上にいきなり載るわけでもなく、TCPの上位にくるプロトコルに、なぜSYNだのACKだのEOTだのがいるのだろうか?

TCPで、ACKとかEOTとかやりとりするジグザグチャート見ると、ネイグルのアルゴリズムをどう考えているのかと(あるいは考えてないのか。というか、今も考える必要あるのかというのもあったり)。

多分、1バイトづつ読んで状態遷移表を引くんだろうな。

と、RS232Cに乗せるデータをそのままソケットに乗せたようなプロトコルを見て考えた。(でも、CRCとか付いてないんだよなこれが)

_ 今日の名言

おもしろかったので無断引用。
ruby-dev初めて読んだけど,アツいですね。
ruby-listには登場しない男たちのドラマがそこにはある感じです :-D
今nil.to_sの議論読んでます
確かにドラマかも。男たちの戦いの歌がそこにはあるのかもとか。まで言ったり。
僕はnil.to_sは、
string s = null;
System.out.WriteLine(s); or System.Console.WriteLine(s);
と同じ振る舞いでもいいかなと思わないでもない。
でも、あっちはnull.ToString()してるわけじゃないからな……

_ ステレオタイプ

タグ付けって、ステレオタイプのことなのか?

_ C#2.0 ジェネリック、反復子

わからん。次のはOK。
using System;
using System.Collections;
 
public class Enumerable : IEnumerable
{
    int[] data;
    Enumerable(int[] ary)
    {
        data = (int[])ary.Clone();
    }
    public IEnumerator GetEnumerator()
    {
        for (int i = 0; i < data.Length; i++)
        {
            yield return data[i];
        }
    }
    public static void Main()
    {
        Enumerable e = new Enumerable(new int[] {1, 2, 3, 4, 5});
        foreach (int x in e)
        {
            Console.WriteLine(x);
        }
    }
}
コンパイルも通るし、実行できる。あたりまえだけど。
しかしだ。
using System;
using System.Collections.Generic;
 
public class Enumerable : IEnumerable<int>
{
    int[] data;
    Enumerable(int[] ary)
    {
        data = (int[])ary.Clone();
    }
    public IEnumerator<int> GetEnumerator()
    {
        for (int i = 0; i < data.Length; i++)
        {
            yield return data[i];
        }
    }
    public static void Main()
    {
        Enumerable e = new Enumerable(new int[] {1, 2, 3, 4, 5});
        foreach (int x in e)
        {
            Console.WriteLine(x);
        }
    }
}
をコンパイルすると
enum.cs(4,14): error CS0536: 'Enumerable' はインターフェイス メンバ 'System.Collections.IEnumerable.GetEnumerator() を実装しません。'Enumerable.GetEnumerator()' が public ではなく、static になっているか、または戻り値の型が正しくありません。
c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll: (以前のエラーに関連するシンボルの位置)
enum.cs(11,29): (以前のエラーに関連するシンボルの位置)
となる。これって、反復子とジェネリックは食い合わせられないということ? それとも僕の書き方が何か間違っている?
追記:試行錯誤の結果できたけど、なんだこりゃ?
using System;
using System.Collections.Generic;
 
public class Enumerable : IEnumerable<int>
{
    int[] data;
    Enumerable(int[] ary)
    {
        data = (int[])ary.Clone();
    }
    IEnumerator<int> IEnumerable<int>.GetEnumerator()
    {
        for (int i = 0; i < data.Length; i++)
        {
            yield return data[i];
        }
    }
    public System.Collections.IEnumerator GetEnumerator()
    {
        return ((IEnumerable<int>)this).GetEnumerator();
    }
    public static void Main()
    {
        Enumerable e = new Enumerable(new int[] {1, 2, 3, 4, 5});
        foreach (int x in e)
        {
            Console.WriteLine(x);
        }
    }
}
しかも、まったーく意味がない。
        foreach (string x in e) // publicがあっちなのでこう書ける
        {
            Console.WriteLine(x); // もちろんInvalidCastExceptionになる。
        }
#ジェネリッククラスを提供するのでなければ、ジェネリックIEnumerableを継承してもほとんどおいしくない。

追記:
NAgilerさんに教えてもらったけど、もう一声が足りなかった。

using System;
using System.Collections.Generic;
 
public class Enumerable : IEnumerable<int>
{
    int[] data;
    Enumerable(int[] ary)
    {
        data = (int[])ary.Clone();
    }
    public IEnumerator<int> GetEnumerator()
    {
        for (int i = 0; i < data.Length; i++)
        {
            yield return data[i];
        }
    }
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return ((IEnumerable<int>)this).GetEnumerator();
    }
    public static void Main()
    {
        Enumerable e = new Enumerable(new int[] {1, 2, 3, 4, 5});
        foreach (string x in e)
        {
            Console.WriteLine(x);
        }
    }
}
だと
Microsoft(R) Visual C# 2005 Compiler version 8.00.50727.42
for Microsoft(R) Windows(R) 2005 Framework version 2.0.50727
Copyright (C) Microsoft Corporation 2001-2005. All rights reserved.
 
ite.cs(25,9): error CS0030: 型 'int' を型 'string' に変換できません。
で、OK。インターフェイス継承したメソッドのどっちをpublicにするかは厳密に決まっているわけではなく、自分の好みで良いようだ(確かに、それはそうだな)。

2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|

ジェズイットを見習え