나는 또한 여기서 곡식에 대항하여 C에 대해 (약간 유머러스 한) 심미적 인 사례를 만들려고합니다. 어떤 사람들은 클래스 또는 포인터에 대한 의존성, 그렇지 않다는 것을 알았습니다. 나 .
TL; DR : 제 생각에는 C는 간단하고 C는 읽을 수 있으며 두드리는 비트에는 약간의 기쁨이 있습니다.
C는 간단하다
표준 C는 함수, 포인터 및 배열을 생성하는 몇 가지 기본 유형 및 메커니즘 만 정의합니다. 그 외에도, 구조체와 공용체와 같은 프리미티브에서 더 복잡한 유형을 만들기위한 적은 수의 컴포지션 구성이 있습니다. 내가 가장 많이 묘사 한 방법에 주목 의 언어를 두 문장으로 . 즉, 코딩하는 동안 너무 많은 구문 규칙과 양식을 머리에 보관할 필요가 없습니다.
단순하다 아름답다 .
C는 비전이 아니다
많은 고급 언어와는 달리 C에서 기묘하고 이해할 수없는 많은 기호를 찾기가 어려울 것입니다. C 세계에서 추상화와 "구문 압축"의 주요 기능은 의미 상 매우 간단하고 자기 설명 적 구성. 좋은 C 스타일은 거의 시적이고 읽기 쉬운 아름다움을 장려합니다. 설명을 위해 Linux 커널에서 다음 스 니펫을 읽으십시오. 기본 데이터 구조와 구현 세부 정보를 파악하지 않아도 다음을 이해할 수 있습니다.
bool kthread_freezable_should_stop(bool *was_frozen)
{
bool frozen = false;
might_sleep();
if (unlikely(freezing(current)))
frozen = __refrigerator(true);
if (was_frozen)
*was_frozen = frozen;
return kthread_should_stop();
}
기능의 중간에는 "전류가 얼지 않을 경우 냉장고에 실제로 얼지 않았는지 물어보십시오"라고 표시됩니다. Dr. Seuss는 더 잘 쓸 수 없었습니다.
읽을 수있는 것이 아름답습니다 .
C는 투명하다
C 문에 함수 호출이 포함되어 있지 않으면 일반적으로 런타임 비용과 부작용에 대한 좋은 아이디어를 얻을 수 있습니다. C는 프로그래머에게 제어권을주고 궁극적으로 올바른 일을하도록 신뢰합니다. 우리는 strlen()
GNU C 라이브러리 의 구현 에서이 (SE에 대해 약간 재구성 된) 스 니펫이 실행될 때 발생하는 상황에 대한 그림을 얻을 수 있습니다. 모든 연산자에는 잘 정의 된 의미가 있기 때문입니다. C에는 과부하가 없습니다.
for (char_ptr = str; ((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
++char_ptr)
if (*char_ptr == '\0')
return char_ptr - str;
"최적화"의 목적으로이 속성은 훌륭합니다. 아마도 일부 고급 언어는 클래스 및 오버로드가 포함 된 C ++와 같이 고급 알고리즘의 간결한 표현을 더 쉽게 만들 수 있지만 C는 휴대용 어셈블러 역할을하도록 설계되었으므로 C가 이상적입니다. 때때로, 저수준 코드가 성공적으로 실행될 때, 프로그래머는 어떤 의미에서 기계와 하나를 느낄 수도 있습니다 (또는 0-구현 세부 사항 임). 이것은 다른 언어가 나쁘거나 "젠"이 아니거나 그런 어리석은 말이 아니며, IMO C가 많은 다른 언어가 선택하지 않은 방식으로 여러 가지 유효한 이유로 흥미로울 수 있다는 것입니다.
필자가 생각하기에 위에서 제시 한 세 가지 사항은 리눅스로 구현 된 복잡하지만 효율적인 시스템의 생성을 관리 할 수있게한다. 나는이 세상이 나의 미적 감수성에 호소한다는 사실을 알게되었고, C를 그의 다음 목표로 생각하는 사람들에게 이러한 점들을 고려할 것을 권합니다. 나는 성공적인 프로그래머가되기 위해 커널을 이해할 필요가 없기 때문에 운영 체제와 그 밖의 것에 대한 주장이 명시 적으로 더 잘 뒷받침된다고 생각합니다.