おなじみのすべてに歴史の場所があります

先月、私は2つの歴史的な質問を調査しました。もともとはツイッターにスレッドとして投稿していましたが、今は記事として複製しています。





vimがhjklを使用する理由

質問:vimがナビゲーションに矢印ではなくhjklを使用するのはなぜですか?





典型的な説明:指がホームローから離れないようにするため。





歴史的説明:ビル・ジョイは、個々の矢印キーがないADM-3Aビデオ端末でviを開発しました。ADMキーボードを見ると、hjklキーに矢印があります。Joyはviにも同じロジックを使用し、後でVimにも同じロジックを使用しました。





ADMキーボード
ADMキーボード

さらに歴史的な説明:実際、ADMでhjklが矢印に使用されていたのは奇妙です。なぜこれらの文字なのか?





これには大きな理由があります。ASCII文字テーブルの1967バージョンを見てください。





7 . 32 — " ", , -. , QWERTY-, , . "" , . . , "backspace", ctrl+H ( ^H). 100 1000 000 1000. , , ^J.





ADM, , "backspace" ADM " " . ^H ^J "" "", ^K ^L "" "". ADM hjkl , vi.





JavaScript

: JavaScript' date API 0-11, 1-12. ?





: . , . , date.GetMonth() .





: Java, , , C.





: C ? , C, , ?





tm_date



ANSI C89, . C , Unix-. Unix, , <ctime.c>



C , .





#define SEC   0
#define MIN   1
#define HOUR  2
#define MDAY  3
#define MON   4
#define YEAR  5
#define WDAY  6
#define YDAY  7
#define ISDAY 8

      
      



ctime -- (SMH), HMS. , , . Unix 5 , :





int *t;
{
    register char *cp, *ncp;
    register int *tp;
  
    cp = cbuf;
    for (ncp = &quot;Day Mon 00 00:00:00 1900\\n&quot;; *cp++ = *ncp++;);
    ncp = &amp;&quot;SunMonTueWedThuFriSat&quot;[3*t[6]];
    cp = cbuf;
    *cp++ = *ncp++;
    *cp++ = *ncp++;
    *cp++ = *ncp++;
    cp++;
    tp = &amp;t[4];
    ncp = &amp;&quot;JanFebMarAprMayJunJulAugSepOctNovDec&quot;[(*tp)*3]; // (a)
    *cp++ = *ncp++;
    *cp++ = *ncp++;
    *cp++ = *ncp++;
    cp = numb(cp, *--tp); // (b)
    cp = numb(cp, *--tp+100); // (c)
    cp = numb(cp, *--tp+100);
    cp = numb(cp, *--tp+100);
    cp =+ 2;
    cp = numb(cp, t[YEAR]);
    return(cbuf);
}
      
      



. (a). , , , , . , (b) HMS (c), . SMH ( ). , , , .





, . , Unix PDP-7. 1970- . , , 10% RAM!





, CPU, — , , . , , (b), .





: MDAY ( ) , YDAY ( ) — . " ": . ( ).





. , "" . hjkl, , ASCII- . tm_date, Unix, , , . — . , .





. , . , - , , - . , , "", , . , , , " ". , , "" .





. , — . , , , , . , ADM-3A, . , .





. , , , . , , , , . .








All Articles