그렇다면 어디에서 왜 사용 하시겠습니까?
그렇지 않은 경우 C가 왜 귀하에게 허용되지 않는지 설명하십시오.
그렇다면 어디에서 왜 사용 하시겠습니까?
그렇지 않은 경우 C가 왜 귀하에게 허용되지 않는지 설명하십시오.
답변:
일부 하드웨어 드라이버를 구현 한 경우 C를 사용합니다. 자체 운영 체제 커널 또는 자체 가상 머신을 구현하는 경우 C를 사용합니다.
Windows API, Linux, Mac OS X, Solaris 등의 하드웨어 또는 저수준 OS API를 처리해야하는 경우 저수준 작업을 수행하는 것이 매우 좋은 언어입니다. 임베디드 시스템은 일반적으로 C를 잘 지원합니다. 컴파일러 + 개발 키트와 함께.
물론입니다. 성능에 중요한 시스템 또는 저수준 통신 부품을 작성하는 데 C를 사용합니다. 예를 들어 C를 사용 하여 Erlang 프로젝트에서 NIF 를 작성 하는 것은 이런 종류의 작업에 적합한 도구이기 때문입니다. 또는 Perl 프로젝트에서 유사한 부품 (XS)을 작성하는 데 C를 사용합니다.
나는 거의 매일 C를 전문적으로 사용합니다. 사실, C는 것입니다 가장 높은 I 정기적으로 프로그램하는 수준의 언어.
C를 사용하는 곳 : 가능한 한 효율적이어야하는 저수준 라이브러리 코드를 작성합니다. 내 접착제 코드는 C로 작성되고 내부 계산 루프는 어셈블리로 작성됩니다.
C를 사용하는 이유 : 어셈블리에서보다 복잡한 인수 구조 및 오류 조건을 처리하는 것이 훨씬 간단하며 실제 계산을 시작하기 전에 이러한 종류의 조건 검사에 대한 성능 오버 헤드는 종종 무시할 수 있습니다. C는 간단하고 잘 정의 된 언어이기 때문에 수용 할 수없는 성능 위험이있는 컴파일 된 코드를 볼 때마다 직장에서 컴파일러 팀과 함께 작업하여 코드 생성을 개선하기가 쉽습니다.
이식성은 C의 또 다른 미덕입니다. 접착제 코드는 내가 작업하는 라이브러리의 여러 하드웨어 특정 구현에서 공유되므로 새로운 플랫폼에 대한 지원을 실제로 단순화합니다. 대부분의 플랫폼에는 해당 달의 언어 맛에 대한 가상 머신이나 인터프리터가 없습니다. 일부 플랫폼에는 좋은 C ++ 컴파일러가 없습니다. 사용 가능한 C 컴파일러가없는 플랫폼은 거의 없습니다 (컴파일러 팀과 좋은 관계를 유지하고 있기 때문에 필요한 지원을받는 데 어려움을 겪지 않습니다).
그렇습니다. 리소스를 많이 사용하지 않는 임베디드 시스템에서 C를 사용하겠습니다. 나는 수 는 쉽게 소프트웨어 구성 요소 사이의 강력한 인터페이스를 촉진 할 수 있지만, 프로젝트에 참여하는 모든 엔지니어가 C를 이해하는 경우에만 ++ 가상 함수와 템플릿 피해야 할 것들의 예 (코드 크기를 부풀게로 이어지는 오용 용이 대신 때문에 C ++를 사용 ).
또한 C ++ 프로그래머가 1K 스택에 10K 객체를 만들려고 시도하는 것을 보았습니다.
virtual
는 "사용하지 않는 것에 대한 비용을 지불하지 않는다"는 원칙에 따라 기능이 정상이지만 메모리가 제한된 환경에서는 예외 및 RTTI를 비활성화 할 수 있습니다.
필자는 주로 Xen 하이퍼 바이저, 해당 기능이 포함 된 여러 라이브러리 및 Linux 커널을 사용합니다. 때로는 장치 드라이버를 작성해야합니다 (또는 nxx 가상 시스템이 HRNG와 같은 단일 장치를 공유 할 수 있도록 드라이버를 다시 작성해야 함). C는 나의 주요 언어이며 나는 그것에 매우 만족합니다.
이를 사용하여 스프레드 시트 프로그램을 작성하려고합니까? 절대 안돼. 각 도구에는 응용 프로그램이 있으며 많은 도구가있어서 기쁩니다.
나는 C를 좋아하지만 망치로 나사를 두 드리려고하지 않습니다.
C가 새로운 프로젝트에 적합한 선택이라면, 틀림 없습니다. 그렇지 않다면 다른 것을 사용할 것입니다.
나는 일부 프로젝트를 원할 것입니다. 자율 항공기의 컨트롤러와 같이 임베디드 시스템을 구현해야한다면 분명히 말할 것입니다. 조립 된 부품으로 인해 일부 부품의 레벨이 낮아질 수도 있습니다.
그것이 프로젝트에 적합하다면 아무런 문제가 없습니다.
웹 응용 프로그램을 개발하려면 흠, 아마도 그렇지 않을 것입니다 (또는 매우 강력하고 사실에 근거한 정당화가 필요합니다).
또한 병목 현상이 명확하게 식별되고 기본 코드를 사용하여 최적화를 구현할 수있을 때 주로 다른 언어로 개발 된 다른 프로젝트에서이 도구를 사용합니다. 예를 들어, 일부 고급 렌더링 (예 : 렌더링 엔진 또는 기타)에 대해 집중적 인 계산을 수행해야하는 Java 솔루션입니다. 지원되는 플랫폼이 아닌 경우 Java 구현을 기본값으로 사용할 수 있지만 일부 지원되는 플랫폼에 대해 C에서 기본적으로 컴파일 된 구현을 제공하고 성능을 크게 향상시킬 수 있습니다.
모든 단일 언어에는 알맞은 틈새 시장이 있습니다. 나는 종종 더 높은 수준의 언어로 물건을 구현 한 다음 더 높은 성능을 발휘하거나 더 휴대하기 쉽도록 C-land로 점차 가져옵니다. 거의 모든 것에 대한 C 컴파일러가 있으며 POSIX와 같이 보편적으로 사용 가능한 API에 작성하면 매우 유용 할 수 있습니다.
제가 오늘날 프로그래밍 학습에 관심이있는 사람들에게 말하는 것은 어느 시점에서 C를 배우고 편안하게 배우도록하는 것입니다. 필요한 상황에 처할 수 있습니다. 여러 번, 정적으로 링크 된 작은 "빠른 재부팅"프로그램을 컴파일하고 scp를 사용하여 디스크 하위 시스템이 완전히 사라진 서버의 RAM 디스크에 배치해야했습니다. (저렴하고 저렴한 서버, 온라인 중복성 및 소규모 프로그램을로드 할 수있는 능력은? C가가는 길입니다.)
또한 발로 직접 촬영하지 않고 C로 작업하는 법을 배우면 다른 언어와 환경에서 효율적으로 글을 쓸 수있게됩니다. 적어도 그것은 내 경험이었습니다.
나는 확실히 모든 것을, 또는 대부분의 것들을 위해 그것을 사용하지는 않지만 그 자리를 차지하고 있으며 매우 보편적입니다. 그렇습니다. 나는 과거에 그것을 사용했고 미래에 그것을 사용할 것입니다 순간을 알 수 있습니다).
네, 항상 그래요
라이브러리를 호출하지 않으면 C에서 생성 된 코드에는 OS 지원이 필요하지 않습니다. 또한 생성 된 기계 언어를 정밀하게 제어 할 수 있습니다. 따라서 커널 공간에있는 드라이버 나 다른 코드를 작성하는 데 유용하며, 많은 종류의 임베디드 시스템과 같은 제약 조건이 있습니다. 또한 X Windows, GTK + 및 Clutter와 같이 작업하는 오픈 소스 프로젝트의 기본 언어입니다.
C로 할 수있는 모든 것을 C ++로 할 수 있지만, 종종 C ++의 메커니즘으로 인해 코드를 더 빠르고 쉽게 작성할 수 있습니다. 나는 OOP와 C ++ 클래스가 기능을 캡슐화하는 방식을 좋아하고 RAII를 좋아합니다. 객체가 범위를 벗어날 때 자동 소멸자 호출을주의해서 사용하면 C 프로그래밍의 단점 인 대부분의 메모리 및 리소스 누수가 제거됩니다. STL은 기본적으로 고도로 최적화 된 알고리즘 및 데이터 구조로 구성된 거대한 라이브러리입니다. C에서 사용하려면 직접 작성하거나 다른 곳에서 구입해야합니다.
불행히도, 내가 이해하지 못하는 이유로 Linux의 런타임 시스템에는 C ++을 실행하기 위해 특별한 공유 객체 라이브러리 (Windows의 DLL, Mac의 dylib와 동일)가 필요하며 C 프로그램을 실행할 때 찾을 수 없습니다. 따라서 C 기반 API로 C ++ 기반 공유 객체를 작성하고 C 프로그램에서 호출하는 것이 가장 좋아하는 Mac 및 Windows 트릭 중 하나를 수행 할 수 없습니다.
여기 내 의사 결정 과정이 있습니다.
한 가지 좋은 점은 C ++이 C를 컴파일 할 수 있기 때문에 특정 상황에 대해 생성 된 코드를 세밀하게 제어해야하는 경우 C를 작성하고 나머지는 C ++를 작성하고 C ++ 컴파일러로 모두 컴파일 할 수 있다는 것입니다 .
둘 다 여야한다면
그런 다음 C를 사용합니다. 아마도 C ++입니다.
네, 사실 최근에 왔습니다!
나는 C로 프로그래밍하는 것을 좋아한다. 나는 파이썬으로 대부분의 프로그래밍을한다. 그러나 빠른 코드가 필요할 때가 있고 언어의 단순함에서 오는 우아함을 정말로 즐긴다.
제가 지금 작업하고있는 프로젝트는 데이터베이스입니다. 상상할 수 있듯이 성능이 중요합니다. 현재 C와 일부 파이썬을 사용하고 있지만 C가 아닌 경우에는 주로 C가 될 것입니다.
예. 나는 대부분의 경력을 C ++ 프로그래밍에 보냈지 만 이제는 대부분의 코드를 Ruby로 작성하고 성능이나 저수준 항목에 액세스 해야하는 경우 C 확장을 작성합니다. 미래의 남자입니다!
운영 체제를 작성하는 경우 C를 사용합니다. 그 후 20 년 안에 그런 일이 일어나지 않을 것이므로 로또를 치고 다른 일을하지 않으면 서 멋진 리눅스 배포판을 만들지 않는 한 C #, Java, Python 등을 고수 할 것입니다. 오랫동안 C를 사용하지는 않았지만 항상 사용하는 것이 즐거웠습니다. 그래도 요즘 내 머리가 너무 OO로 감겨있어서 다시 돌아 가야한다면 다시 구르는 데 약간의 시간이 걸릴 것입니다.
C ++ 는 플랫폼 및 마이크로 컨트롤러와 같은 임베디드 장치에서 이식 가능합니다. (C ++는 C로 컴파일 될 수 있으므로 마이크로 컨트롤러가 될 수 있습니다.)
C 는 다른 언어로 이식 가능합니다 (외국 기능으로). 따라서 저수준 라이브러리를 프로그래밍하면 C ++보다 더 많은 호환성을 원합니다.
Haskell 은 여러 플랫폼에서 이식 가능하지만 (ARM은 곧 출시 될 예정이지만) 마이크로 컨트롤러와 같은 임베디드 장치는 아닙니다. 속도는 C 및 C ++과 비슷합니다. 그러나 기능적이므로 런타임 스택 대신 가비지 수집기를 사용하므로 다른 시간 (가비지 수집) 및 다른 상황 (서브 루틴 호출 대신 연속)에서 C보다 빠르거나 느릴 수 있습니다.
프로그램 속도가 다르지 않고 개발 시간과 버그 속도가 다르기 때문에 가능한 가장 추상적 인 언어를 선택합니다. C와 C ++는 크게 다르지만 Haskell의 관점에서는 다릅니다.
한 손 또는 두 손을 모두 알고 있지만 다른 언어를 선호하지 않습니다. … 몇 가지 경우를 제외하고는 bash .
임베디드 시스템은 종종 수 MHz의 프로세서 클럭 속도로 수 킬로바이트의 RAM과 수십 킬로바이트의 플래시를 가질 수 있습니다. C는 그러한 베어 메탈 환경에서 의미가있는 유일한 옵션입니다.