Là nó phổ biến cho nguyên mẫu trong một ngôn ngữ cấp cao hơn? [đóng cửa]


18

Tôi hiện đang chơi với ý tưởng bắt tay vào một dự án vượt xa khả năng lập trình hiện tại của tôi bằng ngôn ngữ mà tôi có rất ít kinh nghiệm trong thế giới thực trong (C). Liệu nó có giá trị đối với nguyên mẫu ở ngôn ngữ cấp cao hơn mà tôi quen thuộc hơn (như Perl / Python / Ruby / C #) chỉ để tôi có thể thiết kế tổng thể?

Cuối cùng, sản phẩm cuối cùng nhạy cảm với hiệu năng (đó là công cụ cơ sở dữ liệu), do đó, lựa chọn C, nhưng tôi sợ không biết C sẽ khiến tôi mất rừng vì cây.

Trong khi tìm kiếm các câu hỏi tương tự, tôi nhận thấy một đồng nghiệp đề cập rằng các lập trình viên đã sử dụng nguyên mẫu trong Prolog, sau đó quay nó ra trong trình biên dịch chương trình.


4
Tôi đã nghe nói về những người sẽ viết trình biên dịch bằng cách mã hóa đầu tiên những gì họ muốn trong C, sau đó tháo rời nó và điều chỉnh thủ công kết quả.
dùng16764

9
Đừng quên rằng hiệu suất thường xuyên hơn là không tham gia vào việc lựa chọn và triển khai thuật toán chính xác, viết mã song song cho các vấn đề song song rõ ràng và biểu diễn dữ liệu tốt. Đừng lo lắng về C cho đến khi bạn có được thiết kế đúng.
Peter Smith

1
@ user16764: Thực tế đã làm điều đó. Ngoại trừ ngôn ngữ là Fortran. Nhưng chúng tôi tinh chỉnh đầu ra trình biên dịch chính xác như bạn mô tả.
S.Lott

C không nhất thiết phải nhanh hơn. Đặc biệt là nếu hiệu suất bị ràng buộc IO. Ngay cả đối với hiệu năng gắn với CPU, nếu bạn không phải là chuyên gia về C thì một VM được tối ưu hóa có thể vượt trội hơn bất cứ thứ gì bạn tự viết.
năm11

Tôi thường sử dụng kỹ thuật tạo mẫu này: một vấn đề được thể hiện bằng ngôn ngữ tự nhiên nhất của nó, cuối cùng được thực hiện dưới dạng DSL. Sau đó, khi nguyên mẫu kết thúc, thay vì mã hóa một phần DSL thành ngôn ngữ cấp thấp hơn, tôi cải thiện việc thực hiện trình biên dịch DSL này, cho đến khi hiệu suất được chấp nhận.
SK-logic

Câu trả lời:


27

Sử dụng C không tự động làm cho ứng dụng của bạn nhanh hơn. Khi bạn có khả năng chọn một ngôn ngữ lập trình khác cho nền tảng của mình, tôi đánh giá cao nó.

Như Bill Harlan đã nêu :

Dễ dàng tối ưu hóa mã chính xác hơn là sửa mã được tối ưu hóa . Tối ưu hóa sớm thực sự cản trở tối ưu hóa trong thời gian dài. Tối ưu hóa không cần thiết làm biến dạng thiết kế, phá hủy mô đun và ẩn thông tin và làm cho mã khó sửa đổi hơn nhiều. Lỗi tiềm ẩn mất nhiều thời gian để tìm thấy. Chúng tôi thường khám phá bằng cách định hình, hoặc bằng cách thay đổi máy hoặc trình biên dịch, rằng chúng tôi đánh giá sai nỗ lực tính toán của mã của chúng tôi. Đoán xem cái gì? Bây giờ, tối ưu hóa là khó khăn hơn nhiều so với nó phải có.

Nếu bạn thực sự có thể dự đoán các vấn đề về hiệu suất, hãy xem xét sử dụng C ++. cprogramming.com từ nó rất độc đáo :

Bạn có thể tự hỏi, tuy nhiên, cho dù nó có giá trị đưa lên có thể dùng lại của C ++ để có được sự gia tăng nhỏ trong hoạt động với C, đặc biệt là khi C ++ lon, khi cần thiết, được viết bằng một phong cách lập trình C .


Để trả lời tốt hơn câu hỏi thực tế của bạn: Tôi sẽ viết mã bằng ngôn ngữ cấp cao hơn, không chỉ là nguyên mẫu và chỉ tối ưu hóa bằng ngôn ngữ cấp thấp hơn khi bạn gặp phải vấn đề về hiệu suất.


25
+1: Ngoài ra, Perl, Python và Ruby có thể gọi các hàm C, vì vậy bạn có thể viết các phần nhạy cảm với hiệu suất trong C nếu cần.
Larry Coleman

Tôi đã tạo nguyên mẫu mã thị giác máy trong Java; mà nó bật ra là thực sự đủ nhanh. Việc mã hóa lại thành C sẽ khá dễ dàng (bạn chỉ cần viết nó như C; bằng cách sử dụng antipotype cố định nguyên thủy)
Tim Williscroft

Tôi đã viết mã thời gian thực bằng Java. Trong dự án cụ thể đó, việc truy cập tệp được thực hiện với C ++ và mã thời gian thực là bằng Java - crazy! Tuy nhiên, mã thời gian thực đã rất nhanh. Nó không phức tạp lắm, nhưng nó đã xử lý lượng dữ liệu đáng kinh ngạc trong thời gian ngắn. Vì vậy, tôi muốn nói rằng bạn chắc chắn có thể sử dụng các ngôn ngữ cấp cao cho các ứng dụng nhạy cảm với hiệu suất.
cấu hình

@Tim Williscroft: Tôi dường như chỉ bật trang này lên khi tôi tìm kiếm "antipotype cố định nguyên thủy". Đó là gì?
SingleNegationElimination

@TokenMacGuy: nỗi ám ảnh nguyên thủy có nhiều lượt truy cập hơn (cùng antipotype)
Tim Williscroft

7

Sẽ không có giá trị khi làm điều đó, bởi vì a) các phần của những ngôn ngữ dịch trực tiếp sang C sẽ không đơn giản hơn và b) các phần không dịch trực tiếp sang C sẽ khó viết lại bằng C hơn nếu bạn viết chúng bằng C ở vị trí đầu tiên.


+1 - Đặc biệt vì rất khó để chuyển mã OO sang C nếu bạn không quen với ngôn ngữ này hoặc nó sẽ khiến việc sử dụng ngôn ngữ cấp cao trở nên khó xử hơn nếu bạn viết theo cách thủ tục.
Jetti

Đúng chính xác. Tôi lo lắng rằng tôi vẫn có thể suy nghĩ trong các khái niệm cao hơn mà không dễ dàng dịch sang C, như nếu tôi sử dụng quá nhiều ma thuật hoặc đường.
Đánh dấu Canlas

4

Đây không phải là một câu hỏi với một câu trả lời phân loại có hoặc không. Cho phép tôi cân nhắc với một giai thoại.

ví dụ 1

Tôi được giao nhiệm vụ chuyển một trò chơi viết bằng Java sang Flash, AS3. Nhìn bề ngoài, điều này có tiềm năng để đi tương đối trơn tru. Rốt cuộc, bạn có thể coi một công việc như vậy rõ ràng hơn công việc khách hàng trung bình của bạn, bởi vì bạn đã có một đặc tả chức năng được xây dựng hoàn chỉnh dưới dạng trò chơi nguồn. Java và AS 3 đều là ngôn ngữ cấp cao và AS3 có nhiều đặc điểm chung với Java, chẳng hạn như cấu trúc gói, kiểu thừa kế đơn / đa giao diện, gõ mạnh (chọn tham gia) và khái niệm biến công khai / được bảo vệ / riêng tư và khai báo hàm. Lúc đó tôi vẫn còn rất xanh ở Java và hoàn toàn mới với cơ sở mã nguồn gốc. Vì vậy, tôi chỉ tìm hiểu những gì tôi có thể tìm thấy với hy vọng rằng nó sẽ nhanh chóng và dễ dàng.

Khi nó bật ra, tác giả của mã đã cố gắng tạo ra một công cụ trừu tượng có thể được chuyển từ Java sang một số môi trường khác không xác định. Điều này cho tôi hy vọng rằng nó sẽ đơn giản đến cảng. Thật không may, thay vào đó, điều tôi khám phá ra là tôi đang nhìn vào viễn cảnh tái phát minh chính Flash trên đầu Flash, mà không có lợi ích của Chủ đề. Một cổng theo nghĩa đen, như hóa ra, đơn giản sẽ là một ý tưởng tồi ... một cơn ác mộng hiệu suất. Trên hết, trò chơi đã triển khai ngôn ngữ kịch bản bên ngoài tùy chỉnh của riêng mình, điều đó có nghĩa là tạo một trình phân tích cú pháp và từ vựng cho ngôn ngữ đó nếu tôi hy vọng sử dụng tất cả các tệp dữ liệu nguồn gốc.

Cuối cùng, do hạn chế về thời gian và ngân sách, mã nguồn ban đầu không thực sự giúp ích nhiều. Phần hữu ích nhất khi có nó là tôi biết cách bắt chước chính xác luồng điều khiển của logic trò chơi ... nhưng tôi có thực sự cần nguồn ban đầu cho điều đó không? Chắc là không.

Nhưng ví dụ đó có thể không liên quan vì nó ngược lại với tình huống của bạn. Tôi đã hy vọng sử dụng một cơ sở mã mà tôi không viết, bằng ngôn ngữ mà lúc đó tôi không biết để tăng tốc độ phát triển trong một môi trường mà tôi rất quen thuộc. Vì vậy, đây là một ví dụ khác

Ví dụ 2

Lưu ý rằng nhà phát triển Java đã làm gì khi cố gắng tạo một cơ sở mã di động, tôi bắt đầu thực hiện một điều tương tự cho chính mình trong công việc Flash của mình ... viết mã không phụ thuộc quá nhiều vào việc mở rộng các lớp flash.display. * và sử dụng thành phần để tạo ra các khung nhìn. Không phụ thuộc quá nhiều vào flash.event. * Và thay vào đó viết một hệ thống truyền tin nhắn nhẹ của riêng tôi, không bị ràng buộc đặc biệt với ngôn ngữ hoặc nền tảng. Gần đây tôi đã hoàn thành một trò chơi bằng cách sử dụng khung công tác nói trên và muốn xem liệu có dễ dàng chuyển nó sang C # (Một ngôn ngữ mà tôi biết nhiều như nó giống với Java và AS3) như một dự án Unity 3D. Hóa ra, điều này đã thành công hơn nhiều! Bởi vì tôi nghĩ AS3 trôi chảy hơn so với C #, việc các thuật toán đã được viết đã tiết kiệm rất nhiều thời gian. Tất cả những gì tôi phải làm chỉ đơn giản là thay đổi cú pháp, đó không phải là '

Vì vậy, theo kinh nghiệm cá nhân của riêng tôi, tôi không thể nói câu trả lời luôn luôn là có hoặc không. Bạn nên xác định mức độ phụ thuộc vào các thành ngữ ngôn ngữ cụ thể mà bạn tình cờ có trong ngôn ngữ lựa chọn cấp cao của bạn và việc tạo lại chúng sẽ dễ hay khó trong C.


Câu chuyện thứ hai của bạn minh họa cảm giác của tôi. Tôi sẽ cố gắng giữ cho việc triển khai nguyên mẫu chung chung và ma thuật / mánh khóe, sao cho hầu hết nếu không phải tất cả các ý tưởng đều có thể được dịch sang C. Easier nói hơn là thực hiện, nhưng tôi nghĩ ở mức độ đủ cao, nó vẫn mang theo. Rõ ràng là ma quỷ nằm trong các chi tiết.
Đánh dấu Canlas

@Mark Canlas "ma quỷ nằm trong chi tiết." Chắc chắn rồi. Tôi nghĩ rằng có thể nỗ lực đầu tiên của bạn có thể gặp trục trặc nếu bạn chưa bao giờ chuyển mã giữa các ngôn ngữ hoặc môi trường trước đây chỉ vì khó có thể thấy trước tất cả các vấn đề tiềm ẩn cho đến khi bạn gặp phải chúng.
kịch bản

2

Tôi nghĩ rằng nó sẽ có giá trị để bắt đầu với mã giả. Viết một nguyên mẫu bằng ngôn ngữ khác có vẻ như là một sự lãng phí thời gian, vì ngôn ngữ cấp cao hơn của bạn không có khả năng dịch sang 'C' gần như mã giả.

Ngoài ra, bằng cách sử dụng mã giả, bạn sẽ phát triển sự hiểu biết tốt hơn về cách hệ thống của bạn thực sự hoạt động.

Trong cùng khoảng thời gian bạn đang làm việc với mã giả, bạn nên học C. Sau đó, khi bạn hoàn thành kế hoạch của mình, bạn có thể sẵn sàng thực hiện điều đó.

Vì lý do đề xuất của bạn để viết nó bằng ngôn ngữ khác là để giúp thiết kế được thực hiện, thay vào đó bạn có thể muốn sử dụng một số sơ đồ UML hoặc một cái gì đó có tính chất đó để bắt đầu.


2

Bạn có thể tạo nguyên mẫu cho thuật toán - giải quyết các lỗi thiết kế của logic lõi, sử dụng ngôn ngữ "mức rất cao" chắc chắn (giả sử, Matlab, có thể là Ruby). Sử dụng nó để chứng minh thuật toán của bạn hoạt động và hoạt động chính xác, sau đó triển khai nó từ đầu bằng ngôn ngữ "cấp thấp".

Bạn sẽ không đạt được nhiều nếu bạn chọn C ++ hoặc thậm chí Java hoặc C # là "mức cao" và C là "mức thấp" vì mức tăng khả năng đọc sẽ không đáng kể và "dịch" sẽ vẫn khá đau đớn và khá lỗi dễ bị. Ý tưởng là bản chất, động cơ của dự án của bạn khi thực hiện cấp cao không nên chiếm nhiều hơn một hoặc hai màn hình, dễ nắm bắt, dễ đọc và tất cả các cảnh báo đều rõ ràng - về cơ bản, là một khối có thể chạy được biểu đồ.


2

Một công cụ cơ sở dữ liệu chủ yếu là về việc xử lý I / O mức thấp theo cách tối ưu và xử lý các cấu trúc phức tạp như b-cây và các danh sách được liên kết một cách hiệu quả.

Vì vậy, đây chắc chắn là một vấn đề C / C ++, mặc dù có một số triển khai Java khá tốt ngoài kia.

Phát triển các thuật toán chính xác thực hiện tốt dễ dàng hơn nhiều trong ngôn ngữ cấp cao hơn. Nó thường là một trường hợp thử một vài biến thể và so sánh kết quả. Sau đó, bạn có thể dịch thuật toán "chiến thắng" sang C.

Một giải pháp thỏa hiệp có thể là viết triển khai ban đầu bằng một trong các ngôn ngữ JVM cấp cao hơn (Jython, Groovy đến với tâm trí) và sau đó chuyển từng lớp sang Java khi triển khai ổn định.


2

Tôi không nghĩ nó phổ biến, nhưng nó đã được thực hiện. Một trong những kiến ​​trúc sư sắc sảo nhất mà tôi từng làm việc đã từng làm mô hình hóa của anh ấy trong Python và sau đó thực hiện mã đó trong C ++.

Nói chung để làm cho điều này đáng giá, tôi nghĩ rằng bạn thực sự phải thực hiện các thuật toán phức tạp và tối ưu hóa cao mà không dễ dàng diễn đạt một cách đơn giản trong ngôn ngữ đích. Đối với hầu hết các tình huống "thế giới thực / doanh nghiệp", việc thể hiện ý định cấp cao trong cùng một ngôn ngữ mà chúng tôi đang nhắm mục tiêu tương đối dễ dàng và việc triển khai bằng ngôn ngữ nói đáp ứng các yêu cầu về hiệu suất của chúng tôi để không cần / mong muốn mô hình hóa ở mức cao hơn trình độ ngôn ngữ.

Với tình huống của bạn, nơi bạn có kiến ​​thức tốt hơn về ngôn ngữ cấp cao hơn, tôi có thể thấy phương pháp này hoạt động tốt trong thời gian ngắn. Nó không chỉ cung cấp cho bạn một lộ trình để theo dõi mọi thứ, mà nếu bạn có câu hỏi, bạn sẽ có thể hỏi với độ chính xác cao hơn.


1

Hiện tại tôi đang làm việc trong một dự án được viết bằng C "vì hiệu suất" (đây là động lực ban đầu), nhưng thực sự nếu được mô tả nó tiết lộ rằng nó dành phần lớn thời gian để chờ các hệ thống khác (DB, các ứng dụng khác được viết trong Java, "sự kiện" trên một ổ cắm).

Nếu bạn sử dụng thuật toán sai, bạn cũng có hiệu suất kém trong C (ví dụ: nếu bạn thực hiện tìm kiếm tuyến tính cho khóa, "vì C không có bảng băm và chúng tôi không muốn sử dụng các thư viện khác", bạn sẽ đi chậm hơn nếu bạn làm điều đó với một ngôn ngữ có các bảng băm hoặc tương tự như C ++, Java, C #, Python ... và vv).

Nếu bạn bị buộc phải làm điều đó trong C vì bất kỳ lý do gì, thì việc tạo mẫu bằng ngôn ngữ khác mà bạn biết là đối với tôi không phải là ý tưởng tồi nếu bạn biết rằng "vấn đề" nào bạn sẽ thực hiện C thực tế, điều đó thật khó nếu bạn không tự tin với C. (Bạn sẽ sớm phát hiện ra rằng các lib của C / C std không có container, chỉ là mảng "đơn giản"; bạn cần các thư viện không phải là tiêu chuẩn). Hơn nữa, C không phải là OO, vì vậy nếu bạn tạo mẫu theo kiểu OO, nó sẽ khó hơn.

Tóm tắt, điều tốt nhất cần làm là thực hiện thực tế bằng ngôn ngữ "tạo mẫu" của bạn, và sau đó, thực sự cần thiết, hãy viết các chức năng chuyên sâu cho CPU trong C, nhưng nếu chỉ có C chấp nhận được, hãy tìm hiểu kỹ hơn trước khi làm nguyên mẫu ngôn ngữ và tất nhiên trước khi viết thực hiện.


1

Có nhiều ứng dụng quan trọng về hiệu năng được viết bằng ngôn ngữ cấp cao hơn.

Tôi đã lập trình trong Trình biên dịch và C trong quá khứ, và mặc dù cảm giác rất tuyệt với kim loại, nhưng việc sử dụng chúng ngày nay rất hạn chế.

Có rất nhiều điều sẽ cản trở hiệu suất, mà tôi nghi ngờ bạn sẽ đạt đến phần mà chính ngôn ngữ là yếu tố hạn chế. Đây là xem xét nó là C vs C #.

Giả sử bạn tăng 10% -15% hiệu suất theo ngôn ngữ. Điều này không là gì so với các lệnh tăng cường độ trong việc thực hiện đúng thuật toán.

Khi bạn đang lập trình trong C #, bạn sẽ có nhiều thời gian hơn để tập trung vào kiến ​​trúc và thực hiện các thuật toán / cấu trúc dữ liệu, do đó dẫn đến tối ưu hóa ở mức cao hơn tốt hơn.

Trong thế giới thực, bạn luôn bị hạn chế về thời gian, vì vậy hãy dành thời gian cho phần bên phải của dự án.


0

Tôi tò mò không biết kế hoạch của bạn là gì để thực sự tạo ra nó trong C? Bạn đang đi đến nguyên mẫu và sau đó học C, và sau đó mã lại nó trong C? Đối với tôi, điều này có vẻ hơi giống câu tục ngữ "đôi mắt to hơn dạ dày" mà tôi nghĩ rằng rất nhiều lập trình viên bị cuốn vào khi học các công nghệ mới (tôi biết tôi có). Ý tôi là bạn đang cố gắng thiết kế một thứ gì đó rõ ràng là hiệu năng nhạy cảm mà không hề biết ngôn ngữ mà bạn cảm thấy cuối cùng cần phải viết, về cơ bản bạn muốn bắt đầu thiết kế ứng dụng C trước bạn biết C khi thời gian có thể tốt hơn dành cho việc học C đầu tiên và sau đó bạn có thể hiểu rõ hơn về cách viết ứng dụng bạn muốn. Có lẽ tôi đã nhầm câu hỏi và bạn có ý định chuyển nó cho một lập trình viên khác để xây dựng chương trình trong C,


Đôi khi "Đừng làm vậy." câu trả lời đúng cho "Làm thế nào để tôi làm X?"
Larry Coleman

0

Tạo mẫu đôi khi được thực hiện để đôi khi hiểu được vấn đề bạn đang cố gắng giải quyết. Và đôi khi, để tìm hiểu các công nghệ cơ bản nếu bạn chưa quen với nó.

Đối với trường hợp được đề cập, bạn đang xem xét nguyên mẫu bằng ngôn ngữ kịch bản, giả sử là python và để tạo mã thực tế trong C.

Đánh giá một số khả năng:

1 . Bạn nguyên mẫu bằng python và viết phần mềm bằng C.

Tạo mẫu bằng ngôn ngữ kịch bản có thể giúp bạn nhanh chóng kiểm tra đầu ra so với đầu vào . Điều này rất hữu ích nếu bạn chủ yếu cần kiểm tra logic của mình để giải quyết vấn đề. Ngoài ra, hữu ích nếu bạn muốn nhanh chóng kết hợp một bản demo cho người khác.

Bất cứ mã nào bạn viết bằng python sẽ không được sử dụng trong phần mềm cuối cùng. Nhưng, nó có thể hỗ trợ nếu bạn truyền lại nguyên mẫu của mình cho ai đó có thể đọc trăn và viết bằng C. Ở đây, tạo mẫu có thể giúp truyền đạt ý tưởng .

Phương pháp này phù hợp để kiểm tra tính khả thi logic của giải pháp.

2 . Bạn nguyên mẫu bằng C và viết phần mềm bằng C.

Tạo mẫu trong C, cái mới đối với bạn, có hai ưu điểm. Một, trong khi bạn viết nguyên mẫu, bạn có thể hiểu các phần có liên quan của ngôn ngữ , thư viện, API, cạm bẫy, v.v. Hai, trong khi bạn xây dựng phần mềm cuối cùng, bạn có thể bắt đầu từ chính nguyên mẫu giúp bạn tiết kiệm thời gian và sử dụng lại mã .

Phương pháp này phù hợp để thử nghiệm cả tính khả thi về mặt logic và công nghệ của giải pháp.

3 . Bạn có thể xem xét các cách không mã hóa thành nguyên mẫu tùy thuộc vào vấn đề hiện tại.

Nếu đó là một số logic và ý tưởng bạn muốn nguyên mẫu; mã giả , sơ đồ khốisơ đồ khối trên giấy cũng tốt.

Nếu nó là một nguyên mẫu UI, hãy xem xét một số công cụ mô phỏng UI hoặc một lần nữa, một số giấy.


0

Tôi nghĩ bạn nên tạo nguyên mẫu bằng ngôn ngữ mà bạn quen thuộc (Pytho / Ruby / C # không) để:

  1. Bạn tận dụng tốt nhất các cơ sở / thư viện mà ngôn ngữ cung cấp.
  2. Bạn dành thời gian để quyết định lựa chọn thiết kế thay vì giới hạn ngôn ngữ.

Sau đó, bạn có thể sử dụng một công cụ định hình để tìm các khu vực của cổ chai. Thực hiện lại trong C / C ++. Lặp lại bước trên một vài lần, ai biết nguyên mẫu của bạn có thể 'đủ nhanh'!


0

Tôi không nghĩ rằng bạn đạt được bất cứ điều gì theo cách tiếp cận bạn mô tả và một số người đã mô tả lý do tại sao một số chi tiết.

Một dự án mà tôi đã tham gia, đã sử dụng cách tiếp cận này: phát triển thư viện toán học cho các kiến ​​trúc Cell / BE và Power7. Các chức năng được mô hình hóa trong Haskell (sử dụng CoCoNUT) và các chức năng đầu ra được lắp ráp tối ưu hóa cho một kiến ​​trúc đích cụ thể.

Trong trường hợp này, các mục tiêu là hiệu suất cao với các hướng dẫn lắp ráp được điều chỉnh và khả năng nhắm mục tiêu vào nhiều kiến ​​trúc.

Thức ăn mặc dù, tôi hy vọng bạn không chết đói :)


0

Đối với một công cụ cơ sở dữ liệu hiệu suất cao, có lẽ bạn sẽ cần:

  • đa luồng,
  • quản lý bộ nhớ rõ ràng,
  • thông báo không đồng bộ,
  • semaphores hoặc đồng bộ nguyên thủy,
  • dễ dàng truy cập vào các chức năng hệ thống tập tin cấp thấp.

Các thuật toán bạn chọn là rất quan trọng đối với hiệu suất.

Lời khuyên chung là bắt đầu với một ngôn ngữ cấp cao, sau đó chỉ di chuyển các bit cần tối ưu hóa sang ngôn ngữ cấp thấp hơn.

Tuy nhiên , ngôn ngữ cấp cao bạn chọn phải có khả năng hỗ trợ các thuật toán bạn cần viết: và các thuật toán hiệu quả ở đây cuối cùng có thể bị chi phối bởi việc kiểm soát luồng, sử dụng bộ nhớ hiệu quả và sử dụng các hoạt động của hệ thống tệp cấp thấp tốt nhất có sẵn. Vì vậy, nếu mục tiêu cuối cùng là hiệu suất, bạn không thể tạo nguyên mẫu bằng các ngôn ngữ không hỗ trợ các nguyên thủy bạn cần sử dụng.

Nếu bạn cần kiểm tra nguyên mẫu của mình (hoặc người khác cần phát triển phần mềm dựa trên giao diện của nó), bạn cũng cần phải làm việc bằng ngôn ngữ hỗ trợ các API dự định. Sau đó, bạn có thể cho phép người khác kiểm tra mã của họ và thực hiện các bài kiểm tra hồi quy của riêng bạn trong khi tối ưu hóa.

Những cân nhắc này có thể loại trừ nhiều ngôn ngữ để tạo mẫu ở mức độ cao trong trường hợp này - và có lẽ tất cả những ngôn ngữ bạn đã đề cập (ngoại trừ có thể là C #). Nhưng tất nhiên, bạn có thể mã giả bằng bất kỳ ngôn ngữ nào (bao gồm tiếng Anh) và, nếu cần, bạn có thể tạo nguyên mẫu cho các dự án (ví dụ như sắp xếp các hàm) bằng ngôn ngữ ưa thích của bạn.

Mối quan hệ chặt chẽ giữa C ++ và C (và sự khác biệt hiệu suất không đáng kể) có nghĩa là có rất ít lý do để không thích C ++ hơn C trong sản phẩm cuối cùng.

(Tôi đang trả lời về giả định rằng bạn cần một công cụ cơ sở dữ liệu hiệu suất cao cho một mục đích cụ thể: nếu ý định của bạn khiêm tốn hơn thì có lẽ bạn sẽ chọn một công cụ hiện có ngoài giá).


-2

Tôi nghĩ rằng sự nổi tiếng của C rất xứng đáng, bởi vì sản phẩm tuyệt vời Unix được viết bằng C. Tuy nhiên, so với những người hiểu rõ nhất về C, tôi khá nghi ngờ về lý do nên sử dụng nó. Người ta nói rằng Ken Thompson (sau khi viết phiên bản đầu tiên của Unix bằng ngôn ngữ lắp ráp) đã bắt đầu viết Unix ở Fortran, nhưng đã bỏ cuộc sau một tuần hoặc một tháng, và bắt đầu sử dụng C được phát triển bởi đồng nghiệp Ken Ritchie tại cùng lúc.

Tôi đã rất ngạc nhiên khi đọc gần đây rằng Fortran nhanh hơn C và C ++.

Richard Mullins


1
Làm thế nào để trả lời câu hỏi này?
gnat
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.