đầu tiên thì có hiểu pointer là cái gì không đã rồi nói tiếp?
dm định trả lời chi tiết cơ mà cảm giác đàn gẩy tai trâu mệt vkl.
--> mày đừng bảo tao ko biết pointer là gì. Muốn nói gì cứ nói, tao hầu.
nói câu này thôi là đủ biết đéo biết cái kẹc gì chỉ giỏi phán bừa. lisp ra đời trước c cả chục năm, các khái niệm như GC, automatic memory management đều có cả, cũng có một tá ngôn ngữ khác cùng thời có nhiều thiết kế không có pointer, memory safety các kiểu.
nhưng mà cuối cùng tại sao mấy thằng kia dẹo gần hết, chỉ có c/c++ là trùm, cho tới bây giờ vẫn là lựa chọn hàng đầu để viết những ứng dụng cốt lõi? đơn giản vì tất cả lựa chọn của nó đều là tối ưu cho performance, cho nên từ đầu tới cuối, chỉ là performace và trade off, đéo liên quan kẹc gì tới mấy cái "an toàn" "bảo mật" mà bạn xl.
mà tiếp đến thì hầu như tất cả các ngôn ngữ hiện tại bây giờ đều phụ thuộc vào c/c++ (bởi vì xuống đến đáy để gọi system call thì phải có các cấu trúc dữ liệu compatible với mấy function của kernel được implement bởi c/c++), aka dù các bạn đíu được dùng thì pointer nó vẫn đang hoàng hoành ở tầng đáy, cái các bạn đang sử dụng chẳng qua là đã bị ẩn sau một vài cái abtraction layer thôi, đừng nói cứ như là nó sắp dẹo cmr. Dù low level như rust lúc nào cũng bô bô tao memory safety, cơ mà đến lúc cần vẫn phải dạng háng ra viết unsafe {}.
khác biệt duy nhất là lúc trước pointer là trao tận tay cho developer, bây giờ nó ẩn đi ở level thư viện hoặc language implemetation thôi.
mà nói memory safety xong lại đi đổ lỗi cho memory management thì khác gì đái dầm đổ tại chim. post cái link kia mà đéo đọc kỹ những gì nó nói, kể cũng phục.
==> đọc kỹ giùm tao đoạn này: Around 70% of our high severity security bugs are memory unsafety problems (that is, mistakes with C/C++ pointers). Half of those are use-after-free bugs.
Biết Use-after-free là gì ko? Đến cả dev của Google còn gặp những cái lỗi như thế thì hỏi sao bên ngoài ko lỗi đầy.
Nên sau này c++11/14 mới phải đẻ ra cái smart pointer, để dev khỏe hơn và tránh dc bớt cái lỗi này. Nhưng cục codebase của Chrome nó quá lớn rồi, đến giờ Chrome nó còn đang suy nghĩ có nên cấm xài hẳn luôn raw pointer trong C++ hay ko!
Nói thế để mày hiểu, C++ nó performance là ko sai, nhưng nó unsafe. Đéo phải tự dưng thằng Firefox phải đi chế ra thằng Rust, đéo phải rảnh rỗi nhé.
C++ nó đéo có GC vì nguyên tắc thiết kế của nó, nhưng giờ Google phải đi chế 1 cái GC library cho Chromium!
Còn cách đây mấy chục năm, lúc đó "an toàn" hay "bảo mật" thông tin nó đéo phải là cái gì ghê gớm. Đó là sự thật,
nên các thiết kế lúc đó đều ko quá care tới chuyện này, bản thân cái raw pointer nó là 1 ví dụ điển hình.
Đéo riêng gì C++ mà rất nhiều thiết kế đều gặp vấn đề đó, nhất là các thiết kế bên network protocol. Sau này người ta mới khắc phục dần thôi.
Mày cứ thử đi dạo 1 vòng các cuộc thi tìm lỗ hổng đi, xem bao nhiêu thằng lợi dụng các lỗi về "buffer overflow", "use-after-free" mà đoạt giải.
C++ như 1 con dao sắc vậy, chơi dao sắc thì có ngày đứt tay. Thế thôi!
Đéo riêng gì Google, tới cả thằng Microsoft cũng thế. Những bản update windows/office 70% là để vá các lỗ hổng như "use-after-free".
Tất nhiên, có những nơi, C++ ko thể thay thế. Đó là sự thật và C++ là 1 ngôn ngữ mạnh, tao ko phủ định điều này. Nhưng nó có nhược điểm, và trong cái thớt này, tao nói về pointer và nhược điểm của memory management trong C++.