2010-02-14 33 views
5

Tôi đang làm việc trên một bài báo về lập trình đa nền tảng và tôi muốn bao gồm các phần về lợi thế/bất lợi. Từ sự hiểu biết của tôi; có bất kỳ ứng dụng nào là đa nền tảng là điểm bán hàng khổng lồ cho nhà phát triển vì nó cho phép hầu như bất kỳ người dùng máy tính nào là người mua tiềm năng, trong số những thứ khác. Tôi chỉ đang cố gắng tìm ra những bất lợi có thể xảy ra. Nếu có?Có bất kỳ nhược điểm nào đối với một ngôn ngữ là nền tảng độc lập không?

Trả lời

2

Nói chung trên môi trường đa nền tảng, bạn sẽ cần mức trừu tượng bổ sung giữa ngôn ngữ và máy như thông dịch viên hoặc JVM. Cấp độ bổ sung này cho máy cụ thể biết cách chạy mã trong môi trường của nó và mang lại nhiều mã hơn mà máy tính của bạn phải chạy để xử lý một bộ hướng dẫn nhất định. Do đó, các ứng dụng đa nền tảng thường chậm hơn.

Logic đằng sau việc này thay vì mã hóa cùng một ứng dụng nhiều lần cho mỗi môi trường, bạn tạo ra một giao diện các loại cho các lập trình viên. Mỗi nền tảng cần thực hiện riêng của giao diện này nhưng được thiết kế để chạy mã theo cách thống nhất.

Ngoài ra, trong khi lớp này nhằm cung cấp hành vi chung trên nhiều nền tảng, bạn vẫn có thể cần xem xét các khác biệt trong quy ước đặt tên và lưu trữ tệp từ nền tảng này sang nền tảng khác.

Trình duyệt web là ví dụ phổ biến nhất về điều này. Nếu bạn có một trình duyệt tốt, nó sẽ giải mã mã chuẩn web (HTML/CSS/JS, v.v.) và quan tâm đến cách hiển thị nó trên nền tảng cụ thể của bạn thay vì người viết mã cần phải thích ứng với những khác biệt này.

+2

Anh ấy có hỏi về môi trường hoặc ngôn ngữ không? Tôi sẽ nói ví dụ phổ biến nhất về ngôn ngữ * độc lập nền tảng là C, và trong C các lớp trừu tượng thường không phải là tắc nghẽn. – Ken

2

Có bất lợi nào đối với ngôn ngữ (được yêu cầu trong tiêu đề) không độc lập với nền tảng không?

Là người triển khai ngôn ngữ, tôi phải nói rằng việc tạo một thứ gì đó chạy trên nhiều nền tảng là một công việc hơn lot. Hầu hết các công việc phụ là trong hệ thống thời gian chạy. Làm một cái gì đó nền tảng độc lập thậm chí còn khó hơn; bạn phải tuân thủ một số tiêu chuẩn được sử dụng rộng rãi như ANSI C.

Tôi nên thêm rằng bạn không nhất thiết phải viết nhiều mã; bạn chỉ phải suy nghĩ nhiều hơn. Lua là một ví dụ hay về ngôn ngữ độc lập với nền tảng mà không cần triển khai thực hiện lớn. GHC là đối diện: rất nhiều mã để có được hiệu suất tuyệt vời trên nhiều nền tảng — nhưng hệ thống chạy một mình là bốn lần kích thước của phiên bản 6 Unix!

2

Làm thế nào về "Jack của tất cả các giao dịch, chủ của không"?

Có ngôn ngữ được thiết kế và triển khai trên một nền tảng cho phép thiết kế phù hợp với nền tảng đó. Ngoài ra, tài nguyên thường bị giới hạn, vì vậy việc triển khai và gỡ lỗi tập trung vào một tài nguyên thay vì nhiều nền tảng.

Điều này không áp dụng cho những nỗ lực của cộng đồng nơi tài nguyên có nguồn cung dồi dào, chẳng hạn như Perl.

0

nhược tiểu học là:

  • thêm thời gian để phát triển do sự khác biệt nền tảng (ví dụ hệ thống tập tin truy cập khác nhau trên nền tảng khác nhau)
  • thử nghiệm nhiều hơn cần thiết và do đó nhiều chi phí lớn hơn để thử nghiệm trên nhiều hỗ trợ nền tảng.
1

bất lợi lớn - bạn không thể sử dụng cải tiến cụ thể nền tảng ...

Đây là một câu hỏi triết học hơn - đâu là ranh giới giữa khả năng ngôn ngữ và khả năng biên dịch ...

bạn có thể viết mã directx .. nhưng để cho cùng một kết quả xảy ra trong Linux ...

0

Rất nhiều lần làm cho một ngôn ngữ ít tính năng phong phú hơn hoặc chậm hơn do nhu cầu về thời gian chạy lớn hơn và phức tạp hơn. Hầu hết các ngôn ngữ quản lý để kéo nó ra khá tốt, nhưng có một vài trong số đó có khả năng không được hưởng lợi từ việc thực hiện trên nền tảng.

0

Lisp thông thường giống như một nghiên cứu điển hình về điều này! :-)

Trong một số cách, họ đã nhận được khá nhiều điều đúng: có một số điều có vẻ kỳ lạ từ góc độ lý thuyết nhưng cho phép các bộ vi xử lý hiện đại không chuyên thực hiện nó một cách nhanh chóng. Ví dụ, có một số biểu thức số học vô nghĩa được phép trả lại rác thay vì báo hiệu một điều kiện lỗi, bởi vì nó có thể hiệu quả hơn rất nhiều theo cách đó.

Nói cách khác, họ đã cố gắng trở thành nền tảng độc lập và nó chỉ thêm độ phức tạp với ít hoặc không có lợi nhuận. Một ví dụ điển hình là hệ thống con đường dẫn; chữ ký make-pathname chức năng trông như thế này:

make-pathname &key host device directory name type version defaults case 

Quay trở lại những năm 1980 khi nó được tiêu chuẩn hóa, nó có thể có vẻ hợp lý để bao gồm hỗ trợ cho hệ thống tập tin rất phong phú, nhưng tôi đã không nhìn thấy một VAX (hoặc bất kỳ khác hệ thống với một hệ thống tập tin được phiên bản) trong hơn 10 năm. Hôm nay, sự phức tạp là most people don't care about. (Tôi biết tên đường dẫn và tên đường dẫn logic là các tính năng riêng biệt về mặt kỹ thuật, nhưng chúng không quá xa với những gì chúng cố gắng làm.)

Là một lập trình viên, bạn không bao giờ có thể đoán được khu vực nào bạn sẽ cần sự linh hoạt trong tương lai, hoặc thậm chí trên trục bạn sẽ muốn sự linh hoạt - lập trình viên biết điều này tốt, đó là lý do tại sao các từ cheesy như "nhanh nhẹn" đã trở thành phổ biến. Khi thiết kế một ngôn ngữ độc lập nền tảng, bạn đang đối phó với điều tồi tệ nhất của cả hai thế giới: ngôn ngữ là trừu tượng và nền tảng rất cụ thể. Chắc chắn đủ, mọi nền tảng độc lập ngôn ngữ là đầy đủ của một số tiền phong nha của hút, từ C trên lên.

0

Hỏi Sun. Làm thế nào mà toàn bộ điều Java làm việc cho công ty? (vâng, tôi biết, mẫu 1 và tất cả)

Trong trường hợp này, tôi đang xem xét nó từ quan điểm của nhà cung cấp. Họ đã tạo ra một ngôn ngữ, trong khi phổ biến, không có gì để tận dụng sức mạnh (thực tế!) Của hệ điều hành mà họ đã bán. Nó phải chạy trên Windows, với tất cả những điều vô nghĩa làm tê liệt như vậy đòi hỏi. Bạn muốn ngã ba một quá trình con và mở một hoặc hai đường ống giữa cha mẹ và con? Quá tệ. Vui chơi với lỗi chủ đề của bạn. Hãy vui vẻ với tập tin I/O của con chó chậm. (khi nào, nếu bao giờ, Java cuối cùng đã bao gồm một "nio" thực hiện?)

Microsoft tất nhiên đã không mắc sai lầm nào với .NET. Và họ tập trung vào các tính năng ngôn ngữ tốt hơn, thay vì chi tiêu tài nguyên trên nhiều lần triển khai thời gian chạy.

Các vấn đề liên quan