C의 단순하고 투명한 특성이 정말 마음에 듭니다. C 코드를 작성할 때 “유연한 추상화”로 방해받지 않고 거의 항상 내가 생성하는 어셈블리에 대해 어리석은 추측을 할 수 있습니다. 나는 또한 C에 대한 간단하고 친숙한 구문을 좋아한다.
그러나 C에는 C ++이 클래스, 단순화 된 비 문자열 처리 등과 같은 C ++이 제공하는 간단하고 유용한 doodad가 없습니다. 점프 테이블 등을 사용하여 C로 구현하는 것이 가능하지만 때로는 약간 장황하다는 것을 알고 있습니다. 여러 가지 이유로 형식이 안전하지 않습니다.
나는 C ++의 객체에 대한 과도한 강조를 좋아하지 않으며 ‘새로운’연산자 등을 소홀히합니다. 예를 들어 C ++은 시스템 프로그래밍 언어로 사용하기에는 너무 많은 딸꾹질이있는 것 같습니다.
위젯과 doodad의 규모로 C와 C ++ 사이에있는 언어가 있습니까?
면책 조항 : 이것은 사실적인 질문입니다. 나는 C {, ++}가 내가 계획하고있는 모든 것을하기에 충분하다는 당신의 견해를 공유하지 않기 때문에 당신을 화나게하지 않을 것입니다.
답변
답변
C ++과 거의 비슷한 언어 나 저자가 C ++로 보았던 문제를 해결하려는 언어 (예 : Java, Go, D, Objective-C)가 있습니다.
그러나 적어도 IMO는 대부분의 실용적인 목적으로 C ++보다 실질적으로 열등합니다.
불행히도, 어떤 어셈블리 코드가 생성 될지 알고 자하는 취향에 따라 Objective C와 Java를 즉시 배제 할 수 있습니다.
이론적으로 Go는 이것들 중 가장 흥미로운 것으로 생각합니다. 어떤 종류의 코드를 훨씬 쉽게 만드는 문제를 해결하기위한 독창적 인 아이디어와 흥미로운 접근법이 있습니다. 불행히도 현재 컴파일러는 좋은 코드를 생성하지 않으며 지난 몇 년 동안 그와 관련하여 많은 개선이 이루어지지 않았습니다.
그것은 D를 유일하게 유일하게 남겨둔다. 아마도 C ++ (이들 중)과 가장 비슷하지만 문제로 보이는 것을 고칠 가능성이 가장 적은 (IMO) 것입니다.
C ++을 사용하지만 원하는 부분 만 사용하고 원하지 않는 부분은 피하십시오.
답변
그러나 C에는 C ++이 클래스, 단순화 된 비 문자열 처리 등과 같은 C ++이 제공하는 간단하고 유용한 doodad가 없습니다. 점프 테이블 등을 사용하여 C로 구현하는 것이 가능하지만 때로는 약간 장황하다는 것을 알고 있습니다. 여러 가지 이유로 형식이 안전하지 않습니다.
나는 C ++의 객체에 대한 과도한 강조를 좋아하지 않으며 ‘새로운’연산자 등을 소홀히합니다.
죄송합니다, 친구, 모순 경보. 비 문자열 처리에는가 필요합니다 new
. 근본적인 필요성입니다. std::string
없이는 가질 수 없습니다 new
. 또한 new
/ delete
는 힙 객체의 올바른 구성과 파괴를 보장하고 (완전히 필요합니다!) 리턴 대신 예외 처리를 사용 하므로 상상할 수있는 모든 방식에서 우수하므로 / 는 정확히 malloc
/ 안전free
하지만 동일합니다 . C ++ 11에서는 완벽한 전달 기능을 사용하면 모든 유형의 생성자를 처리 할 수 있으므로 자체 스타일 함수 를 작성할 수 있습니다. 에 대해 부끄러워 하는 사람이라면 다루는 내용을 실제로 알지 못하는 것이 좋습니다.NULL
new
new
아, 그리고 똑똑한 포인터는 당신이 실제로 이것을 직접 다루지 않아도되도록 그것을 만듭니다.
또한 C ++에는 지나치게 강조되지 않습니다. 원하지 않는 개체를 사용할 필요는 없습니다. 람다 및 원하는 시간에 기능적으로 프로그래밍 할 수 있습니다. 상속과 가상 함수를 사용하도록 강요하는 사람은 없습니다. 실제로 많은 훌륭한 C ++ 프로그램은 상속을 거의하지 않습니다. 템플릿은보다 강력하고 유용한 추상화 기술입니다. 이것은 Java가 아닙니다.
답변
C는 거의 C ++의 하위 집합이므로 C ++의 나머지 부분을 좋아하고 무시하는 부분 만 사용할 수 있습니다. 유효한 C ++ 인 유효한 C를 작성할 수도 있습니다.
관용적 인 C ++을 작성하지는 않지만, “중간”정도입니다.
또는 C를 더 강력하고, 특히 D 및 Objective-C로 확장하려는 다른 언어를 확인할 수도 있습니다.
마지막으로 프로젝트의 특성에 따라 프로젝트를 모듈로 나누고 각 파트에 가장 적합한 언어를 선택하는 폴리 글 로트 접근 방식을 사용할 수 있습니다. 이것의 단점은 언어를 함께 작동시켜야하므로 노력할만한 가치가없는 것입니다.
답변
당신이 원하는 언어가 존재하지 않는다면, 왜 스스로 언어를 만들지 않겠습니까? (F) Lex 및 Yacc / Bison의 오래된 대기 모드 바로 아래에는 다양한 강력한 언어 개발 도구가 있습니다. 이미 C를 알고 있으므로 C 코드를 출력하려면 “컴파일러”만 있으면됩니다. 그런 다음 기존 툴 체인을 사용합니다.
생각보다 간단하고 강력 할 수 있습니다. C 용 파서 / 렉서로 시작한 다음 중요하다고 생각되는 추가 기능을 추가하십시오. 점프 테이블이 수작업으로 작성하는 데 성가신 경우 초록을 표현할 수있는 구문을 찾아 통역사가 직접 작성하도록하십시오. 본질적으로 이것은 외부 프로그래밍 도구를 사용하여 메타 프로그래밍을 수행하는 상위 수준의 전 처리기 메타 프로그래밍입니다. C를 알고 있기 때문에 최종 어셈블리가 어떻게 될지 항상 정확히 알 수 있으며 언어 확장이 어떤 C로 확장되는지 알 수 있습니다.
분명히 많은 추가 작업없이 이것이 얼마나 효과적 일 수 있는지에 대한 제한이 있습니다. 완전 정적 유형 시스템을 추가하는 것은 당신이 원하는 것보다 더 복잡 할 수 있지만, 당신이 그것을 맛보고 있다면 그것을 탐험 할 수있는 옵션입니다. DSL 확장은 시간과 에너지를 제공 할만큼 강력하고 복잡하며 확장 언어가 “다음 C ++”이 될 것입니다.
답변
어떤 C ++ 기능이 귀찮은 지 말하지 않았습니다. 어쨌든 Objective-C를 사용해 볼 수 있습니다. C ++의 표준 라이브러리 대신 객체 지향에 중점을 둡니다.
답변
임베디드 세계는 Embedded C ++을 지정 했으며, 이것이 당신이 찾고있는 것일 수 있습니다. 그들은 다중 상속과 같은 것들을 제거했습니다. 내가 아는 한, 그것은 거의 죽었다.