Nếu có, bạn sẽ sử dụng nó ở đâu và tại sao?
Nếu không, vui lòng cung cấp giải thích lý do tại sao C không được bạn chấp nhận.
Nếu có, bạn sẽ sử dụng nó ở đâu và tại sao?
Nếu không, vui lòng cung cấp giải thích lý do tại sao C không được bạn chấp nhận.
Câu trả lời:
Tôi sẽ sử dụng C nếu tôi triển khai một số trình điều khiển phần mềm. Và tôi sẽ sử dụng C nếu tôi triển khai kernel Hệ điều hành hoặc Máy ảo của riêng tôi.
Đó là một ngôn ngữ rất tốt để làm những việc ở cấp độ thấp nếu bạn phải xử lý các API hệ điều hành phần cứng hoặc cấp thấp cho API Windows, Linux, Mac OS X, Solaris, v.v ... Các hệ thống nhúng thường hỗ trợ tốt cho C với một trình biên dịch + bộ phát triển.
Phải, tất nhiên. Tôi sẽ sử dụng C để viết các phần quan trọng của hệ thống hoặc các phần giao tiếp cấp thấp. Ví dụ, tôi sẽ sử dụng C để viết NIF trong dự án Erlang chỉ vì nó là Công cụ phù hợp (tm) cho loại công việc này. Hoặc tôi sẽ sử dụng C để viết các phần tương tự (XS) trong dự án Perl.
Tôi sử dụng C chuyên nghiệp, gần như mỗi ngày. Trong thực tế, C là ngôn ngữ cấp cao nhất mà tôi thường xuyên lập trình.
Nơi tôi sử dụng C: Tôi viết mã thư viện cấp thấp có yêu cầu phải hiệu quả nhất có thể. Mã keo của tôi được viết bằng C, các vòng tính toán bên trong được viết bằng cách lắp ráp.
Tại sao tôi sử dụng C: Việc xử lý các cấu trúc đối số phức tạp và các điều kiện lỗi phức tạp hơn nhiều so với khi lắp ráp và chi phí hiệu năng cho loại kiểm tra điều kiện đó trước khi bắt đầu tính toán thực thường không đáng kể. Vì C là một ngôn ngữ đơn giản, được chỉ định rõ ràng, tôi có một thời gian dễ dàng làm việc với nhóm trình biên dịch để cải thiện việc tạo mã bất cứ khi nào tôi thấy mã được biên dịch với các mối nguy hiệu năng không thể chấp nhận được.
Tính di động là một ưu điểm tuyệt vời khác của C. Mã keo của tôi được chia sẻ trên nhiều triển khai phần cứng dành riêng cho các thư viện tôi làm việc, điều này thực sự đơn giản hóa việc hỗ trợ cho các nền tảng mới. Hầu hết các nền tảng không có máy ảo hoặc trình thông dịch cho hương vị ngôn ngữ của tháng. Một số nền tảng không có trình biên dịch C ++ tốt. Có rất ít nền tảng thiếu trình biên dịch C có thể sử dụng được (và, vì tôi có mối quan hệ làm việc tốt với nhóm trình biên dịch của chúng tôi, tôi thường không gặp khó khăn khi nhận được sự hỗ trợ tôi cần).
Có, tôi sẽ sử dụng C trong một hệ thống nhúng bị hạn chế tài nguyên nghiêm trọng. Tôi có thể sử dụng C ++ thay vì vì nó giúp dễ dàng quảng bá các giao diện mạnh giữa các thành phần phần mềm, nhưng chỉ khi tất cả các kỹ sư làm việc trong dự án hiểu rằng C ++ dễ bị lạm dụng dẫn đến phình to kích thước mã (các hàm và mẫu ảo là ví dụ về những điều cần tránh ).
Tôi cũng thấy một lập trình viên C ++ đang cố gắng tạo một đối tượng 10K trên ngăn xếp 1K, không phải là một ý tưởng hay.
virtual
chức năng đều ổn vì chúng tuân theo nguyên tắc "bạn không trả tiền cho những gì bạn không sử dụng", nhưng trong môi trường bị hạn chế về bộ nhớ, bạn có thể muốn vô hiệu hóa các ngoại lệ và RTTI.
Tôi làm việc chủ yếu với Xen hypanneror, các thư viện các loại mà nó có và nhân Linux. Thỉnh thoảng, tôi phải viết trình điều khiển thiết bị (hoặc viết lại một trình điều khiển để các máy ảo nxx có thể chia sẻ một thiết bị duy nhất như HRNG). C là ngôn ngữ chính của tôi và tôi khá hài lòng với điều đó.
Tôi sẽ cố gắng viết một chương trình bảng tính bằng cách sử dụng nó? Không đời nào. Mỗi công cụ đều có ứng dụng của nó và tôi rất vui vì tôi có nhiều công cụ.
Tôi yêu C, nhưng tôi không thử đập vít bằng búa.
Nếu C là một lựa chọn hợp lý cho một dự án mới, chắc chắn. Nếu không, tôi sẽ sử dụng thứ khác.
Tôi sẽ cho một số dự án. Chắc chắn là nếu tôi phải thực hiện một hệ thống nhúng, hãy nói về bộ điều khiển của máy bay tự trị. Thậm chí có thể đi cấp thấp hơn trên một số bộ phận với lắp ráp.
Nếu nó phù hợp với dự án, tôi không có vấn đề với nó.
Nếu bạn muốn phát triển một ứng dụng web, hmm, có lẽ là không (hoặc tôi cần xem một lời biện minh rất mạnh mẽ và được hỗ trợ thực tế).
Tôi cũng sẽ sử dụng nó từ các dự án khác chủ yếu được phát triển với các ngôn ngữ khác khi một nút cổ chai đã được xác định rõ ràng và việc tối ưu hóa có thể được thực hiện bằng mã gốc. Chẳng hạn, một giải pháp Java cần được thực hiện các tính toán chuyên sâu cho một số kết xuất nâng cao (giả sử, một công cụ kết xuất hoặc một cái gì đó). Bạn có thể mặc định triển khai Java nếu đó không phải là một nền tảng được hỗ trợ, nhưng cung cấp một triển khai được biên dịch nguyên gốc từ C cho một số nền tảng được hỗ trợ và có được sự tăng hiệu năng tốt.
Mỗi ngôn ngữ ngoài kia có một cách sử dụng thích hợp. Tôi thường thấy mình thực hiện mọi thứ bằng các ngôn ngữ cấp cao hơn, và sau đó dần dần đưa chúng xuống đất C nếu tôi cần chúng có hiệu suất cao hơn hoặc thậm chí chỉ đơn giản là dễ mang theo hơn. Có các trình biên dịch C cho gần như mọi thứ tồn tại và nếu bạn viết vào một API có sẵn trên toàn cầu (như POSIX), thì nó có thể rất hữu ích.
Điều tôi thường nói với những người quan tâm đến việc học lập trình ngày nay là đảm bảo rằng đến một lúc nào đó, họ học C và trở nên thoải mái với nó. Bạn có thể thấy mình trong hoàn cảnh mà bạn cần nó. Trong nhiều lần, tôi đã phải biên dịch một chương trình "khởi động lại nhanh" nhỏ, được liên kết tĩnh và sử dụng scp để đặt nó vào đĩa RAM trên máy chủ nơi hệ thống con đĩa hoàn toàn biến mất. (Máy chủ giá rẻ, giá rẻ, không có dự phòng trực tuyến và chỉ có khả năng tải một chương trình nhỏ? C là cách để đi.)
Ngoài ra, học cách làm việc trong C mà không tự bắn vào chân mình có thể đóng góp đáng kể vào khả năng viết hiệu quả trong các ngôn ngữ và môi trường khác. Ít nhất, đó là kinh nghiệm của tôi.
Mặc dù tôi chắc chắn không sử dụng nó cho mọi thứ, hoặc thậm chí hầu hết mọi thứ, nó có vị trí của nó và nó khá phổ biến: vì vậy, tôi đã sử dụng nó trong quá khứ và sẽ sử dụng nó trong tương lai (mặc dù tôi không biết khi nào vào lúc này).
Vâng, tôi làm điều đó mọi lúc.
Nếu bạn không gọi bất kỳ thư viện nào, mã được tạo từ C không yêu cầu hỗ trợ HĐH. Nó cũng cung cấp cho bạn quyền kiểm soát tốt đối với ngôn ngữ máy được tạo. Vì vậy, thật tuyệt vời khi viết trình điều khiển hoặc mã khác sống trong không gian kernel và các tình huống bị ràng buộc khác như nhiều loại hệ thống nhúng hoạt động. Đây cũng là ngôn ngữ chính cho các dự án nguồn mở mà tôi làm việc như X Windows, GTK + và Clutter.
Mặc dù bạn có thể làm mọi thứ trong C, bạn có thể làm trong C ++, nhưng các cơ chế của C ++ giúp viết mã nhanh hơn và dễ dàng hơn. Tôi yêu OOP và cách các lớp C ++ gói gọn chức năng và tôi yêu RAII. Việc sử dụng cẩn thận việc gọi hàm hủy tự động khi một đối tượng vượt ra khỏi phạm vi sẽ loại bỏ hầu hết các rò rỉ bộ nhớ và tài nguyên là nguyên nhân chính của lập trình C. STL về cơ bản là một thư viện khổng lồ gồm các thuật toán và cấu trúc dữ liệu được tối ưu hóa cao; nếu bạn muốn sử dụng chúng từ C, bạn phải tự viết chúng hoặc mua chúng ở đâu đó.
Thật không may, vì lý do tôi không hiểu, hệ thống thời gian chạy trên Linux yêu cầu thư viện đối tượng chia sẻ đặc biệt (tương đương với DLL trên Windows, dylib trên Mac) để chạy bất kỳ C ++ nào và không tìm thấy khi bạn chạy chương trình C. Vì vậy, tôi không thể thực hiện một trong những thủ thuật Mac và Windows yêu thích của mình, đó là viết một đối tượng chia sẻ dựa trên C ++ với API dựa trên C và gọi nó từ chương trình C.
Vì vậy, đây là quá trình ra quyết định của tôi:
Một điều tuyệt vời là vì C ++ có thể biên dịch C, nếu bạn thực sự cần kiểm soát chi tiết đối với mã được tạo cho một tình huống cụ thể, bạn chỉ có thể viết C cho điều đó và C ++ cho phần còn lại và biên dịch tất cả bằng trình biên dịch C ++ .
nếu nó phải là cả hai
sau đó tôi sử dụng C. Có thể C ++.
Vâng, trên thực tế tôi có gần đây!
Tôi thích lập trình ở C. Tôi hầu hết lập trình bằng python, nhưng có những lúc tôi cần mã nhanh và tôi thực sự thích sự thanh lịch đến từ sự đơn giản của ngôn ngữ.
Dự án tôi đang làm bây giờ là một cơ sở dữ liệu, như bạn có thể tưởng tượng, là hiệu suất quan trọng. Hiện tại tôi đang sử dụng C và một số con trăn, nhưng cuối cùng nó sẽ chủ yếu, nếu không hoàn toàn là C.
Đúng. Tôi đã dành phần lớn sự nghiệp lập trình C ++ của mình, nhưng bây giờ tôi viết phần lớn mã của mình bằng Ruby và nếu tôi cần hiệu suất hoặc quyền truy cập vào các công cụ cấp thấp, tôi viết phần mở rộng C. Đó là Người đàn ông tương lai!
Tôi sẽ sử dụng C nếu tôi đang viết một hệ điều hành. Vì điều đó sẽ không xảy ra trong hai mươi năm tới, trừ khi tôi trúng xổ số và không có gì khác để làm ngoài bản phân phối Linux tuyệt vời của riêng tôi, có lẽ tôi sẽ chỉ sử dụng C #, Java, Python, v.v. Tôi đã sử dụng C trong một thời gian rất dài nhưng tôi luôn thích sử dụng nó; Mặc dù vậy, tôi nghĩ rằng, những ngày này, đầu tôi rất quấn quanh OO nếu tôi phải quay lại với nó, tôi sẽ phải mất một chút để quay trở lại.
C ++ có khả năng di động trên các nền tảng và các thiết bị nhúng như vi điều khiển. (C ++ có thể được biên dịch thành C, do đó, vi điều khiển.)
C thậm chí còn có thể di động (như các chức năng nước ngoài) sang các ngôn ngữ khác. Do đó, nếu tôi lập trình các thư viện cấp thấp, thì tôi muốn tương thích nhiều hơn C ++.
Haskell có khả năng di động trên các nền tảng (ARM sắp ra mắt) nhưng KHÔNG được nhúng các thiết bị như vi điều khiển. Tốc độ của nó tương đương với C và C ++; nhưng vì nó hoạt động, nó sử dụng trình thu gom rác thay vì ngăn xếp thời gian chạy, do đó nó có thể nhanh hơn và chậm hơn C vào các thời điểm khác nhau (thu gom rác) và trong các tình huống khác nhau (tiếp tục thay vì các cuộc gọi phụ).
Tôi chọn ngôn ngữ trừu tượng nhất có thể, bởi vì tốc độ chương trình không khác nhau nhưng thời gian phát triển và tốc độ lỗi. C và C ++ khác nhau nhiều, nhưng không phải theo quan điểm của Haskell.
Tôi không thích các ngôn ngữ khác, mặc dù tôi biết một hoặc hai bàn tay đầy đủ. Sọ ngoại trừ trong một vài trường hợp, tốt, bash .
Các hệ thống nhúng thường có không quá vài kilobyte RAM và có lẽ vài chục kilobyte flash, với tốc độ xung nhịp của bộ xử lý là vài MHz. C là lựa chọn duy nhất có ý nghĩa trong môi trường kim loại trần như vậy.