Có một số loại phần mềm không thể được phát triển bởi tất cả các ngôn ngữ lập trình chính?


8

Tôi muốn biết nếu một số ngôn ngữ lập trình chính hoàn toàn không thể được sử dụng để tạo ra một số loại phần mềm rất cụ thể.

Theo ngôn ngữ lập trình chính, ý tôi là thích C ++, C #, Java, Ruby, Python. Bởi "không thể được phát triển" Tôi có nghĩa là không thể được phát triển hoặc không thực tế để làm điều đó do hiệu suất, khó thực hiện, v.v.

Tôi đã luôn nghĩ rằng bất kỳ ngôn ngữ lập trình nào cũng có thể được sử dụng để giải quyết bất kỳ vấn đề nào nhưng gần đây tôi đã nghĩ rằng một số ngôn ngữ không phù hợp với một số dự án.

Nếu bạn có thể cung cấp các ví dụ về các ứng dụng như vậy, nó sẽ được đánh giá cao. Cảm ơn.


15
Không phù hợp với một nhiệm vụ và không thể thực hiện một nhiệm vụ là hai điều rất khác nhau.
Covar

@Covar, mình mới đổi taskthành project. Hy vọng nó ít gây nhầm lẫn.
mbillard

Bạn có biết về khái niệm tương đương Turing?

1
Liên quan (với câu hỏi mức độ phù hợp của một số ngôn ngữ đối với các trường hợp cụ thể): paulgraham.com/avg.html
Doc Brown

Câu trả lời:


13

Các ngôn ngữ cấp cao hơn, đặc biệt là các ngôn ngữ không cung cấp bất kỳ phương tiện nào để xử lý trực tiếp bộ nhớ (từ danh sách của bạn: Java, Ruby, Python) là không phù hợp để lập trình hệ thống. Để đưa ra các ví dụ cụ thể, tôi sẽ không triển khai (một phần của - ví dụ: trình điều khiển) một hệ điều hành hoặc một trình thông dịch / máy ảo trong Python.

Nghịch đảo gần như không gần với "không thể", nhưng viết ví dụ các tập lệnh tiện ích hoặc nguyên mẫu cho phần mềm phức tạp và phức tạp như trình biên dịch trong C ++ (đôi khi trong C) thể rất cồng kềnh, nó trở thành một kẻ giết người động lực, vì điều đó bạn nhận được nhiều gánh nặng nhỏ hơn trên đỉnh của vấn đề thực tế.


Nó vẫn có thể được thực hiện - xem ví dụ jnode.org , một hệ điều hành được viết bằng Java.

1
@ ThorbjørnRavnAndersen Có, các dự án nghiên cứu như vậy thỉnh thoảng xuất hiện. Tuy nhiên, chúng là một cú sút xa từ các dự án trong thế giới thực. Và nếu bạn cố gắng triển khai ví dụ như quản lý bộ nhớ trong Java (hoặc Python hoặc bất kỳ ngôn ngữ nào được quản lý bộ nhớ), bạn phải hạn chế nghiêm trọng ngôn ngữ và kết thúc bằng một thứ gì đó khác xa với mã thành ngữ hoặc phải thực hiện nhiều tiện ích mở rộng (xem khung GC của PyPy và MMTK của Jike RVM).

7

Hoàn toàn, tất cả phụ thuộc vào phần cứng cơ bản

Ví dụ, nếu tôi định lập trình máy dệt JaTHER , tôi sẽ không thể sử dụng C ++ để làm điều đó vì không có trình biên dịch nào tồn tại cho phần cứng đó. Tôi sẽ khẳng định rằng không có trình biên dịch nào khả thi vì phần cứng không hỗ trợ nhiều yêu cầu mà C ++ sẽ yêu cầu để hoạt động như một ngôn ngữ.

Một phần mở rộng của điều này là vào thế giới của các máy tính tương tự hoạt động theo cách hoàn toàn khác với các máy tính kỹ thuật số đang thịnh hành ngày nay.

Tuy nhiên, bạn có thể xem xét rằng đã có đủ thời gian bạn có thể đưa ra trình biên dịch / trình biên dịch cho bất kỳ máy von Neumann nào (đầu vào-> bộ xử lý / lưu trữ-> đầu ra). Nhưng một số máy von Neumann, như MU0 , quá đơn giản để cho phép nó thực thi. Thông tin thêm về MU0 cho người đọc quan tâm .


5
Có, tuy nhiên nếu máy dệt JaTHER có thể mô phỏng máy Turing, thì bạn có thể viết trình biên dịch c ++ cho nó, nếu bạn đã quá nghiêng.
whatsisname

2
@whatsisname, Turing-tương đương chỉ thú vị nếu thời gian sử dụng không phải là vấn đề.

Ngoài tính tương đương của Turing, còn có vấn đề của I / O: Nó có cơ chế giao tiếp với thế giới bên ngoài trong khi thực hiện không? Nếu không, ngôn ngữ giống như một bộ não trong thùng . Nếu nó có ít nhất một phương thức nhập và một phương thức đầu ra, ít nhất bạn có thể tạo một trình quét màn hình cho nó.
rwong

6

Vâng, có một số điều không thể được thực hiện với các ngôn ngữ khác nhau. Dưới đây là một số tiêu chí chính ảnh hưởng đến điều đó:

  • Cấp độ thấp : Trình điều khiển thiết bị và mô-đun điều khiển phần cứng có thể yêu cầu quyền truy cập vào các vị trí bộ nhớ cụ thể và hướng dẫn lắp ráp. Nếu ngôn ngữ cung cấp không có cách nào để làm điều này, bạn chỉ cần không thể sử dụng nó (rất ít cung cấp vị trí con trỏ và lắp ráp tùy chỉnh)
  • Hiệu suất : Trong một số trường hợp, đó không chỉ là vấn đề mất nhiều thời gian, nếu bạn có nguồn cấp dữ liệu liên tục hoặc trực tiếp, bạn không có lựa chọn nào khác ngoài việc đủ nhanh để xử lý nó trong thời gian thực.
  • Nhị phân : Đối với sản xuất thương mại, yêu cầu của bạn có thể là chỉ phân phối nhị phân, nhiều ngôn ngữ giống như tập lệnh không có dạng nhị phân.
  • Bộ nhớ : Đối với các thiết bị dấu chân nhúng và nhỏ, bạn có bộ nhớ rất hạn chế (hoặc các tài nguyên khác). Các ngôn ngữ cần VM hoặc các thư viện tiêu chuẩn lớn không thể được nhắm mục tiêu đến một máy như vậy.
  • Thời gian thực : Ngoài việc chỉ đủ nhanh, một số thiết bị cần phải phản hồi các sự kiện trong khung thời gian được bảo đảm dựa trên một sự kiện nhất định. Một ngôn ngữ sẽ cần cả hai để hỗ trợ sự kiện và đảm bảo thời gian xử lý (thứ gì đó như bộ thu gom rác sẽ ngăn chặn điều này).
  • Toán học : Nhiều phép tính đòi hỏi một thư viện đầy đủ các hàm toán học và các kiểu dữ liệu phù hợp. Thường thì điều này đòi hỏi chi tiết thực hiện cụ thể. Một số ngôn ngữ kịch bản có thể không chỉ định điều này đủ tốt hoặc không cung cấp các chức năng chính.
  • Khả năng tương thích : Một số phần cứng không có trình biên dịch / trình thông dịch cho một số ngôn ngữ nhất định.

Đó là một số điều tôi có thể nghĩ ra. Tôi chắc chắn có nhiều hơn nữa. Nhưng điểm quan trọng là có, có những yêu cầu giới hạn chính sẽ ngăn việc sử dụng ngôn ngữ.


1
Nhiều vấn đề trong số này không phải là ngôn ngữ vốn có, nhưng là những vấn đề với việc triển khai hiện tại của chúng tôi.
whatsisname

1
@whatsisname: Ở một mức độ nhất định, nhưng các ngôn ngữ khác nhau cho vay để thực hiện khác nhau. Hơn nữa, một số ngôn ngữ không thể được tối ưu hóa nhiều như các ngôn ngữ khác, ví dụ kinh điển là thói quen ma trận trong đó việc triển khai Fortran có thể được tối ưu hóa mạnh mẽ hơn nhiều so với restricttriển khai trước C.
David Thornley

Thu gom rác có thể (và đã được) thực hiện theo thời gian thực.
CHỈ CẦN HOẠT ĐỘNG CỦA TÔI NGÀY

4

Tôi đã luôn nghĩ rằng bất kỳ ngôn ngữ lập trình nào cũng có thể được sử dụng để giải quyết bất kỳ vấn đề nào nhưng gần đây tôi đã nghĩ rằng một số ngôn ngữ không phù hợp với một số dự án.

Vâng, đó là chính xác và luôn luôn được. "Không có khả năng" và "Không phù hợp" là rất khác nhau.

Bạn có thể đập một cái đinh vào một cái bảng với đầu mông của một người lái vít. Bạn có thể lái một con ốc vít với cạnh của một cái búa vuốt. Nhưng búa rất phù hợp hơn và là một công cụ tốt hơn để đập đinh vào, và một tuốc nơ vít là một công cụ tốt hơn cho các ốc vít ren.

Ngôn ngữ lập trình là công cụ. Một số công cụ tốt hơn ở một số nhiệm vụ nhất định.


1

Điều duy nhất tôi có thể nghĩ là không thực tế là phát triển trình điều khiển thiết bị cấp thấp bằng ngôn ngữ ảo hóa cao như Java hoặc C # - nếu bạn đang cố gắng điều khiển phần cứng, VM tuyệt vời nhất (tạo ra rất nhiều thứ rất hay và đơn giản) sẽ có được theo cách của bạn. Tôi chắc chắn rằng nó có thể được thực hiện, nếu bạn THỰC SỰ muốn, nhưng nó sẽ liên quan đến rất nhiều điều chỉnh VM để làm cho nó hoạt động.

Bất cứ điều gì khác có thể được thực hiện bằng bất kỳ ngôn ngữ nào bạn muốn.



1

Hệ thống nhúng đến với tâm trí. Chẳng hạn, việc lập trình một bộ định tuyến chẳng hạn, hoặc một số loại robot sử dụng ngôn ngữ như C #. Mặc dù có những dự án như netduin tận dụng khung vi mô nên tôi có thể đã từ chối quan điểm của riêng mình.


1
Không nhất thiết là không thực tế khi sử dụng C # cho bộ định tuyến hoặc robot. Nếu bạn có thể cắt giảm thời gian lập trình viên bằng C #, điều đó có thể làm tăng nhu cầu tính toán một cách đáng giá. Điều đó áp dụng cho bất kỳ ngôn ngữ / môi trường.
whatsisname

@whatsisname: Tất nhiên, các bộ định tuyến rất nghiêm trọng được lập trình trong VHDL. :-)
Zan Lynx

0

Vì vậy, các ngôn ngữ được gọi là 4GL bị hạn chế bởi môi trường lập trình mà chúng bị ràng buộc. Bạn không thể lập trình GUI với ABAP, ví dụ. Tất cả mọi người có thể làm giống như một GUI trong môi trường giới hạn của máy khách SAP (và điều này chỉ có thể chạy được kết nối với một phiên bản SAP).

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.