Vai trò của C ++ ngày nay là gì?


41

Hiện tại tôi đang là sinh viên CNTT và tôi đang tự hỏi điều gì vẫn còn quan trọng trong C ++ ngày nay, nó được sử dụng để làm gì? Tôi đã hoàn thành khóa học C ++ cơ bản trong trường đại học của mình nhưng tôi không thể tưởng tượng được mình có thể sử dụng kiến ​​thức của mình ở đâu và tôi nên đi học C ++ theo hướng nào.

Nói cách khác, tôi nên học gì để trở thành một lập trình viên C ++ thành công?

Hiện tại tôi đang học Java chỉ vì tôi không thấy rõ C ++ ở khu vực nào có thể hữu ích ngày hôm nay, nhưng tôi biết rõ loại công việc nào tôi sẽ làm với tư cách là một lập trình viên Java. Nhưng tôi vẫn hy vọng rằng C ++ chưa chết.


2
Đây là quan điểm của tôi. C ++ rất hữu ích trong tình huống thời gian thực (và trò chơi điện tử). Tôi cũng sử dụng C ++ cho các ứng dụng máy tính để bàn (đừng quên Qt) vì lý do biểu diễn.
hosomaki

1
@stign IMO có khả năng cuối cùng nó sẽ chết vì có thể sẽ đến lúc tất cả các ngôn ngữ ngày nay đã lỗi thời (có thể là do những thay đổi lớn trong phần cứng được sử dụng).
Kenneth

17
C ++ còn lâu mới chết (tôi viết mã mới mỗi ngày) và nếu COBOL là bất kỳ dấu hiệu nào, tôi sẽ làm việc trong nhiều, nhiều năm tới.
Michael Kohne

2
Hãy xem Beacon Ngôn ngữ lập trình và đưa ra kết luận của riêng bạn: lextrait.com/vincent/im THỰCations.html
Nemanja Trifunovic

1
Gần đây tôi đã xem một số video thú vị trên kênh 9 của Microsoft . Microsoft đã chi hàng triệu đô la cho nghiên cứu thị trường và dựa trên nghiên cứu của mình, họ nói về sự phục hưng của C ++. Xem video này .
Grokus

Câu trả lời:


57

Tính năng sát thủ của C ++ là quản lý tài nguyên giới hạn phạm vi , SBRM (thường được gọi là " RAII "). Đây là ngôn ngữ lập trình công nghiệp duy nhất được xây dựng xung quanh khái niệm này. Trong C ++, thời gian sống của tất cả các đối tượng được biết chính xác và các chương trình C ++ (được viết tốt) đảm bảo rằng các tài nguyên được thu nhận và phát hành theo cách xác định đầy đủ. Trong so sánh, các ngôn ngữ được thu gom rác hoặc quản lý khác không cung cấp bất kỳ đảm bảo nào như vậy; trong thực tế, các đối tượng trong các ngôn ngữ đó có thể tồn tại sau khi kết thúc cuộc đời.

Đó là lý do tại sao C ++ được sử dụng trong tài chính, trò chơi video, hệ thống nhúng và thời gian thực hiệu suất cao, vận chuyển, sản xuất và các ngành công nghiệp khác trong đó tính quyết định và độ chính xác là quan trọng. Không có lựa chọn thay thế.

Cấp, nó đã được sử dụng cho nhiều nhiệm vụ hơn thế này và những nhiệm vụ đó đang bị mất đối với C # và Python và các ngôn ngữ phù hợp khác, nhưng điều đó không ảnh hưởng đến thị trường cốt lõi của nó.


20
Bất cứ ai sử dụng malloc trong C ++ đều muốn đánh vào đầu họ bằng một vật cứng. Ngoài ra, có một tính năng ít được biết đến của toán tử newtrong C ++ được gọi là vị trí. Nó cho phép tái sử dụng một không gian bộ nhớ hiện đang chiếm dụng. Vì vậy, nếu ai đó muốn tránh (hoặc giảm thiểu) sự phân mảnh họ có thể, theo lý thuyết, hãy làm điều đó. Và dự đoán không phải là quyết định tương tự.
Tamás Szelei

4
@Apalala C ++ cũng có tính tham chiếu, nhưng nó tệ hơn nhiều so với SBRM về mặt quản lý trọn đời đối tượng. Tôi không chỉ nói về tính xác định RT cứng, tôi đang nói về hành vi xác định của mô hình đối tượng.
Cubbi

4
Khi tôi học C ++, RAII không được biết đến rộng rãi; Tôi đã học mới và xóa và quản lý con trỏ dựa trên não. Vì vậy, tôi không nghĩ rằng bạn có thể mô tả nó là "được xây dựng xung quanh khái niệm". Các thư viện và các cấu trúc hỗ trợ khác được sử dụng ngày nay có thể có, nhưng không phải là ngôn ngữ hoặc cú pháp cốt lõi.
jprete

7
@jprete Đúng là nhiều điểm mạnh của C ++ đã được phát hiện chứ không phải là thiết kế. Bài này là về ngôn ngữ sau năm 2005.
Cubbi

5
RAII được thiết kế thành C ++. Nhưng hầu hết các lập trình viên C ++ chỉ tiếp tục viết C, thay thế malloc bằng mới và miễn phí bằng xóa.
kevin cline

40

Có một vài thị trường cho C và C ++ (theo hiểu biết hạn chế của tôi)

  1. Mã hiện có. C và C ++ có một số cơ sở mã lớn nhất hiện có xung quanh. Mã có kích thước này không thể bị loại bỏ chỉ vì "ngôn ngữ mới nóng tiếp theo" đã xuất hiện. Các liên kết C gần như là tiêu chuẩn của tương tác giữa các ngôn ngữ trên hầu hết các nền tảng, do đó, việc có thể tác giả (ít nhất) các thư viện trình bao bọc trong C hoặc C ++ là hữu ích.
  2. Các ứng dụng hiệu suất cao (ví dụ tài chính tần số cao). C và C ++ vẫn đạt được hiệu suất tổng thể tốt hơn so với hầu hết các ngôn ngữ lập trình khác. Quan trọng nhất trong C ++, người ta thường xây dựng các bản tóm tắt với những thứ chỉ có trình biên dịch như các mẫu, giúp chuyển tính toán từ thời gian chạy sang thời gian biên dịch (làm cho ứng dụng tổng thể của bạn nhanh hơn).
  3. (Tương tự như 2) Ứng dụng có độ trễ thấp. Các ngôn ngữ chạy trên, ví dụ CLR hoặc JVM thường có thể nhanh gần bằng C ++ tùy thuộc vào ứng dụng, nhưng người ta vẫn cần tự tải CLR hoặc JVM vào bộ nhớ trước khi chương trình của bạn có thể thực thi. Nếu bạn có yêu cầu khởi động khó khăn thì điều này rất quan trọng. CHỈNH SỬA TỪ COMMENT : Đối với vấn đề đó, các yêu cầu về độ trễ cứng của bất kỳ mô tả nào đều được lưu ý ở đây. Các ngôn ngữ chạy trên máy ảo hiếm khi đưa ra giới hạn thời gian khó vì chạy ví dụ như thu gom rác không phải là một quy trình xác định.
  4. Những hệ thống nhúng. Một số hệ thống nhúng có phần cứng để chạy, ví dụ như JVM (Android của Google (Được rồi, nó không thực sự là JVM, nhưng nó đóng), Blackberry của RIM) hoặc CLR (Windows Phone), nhưng hầu hết các hệ thống nhúng không có khả năng chạy các ngôn ngữ yêu cầu hỗ trợ nhiều thời gian chạy hơn so với yêu cầu đối với C hoặc C ++ (bên cạnh không có hỗ trợ thời gian chạy nào cả).
  5. Triển khai các ứng dụng bị hạn chế. Đôi khi, yêu cầu cài đặt JVM hoặc CLR là quá mức cần thiết nếu toàn bộ chương trình của bạn chỉ có vài trăm KB. (Ví dụ: hầu hết các chương trình tôi làm việc phải được triển khai dưới dạng một .EXEtệp mà không có bất kỳ loại trình cài đặt nào hoặc bất cứ thứ gì tương tự; vì điều này không có lựa chọn thay thế nào)

2
Độ trễ khởi động không phải là loại độ trễ duy nhất cần quan tâm: Yêu cầu thời gian thực cứng có thể là một công cụ giải quyết lớn hơn nhiều.
greyfade

1
Thêm vào bất cứ điều gì mà bạn không muốn bị khóa trong một nhà sản xuất cụ thể (C # hoặc Objective-C) hoặc không muốn ngôn ngữ của bạn biến mất trong một loạt các vụ kiện (Java)
Martin Beckett

@greyfade: Đó là những gì tôi muốn nói (2), nhưng tôi đồng ý rằng điều đó không rõ ràng. Đã chỉnh sửa. @Martin: Mặc dù tôi nghĩ đó là một thế mạnh tốt cho C ++, tôi không nghĩ nó trả lời cho câu hỏi - đó là những gì thị trường mà C ++ thường được sử dụng. Ngoài ra, tôi không nghĩ rằng mình đã gọi C # bị khóa với một nhà sản xuất cụ thể khi tồn tại phiên bản CLR được cấp phép <S> BSD </ S> (OOPS: Đó là LGPL) (mono).
Billy ONeal

1
Ngoài ra 5. Hệ điều hành và khung cốt lõi. Bạn có thể làm rất nhiều thứ trong một máy ảo, nhưng máy ảo vẫn phải được triển khai trong C và / hoặc C ++.
Jan Hudec

1
@Jan: Vâng. Những thứ như sự phản chiếu và bạn bè sẽ gây ra vấn đề 2-4. Tập hợp con duy nhất bạn thực sự cần để viết trình thu gom rác sẽ là một đối tượng đại diện cho bộ nhớ vật lý.
Billy ONeal

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.