폐쇄 . 이 질문은
의견 기반 입니다. 현재 답변을 받고 있지 않습니다.
댓글
답변
질문은 " 어떤 언어가 현대적이고 일반적인 애플리케이션 개발에 더 적합합니까? "입니다.
편집 : 아래 댓글 중 일부를 언급했습니다. 작은 말 : 관용구로서 기본적으로 많은 것을 가지고있을 때, 매번 직접 구현하거나 다운로드하여 사용하는 것과는 큰 차이가 있습니다. 거의 모든 것이 이러한 언어로 구현 될 수 있습니다. 질문은-무엇입니까? 언어가 기본적으로 제공합니다.
그래서 내 머리 위로 (일부 인수는 두 언어 모두에 적용됨) …
C #이 C ++보다 낫습니다.
C #은 다음과 같은 점에서 Java보다 낫습니다.
- 많은 노이즈 (EJB, 개인 정적 클래스 구현 등) 대신 속성 및 이벤트와 같은 우아하고 친숙한 네이티브 구성을 얻을 수 있습니다. .
- 실제 제네릭 (Java가 제네릭이라고 부르는 나쁜 캐스팅 농담이 아님)을 가지고 있으며 이에 대한 반성을 수행 할 수 있습니다.
- 네이티브 리소스 관리 관용구 (
using
문). Java 7도이 기능을 지원할 예정이지만 C #에서는 훨씬 더 오랜 시간 동안 사용했습니다.
- 확인 된 예외가 없습니다. 🙂 (이게 좋든 나쁘 든 논란의 여지가 있음)
- 원하는 경우 Windows와 긴밀하게 통합됩니다.
- Lambda와 LINQ가 있으므로 소량의 함수 프로그래밍을 지원합니다.
- 일반 공분산과 반공 분산 모두 명시 적으로.
- 원하는 경우 동적 변수가 있습니다.
-
yield
문으로 더 나은 열거 지원.
- 새로운 값 (또는 비 참조) 유형을 정의 할 수 있습니다.
편집-주석 처리
- C ++가 네이티브 RAII를 지원하지 않는다고 말하지 않았습니다. Java에는 “이 기능이 없습니다 (명시 적으로 try / finally를 수행해야합니다). C ++에는 RAII에 유용한 자동 포인터가 있으며, (당신이 무엇을하고 있는지 알고 있다면) 가비지 수집을 대체 할 수도 있습니다.
- 무료 함수를 에뮬레이션 하는 것에 대해 아무 말도하지 않았습니다.하지만 예를 들어
this
포인터로 필드에 액세스해야하는 경우 이를 수행하는 메소드를 일반 함수 포인터 (즉, 동일한 클래스가 아님)에 바인드하면이를 수행하는 기본 방법이 없습니다. C #에서는 무료로받을 수 있습니다. 어떻게 작동하는지 알 필요도 없습니다.
- " 멤버 메서드를 무료 함수로 처리 " 예를 들어, 멤버 메서드는 " 비밀히 "에는
this
포인터가 필요합니다.
- 분명히 IDisposable 래퍼와 함께
using
문은 다음의 좋은 예입니다. RAII. 이 링크 를 참조하세요. GC가 있기 때문에 C ++ 에서처럼 C #에서 RAII가 많이 필요하지 않다는 점을 고려하십시오. 필요한 특정 시간에 대해 명시 적으로 using
를 사용할 수 있습니다. 또 다른 작은 알림 : 메모리를 해제하는 것은 비용이 많이 드는 절차입니다. GC는 많은 경우 (특히 메모리가 많은 경우) 성능 이점이 있습니다. 메모리가 유출되지 않으며 많은 시간을 소비하지 않습니다. 또한 할당이 더 빠릅니다. 매번 메모리를 할당하지 않고 가끔씩 만 할당하기 때문입니다. new
를 호출하는 것은 단순히 마지막 값을 증가시키는 것입니다. object-pointer.
- " C #은 가비지 컬렉션이 있다는 점에서 더 나쁩니다 ". 이것은 실제로 주관적입니다. 하지만 위에서 언급했듯이 대부분의 현대적이고 일반적인 응용 프로그램 개발에서 가비지 수집은 엄청난 이점입니다.
C ++에서는 new
a nd delete
, 경험적으로 항상 여기 저기 오류가 발생합니다. 또는 (C ++ 11 사용시) 자동 포인터를 기본적으로 사용할 수 있지만 많은 코드에 많은 노이즈 가 있습니다. 따라서 GC는 여전히 우위를 점하고 있습니다.
- " 제네릭은 템플릿보다 훨씬 약합니다. "-그냥하지 않습니다. ” 템플릿이 어디에서 왔는지 알 수 있습니다. 템플릿에는 장점이있을 수 있지만 제 경험상 제약 조건에서 일반 매개 변수 유형 검사, 반공 분산 및 공분산은 훨씬 강력하고 우아한 도구입니다. 템플릿의 장점은 언어를 사용할 수 있다는 것입니다. 비트는 멋질 수 있지만 디버깅 할 때 골칫거리가 많이되므로 대체로 템플릿에는 멋진 기능이 있지만 제네릭이 더 실용적이고 깔끔하다고 생각합니다.
댓글
Answer
환경
.NET Framework 및 Windows 클라이언트
Windows는 클라이언트 컴퓨터에서 지배적 인 운영 체제입니다. Windows 애플리케이션에 가장 적합한 GUI 프레임 워크는 Winforms 및 WPF와 .NET Framework 입니다. .NET Framework 및 해당 API에서 작동하는 가장 좋은 프로그래밍 언어는 C # . Java는 이에 대한 대안이 아닙니다.그리고 C ++는 자동 메모리 관리가없는 오래된 언어입니다. C #은 C ++와 유사하지만 자동 메모리 관리 기능이 있으며 “포인터로 작업 할 필요가 없으므로 생산성이 향상됩니다. 일부 경우에는 C ++가 여전히 최상의 옵션 일 수 있지만 일반적으로 사용되는 양식 집약적 인 데이터베이스 응용 프로그램에는 적합하지 않습니다.
IIS 및 Windows Server
Windows 환경 및 C #에서 작업하는 데 익숙하다면 서버 프로그래밍을위한 IIS와 Windows Server를 배우는 데 최소한의 투자가 필요합니다. 기본 관리입니다.
Active Directory 및 Windows Server
회사 네트워크에 배포 할 소프트웨어를 개발하는 경우 Windows 중심 환경을 사용하는 경우 Active Directory가있는 Windows Server. 이러한 환경에서는 C # 및 .NET Framework .
개인적으로 저는 C # 개발자가 아닌 Java 개발자이지만 웹 작업을합니다. Windows 네트워크 용 네트워크 응용 프로그램을 개발하는 경우 C #으로 전환합니다. 하지만 Linux 기반 웹 서버에는 Java를 선호합니다. 의존성이 많지 않다면 임베디드 시스템에 C ++를 선택하겠습니다.
예, C # 는 C ++ 및 Java보다 더 현대적인 기능을 갖춘 더 나은 언어이지만 선택하는 데 가장 중요한 것은 아닙니다. div id = “0b0df27ab7″>
C # .
요약
소프트웨어의 환경은 선택에 가장 중요합니다. C # . Windows 클라이언트, Windows 서버, Active Directory, IIS 및 SQL Server 그러면 C # 가 최고의 언어입니다. .NET Framework 를 사용합니다.
예를 들어 Unix 환경에서 작업하는 경우 웹 서비스, Java가 제 선택이 될 것입니다. 임베디드 시스템으로 작업하거나 하드웨어 장치와 통합해야하는 경우 C ++ 가 좋은 선택입니다.
댓글
답변
C # 및 Java
C #은 다음과 같은 경우에 매우 좋은 언어입니다.
- 범용 개체 지향 개발을 수행하려는 경우. “정적으로 형식화 된 고전적인 OOP 언어입니다.
- 당신은 Microsoft 플랫폼만을 대상으로하고 있습니다 (Microsoft가 C #을 만들기 위해 Java를 효과적으로 복제했다는 사실을 기억할 가치가 있습니다. 그들은 사람들을 Windows. Java를 사용할 수 있었지만 다른 플랫폼에서 응용 프로그램을 쉽게 실행할 수 있었을 것입니다 ….)
언어로서의 C #은 Java보다 다양한면에서 더 좋습니다. 속성, 값 유형, 수정 된 제네릭 등에 대한 구문). 나는 자바보다 언어로서의 C #을 선호하지만 대대적으로 보면 상당히 유사한 언어이며 유사한 애플리케이션에 적합합니다.
반면에 Java에는 몇 가지 큰 장점이 있습니다.
- 거대한 오픈 소스 생태계-무료로 얻을 수있는 Java 용 라이브러리는 지금까지 모든 언어 중 최고입니다. 이것의 중요성을 아무리 강조해도 지나치지 않습니다. Java는 매우 효과적입니다.
- 도구-Java 도구는 .Net 세계에서 얻을 수있는 것보다 낫습니다. . 예 : Maven (한 번 마스터하면!)이 특히 인상적입니다.
- 유지 보수 가능성-Java는 비교적 안정적이고 이전 버전과의 호환성을 위해 많은 노력을 기울 였기 때문에 대기업에서 성공했습니다. 간단하고 약간 장황한 구문은 Java에도 도움이됩니다. 코드가 매우 명확하고 명시 적이면 코드를 읽고 유지하는 것이 더 쉽습니다.
- 새로운 언어-JVM에는 놀라운 새로운 언어 (Scala, Clojure)가 있습니다. , Groovy 등)이 Java 플랫폼의 미래입니다. 여기에서 많은 언어 혁신이 일어나고 있으며 Java 또는 C #보다 훨씬 더 빠르게 일어나고 있습니다.
따라서 Java 대 C #은 매우 긴밀한 호출이며 Microsoft 진영 또는 오픈 소스 / 크로스 플랫폼 진영에 참여하고 싶은지 여부에 따라 결정됩니다.
개인적으로 Java를 선호하는 이유는 다음과 같습니다.
- 라이브러리 생태계는 C #이 Java보다 더 좋은 구문을 가지고 있다는 사실이 훨씬 더 중요하다고 생각합니다.
- 장기적으로는 모든 코드가 제대로 교차되기를 바랍니다. -플랫폼이며 클라우드에있는 저렴한 Linux 머신의 대규모 클러스터에서 실행할 수 있습니다.
- Clojure는 현재 세계에서 가장 유망한 언어 인 IMHO이며, JVM 플랫폼을 고수하면 트란에 시간이 지남에 따라 코드와 기술을 Clojure에 쉽게 적용 할 수 있습니다.
C / C ++
C / C ++는 기본적으로 완전히 다른 짐승입니다. 다음과 같은 이유로 요즘 범용 애플리케이션 개발에 권장하지 않습니다 .
- 메모리 관리-오늘날 대부분의 범용 프로그래밍에서는 자신의 메모리를 관리합니다. C # 또는 Java의 가비지 수집은 C / C ++에서 사용해야하는 명시 적 메모리 관리 기술보다 생산성과 온전성에 훨씬 더 좋습니다.
- 복잡성-특히 C ++는 매우 복잡한 언어입니다. 마스터하는 데 오랜 시간이 걸리며 코드 자체도 엄청나게 복잡 할 수 있습니다. (예를 들어 C ++ 템플릿은 특히 까다 롭습니다 ….)
- 생산성-대부분의 시간과 그 밖의 모든 동일하면 C / C ++로 작업을 수행하는 데 시간이 더 오래 걸립니다.
하지만 특정 제한된 수의 특수 도메인, 특히 다음과 같은 경우 의심 할 여지없이 훌륭한 선택입니다.
- 운영 체제-운영 체제를 작성하는 경우 C / C ++를 사용하고 싶을 것입니다.
- 게임 개발-거의 모든 t 최고의 상용 게임 엔진은 C / C ++입니다. 까다로운 AAA 타이틀을 개발하는 경우 여전히 최선의 선택입니다 (C # 및 Java는 덜 까다로운 / 캐주얼 게임에 완벽하게 적합합니다).
- 고성능 컴퓨팅-최적화 된 C / C ++는 아마도 가장 좋은 방법 일 것입니다. 매우 높은 성능의 코드를 생성합니다. 이러한 수준의 최적화를 수행하는 대부분의 애플리케이션의 경우 “노력할 가치가 없지만 특정 도메인에서는 매우 가치가있을 수 있습니다 (예 : 고주파 거래).
- 하드웨어 액세스-직접 하드웨어에 대한 액세스 (예 : 임베디드 시스템)
따라서 기본적으로 C / C ++는 특히 적합한 도메인 중 하나에 집중하는 경우에만 훌륭한 선택입니다. .
댓글
답변
I heard that syntactically they are almost the same.
구문 적으로? 누가 날아 다니는 원숭이에게 구문에 대해 알려주나요? 구문은 한 가지에만 유용합니다. 구문 적으로 유사한 언어에서 더 빠르게 마이그레이션 할 수 있습니다. 그게 다야.
C #은 Java보다 훨씬 낫습니다. 일반적인 기능적 프로그래밍 지원을 고려하십시오. C #은 Java보다 훨씬 앞서 있습니다. 연산자 오버로드 및 기타 좋은 점은 말할 것도없고 C #이 훨씬 더 나은 기능을 제공합니다. Java가 C #보다 더 나은 것으로 간주 될 수있는 방법은 없습니다.
C ++와 C #은 경쟁에 가깝습니다. C ++에는 믿을 수 없을 정도로 성가신 구식 컴파일 모델과 여러 가지 레거시 질병
이 있습니다. em>을 C에서 가져 왔지만 템플릿은 제네릭보다 훨씬 강력하며 리소스 관리 방식은 일반적으로 훨씬 더 유연하고 강력합니다. using
는 완전한 실패입니다. , 그리고 더 빠르게 실행됩니다.
댓글
답변
음 C#
에는 LINQ
와 같은 멋진 내장 기능이 있습니다. 대의원. 두 세계 (Java
및 C++
)에서 최상의 결과를 얻고 있습니다. 전체 비교는 여기 를 참조하세요.
하지만 Java
세상이 더 좋습니다. 더 많은 오픈 소스 프레임 워크가 있으며 모든 플랫폼에서 실행됩니다. 그리고 Mono
에 대해 말하지 마세요. 신뢰할 수있는 옵션이 아닙니다.
댓글
답변
일부 출처에 따르면 (예 : http://www.indeed.com/jobtrends ) C #은 여전히 Java보다 덜 인기가 있으며 C ++만큼 인기가 있습니다.
C #은 Java에없는 기능을 제공합니다. 예 속성, 함수형 프로그래밍 스타일 등과 같은 특정 프로그래밍 관용구를 직접 지원합니다. C #은 C ++보다 추상화 수준이 높기 때문에 개발 시간이 프로그램 속도보다 더 중요 할 때 이점이 있습니다.
개인적으로 저는 여전히 Java / C ++ 세계를 선호합니다. Petar Minchev가 말했듯이 Java는 더 많은 오픈 소스 프레임 워크와 애플리케이션을 가지고 있으며 모든 곳에서 실행되며 특정 벤더 및 운영 체제에 덜 묶여 있습니다. 코드는 종종 한 플랫폼에서 다른 플랫폼으로 이동하는 조정이 필요하지만 C ++는 유사한 장점을 가지고 있습니다. 저는 Linux에서 개발하는 것을 선호하고, 제가 아는 한 Linux에서 C #을 완벽하게 사용할 수 없기 때문에 프로그래밍 요구 사항이 C, C ++, Java, Scala로 다루어지기 때문에 C #에 대한 진정한 관심을 얻지 못했습니다.
다른 한편으로 많은 개발자에게 특정 공급 업체에 묶여있는 것은 문제가되지 않습니다. Microsoft는 운영 체제 시장에서 우위를 차지하고 있으며 C #은 많은 취업 기회를 제공합니다. 따라서 IMO는 많은 개발자가 C #을 채택합니다. 기능이 풍부한 언어 일뿐 아니라 좋은 투자이기도합니다.
댓글
Answer
" 프로그래밍 언어를 포함하는 소프트웨어 개발 프레임 워크는 " 더 나은가요?
작업 할 " 환경 "과 같은 다른 항목을 포함하는 것을 잊었습니다.
p>
-
Windows OS에서만 작업 할 예정이지만 저수준 일 필요는없고 메모리와 기타 리소스가 많을 필요는 없습니까?
선택 .NET을 Windows의 프레임 워크로 사용하고 C #을 사용합니다.
-
Windows에서만 작업 할 예정이지만 저수준 일 필요는 없지만 그렇지 않습니다. 리소스가 많습니까?
Delphi Framework (및 Object Pascal Delphi 프로그래밍 언어 또는 Lazarus Object Pascal 프로그래밍 언어)를 선택하세요.
-
앱이 필요합니까? seve를 지원하기 위해 다른 모바일에서 게임과 같은 ral 플랫폼?
Java 프레임 워크와 Java 프로그래밍 언어를 선택하십시오.
-
KDE를 그래픽으로 사용하는 Linux입니까? interface?
C ++로 QT 프레임 워크 선택
-
Gnome을 그래픽 인터페이스로 사용하는 Linux입니까?
GObject / GLib 프레임 워크 선택 , C ++
-
드라이버 개발과 같은 많은 저수준 작업을 수행 할 예정입니까?
일반 C 또는 C ++는 여러 운영에 사용됩니다. 표준 라이브러리를 프레임 워크로 사용하는 시스템
단지 2 센트
댓글
답변
검색을하면 상위 프로그래밍 언어에 대한 토론을 우연히 발견하게 될 것입니다. 다음은 검색 결과 중 하나입니다. http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html -Java는 여전히 가장 인기있는 언어 인 것 같습니다.
Java는 C ++의 일부 단점을 제거하려고 노력했습니다 (그리고 프로그래머의 삶을 비 실시간 및 중요하지 않은 애플리케이션에 대해 더 간단하게 만들었습니다). C #은 파티에 후 발주자이므로 Java 언어의 일부 단점을 피했습니다. C #은 많은 발전을 이루었습니다 (Microsoft가 많은 제어권을 가지고 있기 때문에). 반면 Java의 발전은 이해 관계자 간의 충돌로 인해 상당한 기간 동안 차단되었습니다.
답변
아직 언급되지 않은 몇 가지 :
C #은 다음과 같은 이유로 C ++보다 낫습니다.
헤더 파일을 사용하므로 매우 간단합니다.
C #은 다음과 같은 이유로 Java보다 낫습니다.
참조 유형 (클래스) 및 값 유형 (구조체) 사용자 정의를 모두 지원합니다. 수행중인 작업을 알고 있으면 상당한 성능 이점을 얻을 수 있습니다.
단일 메소드 인터페이스와 같은 델리게이트를 지원하므로 단일 메소드 객체를 포함하는 자주 발생하는 구문의 코딩을 크게 단순화합니다.
코멘트
- 참조 유형 및 값 유형 유형이 모두 C #에서 성능 이점을 얻을 수있는 방법을 설명해 주시겠습니까?
- 예를 들어 레코드 배열이 필요한 경우 , Java에서는 클래스를 사용하여 레코드를 설명하는 것 외에 옵션이 없으므로 배열은 개별적으로 할당 된 여러 객체에 대한 참조 배열이됩니다. C #에서는 구조체를 사용하여 레코드를 설명 할 수 있으므로 배열은 C에서와 같이 구조를 차례로 포함하는 단일 연속 메모리 영역이됩니다.
- 원하는 경우 다른 예로 작은 새 유형 (기계어에 맞는 유형)을 정의하기 위해 새 클래스를 정의 할 필요가 없습니다. 단순히 구조체로 만들 수 있으므로 값 의미론을 따르게됩니다. 이러한 구조체를 전달하는 것은 객체에 대한 참조를 전달하는 것보다 비용이 많이 들지는 않지만 객체를 할당, 구성 및 가비지 수집하지 않는 이점이 있습니다.
- 이해합니다. 따라서 클래스는 힙에서 인스턴스화되고 참조를 통해 액세스되고 구조체는 스택에서 인스턴스화됩니다 (?)
- 거의 정확합니다. 이 명령문의 유일한 부정확성은 구조체가 다른 개체에 포함되거나 구조체 배열 내에있는 경우 힙에서 발견된다는 것입니다. 또한 값 유형이 Java에서 boxing되는 것과 똑같은 방식으로 boxed되면 힙에서도 발견됩니다.
Answer
예상 환경과 전문 지식에 가장 적합한 언어를 선택해야합니다.
Microsoft 전용 환경에서 작업하는 경우 C #을 선택하십시오. C #은 ISO / IEC 23270 : 2003에 따라 표준화되었지만 Microsoft 버전은 유일한 완전한 구현입니다. 언어의 일부 핵심 부분은 표준에 포함되지 않으므로 Microsoft 특허의 적용을받습니다. 어느 누구도 다른 시스템에 대해 완전히 호환되는 버전의 언어를 구현하지 않으므로 사실상 해당 언어를 사용하는 한 Microsoft Windows 및 .Net에 공급 업체가 고정되어 있습니다. 모바일 시장에서 사용할 기술을 찾고 있다면 다른 언어를 찾는 것이 가장 좋습니다.
Java는 작동하지만 부분적으로 가비지 수집과 같은 기능으로 인해 상당한 오버 헤드가 있습니다. Java는 또한 ISO / IEC에 의해 표준화되지 않았으므로 플랫폼과 Java 버전을 전환 할 경우 Sun / Oracle의 최선의 의도 만 보장 할 수 없습니다. 결국 Android로 작업 할 계획이라면 이것이 확실한 방법입니다. . Android의 프로그래밍은 기본적으로 Java이며 몇 가지 변경 사항이 있습니다.
C ++는 표준화되어 있으며 거의 모든 컴파일러가 국제 표준을 따르므로 동작을 보장하지만 언어가 사용자를 보호하지는 않습니다. 정리 및 오버플로 검사를 직접 수행해야합니다. 이것은 어렵지 않습니다. C / C ++ 프로그래머는 수년 동안 이러한 작업을 해왔습니다. Apple은 모든 것에 Objective C를 사용하므로 Apple을 목표로하고 싶다면 대신 이것을 시도하는 것이 좋습니다.
언젠가 Windows를 떠나는 자신을 본다면 C / C ++와 Java를 모두 배우는 것이 좋습니다. 둘 다 현재 시장성이 있습니다.
답변
C ++ 대 C #과 관련하여 (저는 Java에 능숙하지 않기 때문에) 여기서 누락 된 것은 Windows에서 저수준 항목에 액세스 할 수있는 기능입니다. 예를 들어 아직 C #으로 네이티브 디스플레이 드라이버를 개발할 수는 없지만 C ++로는 할 수 있습니다. 이렇게해도 C ++가 더 나아지지는 않습니다. C ++와 C #을 어셈블리 대 C로 볼 수 있습니다.
C #은 실제로 기능을 구현하는 데 걸리는 시간을 살펴보면 훨씬 더 효율적으로 볼 수 있습니다. 개발 된 애플리케이션의 99 %에서 .Net 런타임의 성능 패널티는 무시할 수 있습니다. 타이트한 루프를 실행하는 경우 중요 할 수 있습니다. 예 하지만 대부분의 경우 애플리케이션은 유휴 상태이며 모든 종류의 입력, 신호 또는 인터럽트 (디스크 IO, 버튼 클릭, 네트워크, 애니메이션 완료)를 기다립니다.
기능은 anothe r 큰 이점. 주니어 개발자에게 C #을 교육 할 때 대부분은 클래스, 멤버 및 네임 스페이스의 논리적 명명 규칙을 좋아한다고 말했습니다. 메서드의 기능을 찾는 것은 SDK 전체에서 논리적이었으며 Visual Basic 5에는 심각한 결함이있었습니다. 이것은 그들이 도서관을 채택하는 데 엄청난 도움이되었습니다. 언어의 구문을 배운 후 새로운 라이브러리를 배우는 것은 SDK를 잘 이해하는 데 중요합니다. 바퀴를 재발 명하지 않아도됩니다.