CSDN은 "C 언어는 죽었다"라는 기사를 게재해 논란을 일으킨 적이 있습니다. 실제로 해당 기사는 Ed Burnette의 블로그에서 재인쇄되었습니다. 원래 제목은 "Die, C, die!"였으며 문자 그대로 "Die, C, die!"로 번역되어야 합니다. ”는 심판보다는 저주를 표현한다. 번역에는 "C 언어는 죽었다"고 적혀 있었는데, 이는 분명히 불길을 부채질한 오해입니다. CSDN 네티즌들은 그의 견해를 비판했지만 솔직히 말해서 이러한 비판은 왜곡된 번역문을 기반으로 하기 때문에 새로운 것이 없을 뿐만 아니라 원저자의 초점을 포착하지도 못합니다.
실제 상황은 이렇습니다. 최근 외국 기술 커뮤니티에서는 C 언어를 대체하거나 가장 많이 사용되는 언어로 Java를 논의하는 경향이 있습니다. 주류 기본 소프트웨어 프로그래밍 언어. 대부분의 사람들이 표현한 의견으로 볼 때 C를 대체하는 Java 추세에 대한 지지는 여전히 존재합니다.
기본 소프트웨어란 컴퓨터의 잠재력을 최대한 활용하고 상위 응용 프로그램 소프트웨어에 효율적이고 안정적인 기능 세트를 제공하는 것이 주요 임무인 소프트웨어 유형을 말합니다. 이러한 소프트웨어는 집중적으로 호출되며, 실제로는 약간의 성능 지연이 수백, 수천 배 확대됩니다. 따라서 기본 소프트웨어의 경우 성능은 최소한 안정성만큼 중요합니다. 일부 기본 소프트웨어의 소스 코드에서는 추악한 디자인과 왜곡된 해킹 기술을 종종 볼 수 있지만, 다른 분야에서는 이는 권장되지 않지만 기본 소프트웨어에서는 허용됩니다.
운영 체제, 가상 머신 및 장치 드라이버 개발 측면에서 C 언어는 여전히 일부 분야에서 강세를 보이고 있습니다. 그러나 데이터베이스, 네트워크 서버, 그래픽 및 이미지 처리 등과 같은 다른 기본 소프트웨어 분야에서 C 언어가 계속해서 우위를 차지하는 이유는 실제로 두 가지뿐입니다. 하나는 빠르다는 것이고, 다른 하나는 많다는 것입니다. 그것에 익숙하고 풍부한 경험을 가진 사람들.
그런데 이 두 가지 점 모두 지금 도전받고 있습니다.
첫째는 속도입니다. Java의 실행 속도는 JDK1.4의 수준에 도달하여 일반 개발자의 경우 그가 작성한 C++ 프로그램이 더 이상 동등한 Java 프로그램보다 빠르게 실행되지 않습니다. 후속 JDK 5.0과 6.0에서는 실행 성능이 더욱 향상되었습니다. 다양한 기관에서 실시한 여러 평가 결과에 따르면 Java와 C 언어 간의 전반적인 실행 효율성 격차는 두 배 미만입니다. 즉, JDK는 속도와 성능면에서 우수하다고 알려져 있습니다. 많은 것을 포기한 C 언어는 이제 모든 기능을 갖춘 Java보다 두 배도 안 빠릅니다. 말할 것도 없이, 새로운 컴퓨팅 환경을 고려한다면 C 언어의 속도 이점은 단지 환상에 불과할 수도 있습니다. 멀티 CPU 컴퓨팅 플랫폼에서 C 언어로 큰 프로그램을 빠르고 정확하게 작성할 수 있는 능력을 가진 사람은 세상에 극소수에 불과하고, 그 중에서도 큰 규모의 프로그램을 작성할 수 있는 사람은 극소수에 불과하기 때문입니다. 대규모 이기종 네트워크 환경에서 각 노드의 컴퓨팅 성능을 최대한 활용할 수 있는 대규모 병렬 프로그램입니다. 즉, 프로그램 성능을 두 배로 늘려 6,000위안 상당의 PC가 갖고 있는 컴퓨팅 잠재력을 최대한 활용하고 고객은 1,000위안을 절약할 수 있습니다. 하지만 1,000대의 머신으로 구성된 대규모 이기종 네트워크 병렬 컴퓨팅 환경이라면, 여러분이 작성한 C 프로그램의 성능은 아마도 해당 자바 프로그램에 비해 훨씬 낮을 것이고, 차후 막대한 유지 비용도 손실될 수 있습니다. 1000만 이상이어야 합니다.
두 번째는 경험입니다. 많은 사람들이 훌륭한 C 기술을 가지고 있다고 주장하지만 실제로 진정한 C 마스터라도 오류, 특히 메모리 오류를 찾고 디버깅하는 데 상당한 시간을 소비해야 합니다. C로 작성된 대부분의 대규모 소프트웨어에는 일부 메모리 오류가 있어 제품을 안정화하는 데 많은 에너지와 시간이 필요합니다. 이는 보안 결함을 고려하지 않은 것입니다. 현재 대부분의 개발자는 코드 보안에 대한 지식이 매우 부족합니다. 보안 취약점은 코드에서 매우 흔하며 C 언어에서는 이러한 단점이 특히 분명합니다. 아마도 가장 큰 문제는 동시성 문제일 것입니다. 동시성은 매우 높은 수준의 추상화에서 해결해야 하는 매우 복잡한 문제입니다. C 언어의 추상화 메커니즘은 너무 단순하여 개발자가 높은 수준의 추상화를 제공할 수 없습니다. 일부 "동시성 기본 요소"에서 시작하여 동시 프로그램을 구성하는 것은 연필깎이를 사용하여 큰 나무를 보는 것과 다르지 않습니다. 직설적으로 말하면 대부분의 C 프로그래머는 효율적이고 버그 없는 동시 프로그램을 작성할 수 없습니다.
그래서 어떤 사람이 자신이 C 언어를 얼마나 잘하고 경험이 얼마나 풍부하다고 말할 때 C를 사용하는 것에 대해 이야기할 가능성이 매우 높다는 것은 잔인한 사실입니다. 단일 머신 및 단일 스레드 애플리케이션 작성에 대한 경험이 풍부하고 외부 세계의 공격을 받지 않으며 시간 예산에 대한 압박이 없으며 사용자는 긴 제품 안정성 기간을 견딜 수 있습니다. 안타깝게도 시장 환경과 컴퓨팅 환경은 완전히 바뀌었습니다. 더욱 복잡한 컴퓨팅 환경에 직면하여 C 언어를 사용하여 고품질, 대규모 소프트웨어를 작성하는 것은 실제 전문가 팀만이 완료할 수 있는 작업입니다. 며칠 동안 메모리 누수나 스레딩 오류를 추적하고 디버깅하는 데 어려움을 겪어 본 적이 있다면 아마도 자신이 전문가가 아니라는 사실을 알게 될 것입니다.
비교하면 Java는 C 언어에 비해 추상화 메커니즘, 인프라, 보안 및 동시성 측면에서 활과 화살에 비해 Maxim 중기관총과 같습니다. 예를 들어, 동시성과 관련하여 Java 5.0에 추가된 java.util.concurrent 패키지는 주류 언어의 동시성 문제에 대한 가장 강력한 지원 라이브러리일 수 있습니다. Java의 메모리 관리 및 보안 메커니즘도 프로그램 결함을 효과적으로 줄일 수 있는 것으로 입증되었습니다. 이것이 저주받은 기사의 원본 텍스트의 의도였습니다.
그래서 내 생각은 분명하다. C를 대체하는 Java는 진보적인 생각이다. 하지만 세상에는 진보적인 아이디어가 많지만 그 중 꿈을 이루는 사람은 거의 없다. 실현되다. Java가 정말 기본 소프트웨어 분야에서 C 언어를 대체할 수 있는 강력한 대안이 될 수 있을까요? 적어도 단기적으로는 불가능하다고 생각합니다. 그 이유는 다음과 같습니다.
1. 사람의 문제. C 언어로 뛰어난 기본 소프트웨어를 작성할 수 있는 사람은 많지 않지만, Java로 작성할 수 있는 사람은 아마도 더 적을 것입니다. Java에는 수백만 명의 개발자가 있습니다. 그런데 그들은 무엇을 하고 있을까요? 그들 중 대부분은 엔터프라이즈급 개발과 웹 개발에 종사하고 있습니다. 실제로 Java의 메모리 모델을 이해하는 사람은 몇 명이나 될까요? 동시 패키지에서 제공되는 도구를 능숙하게 사용하는 사람은 몇 명입니까? 수년 동안 Java를 사용해 본 적이 없는 많은 사람들은 소켓 프로그램을 작성해 본 적이 없으며 Java 멀티스레딩의 오버헤드를 이해하지 못하고 성능 진단 및 튜닝을 수행하는 방법을 모릅니다. 이는 기본 소프트웨어를 작성할 때 필수적인 기술입니다. 대부분의 Java 프로그래머는 Java를 배운 후 웹 개발로 전환하여 두꺼운 추상화 계층과 화려한 구조를 갖춘 크고 복잡한 프레임워크를 차례로 마스터하는 데 주력을 쏟고 있습니다. Java로 가상화된 컴퓨팅 환경에 대해서는 잘 모릅니다. 따라서 Java 커뮤니티 프로그래밍을 차세대 기본 소프트웨어 개발 작업을 맡을 수 있는 선봉으로 변환하는 것은 매우 어려울 뿐만 아니라 충분한 시간도 필요합니다.
2. Java의 메모리 소모량이 너무 많습니다. 시스템 수준 프로그램의 경우 메모리 소모가 크다는 것은 캐시 적중률이 낮아지고 디스크와의 데이터 교환 가능성이 높아진다는 의미로 성능에 심각한 영향을 미친다. 오늘날에도 여전히 많은 사람들은 Java가 느리다고 생각합니다. 주된 이유는 Java가 느리게 실행되기 때문이 아니라 과도한 메모리 소비로 인해 전반적인 성능 저하가 발생하기 때문입니다. 이 문제가 해결되지 않으면 Java는 더 높은 수준의 기본 소프트웨어를 만드는 데만 사용될 수 있습니다. 어쩌면 컴퓨터 하드웨어의 발전으로 이 문제도 점차 해결될 수 있지 않을까?
3. 스타일의 문제. 저는 이 문제가 가장 심각한 것 같아요. 기본 소프트웨어 개발은 자유, 직접성, 투명성, 단순성 및 효율성을 옹호해야 합니다. 단검처럼 날카롭고, 전사처럼 용감해야 하며, 농부처럼 단순해야 합니다. , 구조와 불필요한 유연성. 수년간 Java 커뮤니티가 형성해 온 디자인 스타일은 이와 양립할 수 없으며 정반대라고도 할 수 있습니다. Java는 엔터프라이즈 애플리케이션 소프트웨어 개발을 이념적으로 지향하므로 아키텍처, 디자인 패턴, 표준, 규칙, 높은 프로필 및 호화로운 궁전 기질에 특히 중점을 둡니다. C에서는 밥을 먹을 때 그릇을 들고 술을 마시고, 젓가락을 내려 욕을 하고, 팔을 내려 고기를 잡고, 소매를 걷어 기름을 바르는 식이다. Java에서는 어떤 작업을 수행하기 위해 먼저 객체를 새로 만든 다음 이 객체를 매개변수로 사용하여 다른 객체를 새로 만드는 경우가 많습니다. 이 작업을 n번 반복하여 실제로 필요한 객체를 얻은 다음 마지막으로 해당 객체의 객체를 호출합니다. 한 가지 방법은 향을 피우고, 세수를 하고, 식사할 때 입과 손에 양치질을 하고, 조심하고 공손하게 행동하는 것과 같습니다. C에서는 문제가 발생하면 갱스터 버전의 Cheng Yaojin처럼 무법자처럼 행동해야 합니다. 당신을 죽여라. 자바에서는 문제가 발생하면 송샹공처럼 말해야 하고, 솔직해야 하고, 예절의 나라여야 하고, 태도를 드러내야 하며, 조심해야 합니다. Java의 슬로건은 죽든 말든 먼저 아이에게 좋은 인상을 주어야 한다는 것입니다. 이러한 번거로운 작업은 기본 소프트웨어 개발에 불필요하고 익숙해지기 어렵습니다. 이는 Java 언어의 문제가 아니라는 점에 유의해야 합니다. 실제로 Java 자체는 그렇게 복잡하고 바로크적일 필요는 없습니다. 언어 자체의 관점에서 볼 때 Java는 활기차고 직접적일 수도 있고 풍성할 수도 있습니다. 10년 넘게 이런 방식으로 사용하는 사람이 거의 없기 때문에 모두가 더 이상 알지 못합니다. 한 번에 한 단계씩 수행하지 않으면 Java로 프로그램을 작성하는 방법은 무엇입니까?
최근까지 대부분의 일류 기본 소프트웨어가 C 언어로 작성되었거나 적어도 핵심 부분은 여전히 C를 기반으로 합니다. 그리고 저는 이러한 상황이 단기간에 크게 바뀔 것이라고 생각하지 않습니다. 물론 Java 커뮤니티가 위의 문제를 극복하고 Java 자체의 장점을 최대한 활용하여 기본 분야에서 일류 지원 소프트웨어를 다수 개발할 수 있다면 상황은 바뀔 수 있으며 이러한 변화도 마찬가지입니다. 진보적이고 환영받을 가치가 있습니다.
위 내용은 C언어를 Java가 대체할 가능성이 있다는 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!