Created
December 27, 2012 15:11
-
-
Save fkztw/4388993 to your computer and use it in GitHub Desktop.
20121227-jserv-talk in NCTU
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
C 語言的末日 (UNIX 的末日?) | |
2038年 | |
1970年開始 到 2038年的時候 time_t 會 overflow | |
Myth | |
NULL == 0 ? | |
null pointer | |
type is (void*) | |
sizeof() | |
sizeof('J') sizeof(char) | |
in c 4 1 | |
in cpp 1 1 | |
c 原本是沒有 void 這個型態的 | |
在 C89 才出現 | |
int islower(int c) | |
會根據不同的語系,字母的值會不一樣 | |
EOF | |
最新是被定義成 -1, 但比較老式C的值定義會不一樣 | |
/usr/include/ctypes.h | |
定義了 char 的範圍 | |
memset | |
C語言很好移植? 你錯了 | |
注意 Alignment | |
signchar.c | |
在 arm 上,char 預設是 unsigned | |
C Reviews | |
High-level assembly | |
WYSIWYG //what you see is what you get | |
Bell Lab 有把 C 的組譯器和編譯器的 source code 釋出 | |
想把 C 語言學好,最好搭配作業系統一起學 | |
因為 C 語言本來就是拿來寫作業系統的語言 | |
推薦閱讀 | |
Dave Thomas - Code Reading | |
(敏捷開發大師) | |
反璞歸真-UNIX技術內幕 | |
A Quarter Century of UNIX | |
電的旅程 //Bell Lab | |
浪潮之巔 | |
The Power of Abstraction Dr.Babara //奠定物件導向和 type model | |
1st system (CTSS) | |
分時作業系統 | |
EX: 登月機具 - Youtube | |
由 MIT 開發 | |
編程: 因為登月計劃的程式是用銅線穿過磁心,一針一線編出來的 | |
當時是請紡織廠的女工幫忙製作, | |
有穿過磁心代表 1 。沒穿過磁心代表 0 。 | |
2nd system(Multics) | |
第1版使用 組語 寫的 | |
後來才開始使用 PL/I 寫出來 | |
想做到 CTSS 沒做到的事,可是失敗了 | |
由 MIT, GE, Bell Labs 共同開發 | |
採用 PL/I 這個Language | |
3rd system(UNIX) | |
The UNIX Time Sharing System | |
第一代的 UNIX 是用組語寫的 | |
第三代才用 C 重寫過 | |
早期為了要做科學運算所以有 18bits, 36bits, 12bits 的電腦 | |
第1台電腦為了科學運算 所以是 Decimal | |
後來 馮紐曼架構 加入後才變成 binary | |
名人 | |
Grace Hopper 奠定編譯器技術的先鋒 | |
Dennis M. Ritchie (dmr) | |
Keep it simple and stupid | |
B語言 | |
B語言的前身是 BCPL (用來撰寫其他程式的 compiler) | |
BCPL 的前身是CPL | |
B 語言太難懂 而且不適合用來撰寫 compiler | |
CPL --> BCPL --> B --> newB --> C | |
原始C語言 vs ANSI C | |
+=, -=, /= 記為 =+, =-, =/。 中間只要有不該有的空白就很容易發生悲劇 | |
以前沒有 long 這個型態,必須用兩個 16bits 的變數去表示一個 32bits 的變數 | |
原始 C 語言的型態比較鬆散, ANSI C 是個強制型態的語言 | |
在原始C語言中 -> 代表位移 | |
C語言的記憶體配置 | |
text | |
data | |
bss | |
stack | |
tty | |
teletyper 可以修改 | |
papertyper 無法修改 | |
Linux 的物件導向觀念 | |
LXDE 和 awesome 都是用 C 開發的 | |
最早的 C 語言開發是為了系統 | |
後來為了通用的特性加入許多東西 ex: 多國語系 | |
在開發作業系統的過程中也修正一些特性 | |
stdlib.h 裏面沒有 swap 是因為 C 語言實作不出有效率的 swap | |
但是 stdlib 裏面有 qsort |
因為 PDP-7 硬體的限制,無法開發有效的 B 語言編譯器,所以 Ken Thompson 只在 UNIX 第一版運作 B 語言解譯器,爾後切換到 PDP-11 硬體時,Dennis Ritchie 則設計 New B 語言,最後成為 C 語言並提供編譯器。
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
登月機具:導航系統 -- http://www.youtube.com/watch?v=INO_3daAFtY