Tại sao có nhiều ngôn ngữ lập trình? Tại sao các ngôn ngữ mới vẫn đang được thực hiện? [đóng cửa]


51

Tại sao có nhiều ngôn ngữ lập trình?

Và điều gì thúc đẩy ai đó tạo ra một ngôn ngữ lập trình mặc dù thực tế là các ngôn ngữ khác đã tồn tại?


một video giải trí về chủ đề này là "Ngôn ngữ lập trình cuối cùng" của chú Bob Martin ( skillmatter.com/podcast/agile-testing/bobs-last-lingu )
mikera

Bởi vì lập trình viên thích công cụ.
haylem



Thật khó để biện minh cho điều này, tôi đoán mỗi ngôn ngữ có một câu chuyện. Hầu hết các ngôn ngữ không mang lại lợi ích cho nhà sản xuất theo hiểu biết của tôi. Hầu hết các ngôn ngữ xoay quanh các khái niệm tương tự và hiếm khi giải quyết các vấn đề thực sự hoặc cung cấp môi trường tốt. Tôi nghĩ rằng khi họ tạo ra nó, họ cảm thấy mệt mỏi với tất cả mọi thứ và có thể thấy họ đã lãng phí cuộc sống của mình như thế nào .... Hãy nghĩ về ksh hoặc JavaScript ..... Đơn giản là những công cụ khủng khiếp và độc hại.
NoChance

Câu trả lời:


36

Ngôn ngữ lập trình phát triển

Các ngôn ngữ lập trình mới thường học từ các ngôn ngữ hiện có và thêm, xóa và kết hợp các tính năng theo một cách mới. Có một vài mô hình khác nhau như hướng đối tượngchức năng và nhiều ngôn ngữ hiện đại cố gắng trộn lẫn các tính năng từ cả hai.

Ngoài ra còn có các vấn đề mới cần được giải quyết, ví dụ như sự gia tăng của CPU đa lõi. Giải pháp phổ biến nhất cho vấn đề đó là các luồng, nhưng một số ngôn ngữ lập trình cố gắng giải quyết vấn đề tương tranh theo một cách khác, ví dụ như Mô hình diễn viên. Xem Erlang - Phần mềm cho một thế giới đồng thời


10
Điều thú vị về Erlang là đó là "sự tái tạo phòng sạch" của mô hình Diễn viên. Khi Armstrong và bạn bè phát triển Erlang, họ không biết về công việc của Hewitt et al trên mô hình Diễn viên!
Frank Shearar

@Frank: Thật thú vị. Tôi không biết điều đó, cảm ơn.
Jonas

2
+1 cho sự tiến hóa. Một câu hỏi tương tự có thể là "Tại sao có quá nhiều loài động vật và thực vật? Tại sao những loài mới vẫn xuất hiện?"
Gyan aka Gary Buyn

1
@GaryBuyn đó chỉ là "+1 cho sự tiến hóa" nếu bạn đăng ký theo quan điểm đó. Đối với nhiều người, sự tương tự động vật là một chút quá xa.
Tối

@GaryBuyn, Uhm ... điều đó khá giống với "ấp" là "hamster".
Pacerier

22

Đó là một chu kỳ. Bạn bắt đầu một ngôn ngữ mới và bạn có thể tự do thoát khỏi tất cả các cú pháp xấu và các lựa chọn kém từ những người đi trước. Trong phiên bản 1, ngôn ngữ có vẻ tuyệt vời vì nó không có bất kỳ hành lý nào và nó hoàn thành công việc. Sau đó, trong các phiên bản mới hơn, bạn bắt đầu thử nghiệm các tính năng có thể không hoạt động hoặc bạn mang các tính năng từ các ngôn ngữ mới hơn, khác khiến cho cú pháp của bạn bị thiếu một chút. Xin lưu ý, sau một vài phiên bản nữa, bạn nhận ra rằng ngôn ngữ của bạn bây giờ phức tạp như ngôn ngữ bạn đã thay thế, với các vấn đề cú pháp ngớ ngẩn và hành lý kế thừa. Và đột nhiên, bạn nhận ra rằng nếu bạn tạo một ngôn ngữ mới , bạn có thể sửa tất cả ...


2
Điều này chắc chắn đúng với các thư viện, khung và phần mềm, nhưng cá nhân tôi không biết ngôn ngữ này áp dụng cho ngôn ngữ nào. Bạn có ví dụ không?
back2dos

16
Chà, tôi nghĩ rằng cả C # và Java đều được giới thiệu ít nhất một phần để giải quyết sự phức tạp với C ++. Và bây giờ, nếu bạn xem xét cả hai ngôn ngữ đó sau một vài phiên bản, bộ cú pháp và tính năng của chúng sẽ trở nên đủ phức tạp khi mọi người bắt đầu nói về việc chúng "ở trên đồi". Chỉ cần tôi nhận nó mặc dù tôi không thể chứng minh bất cứ điều gì. :-)
RationalGeek

2
Điểm tốt, nhưng tôi nghĩ rằng thực tế khác là lúc chơi với C # - đó là một sản phẩm thương mại mà không tồn tại vì những lý do từ thiện và cho thị trường chấp nhận / giữ khách hàng của bạn sản phẩm phải được "cải thiện" cho phiên bản mới vv
gf

1
Đây là sự thật. Ổ đĩa để thêm các tính năng mới để có thêm tiền từ thị trường chắc chắn không thể bỏ qua. Tuy nhiên, nó là con dao hai lưỡi. Bạn có thể mong đợi các tính năng mới từ một sản phẩm được hỗ trợ thương mại vì lý do chính xác này. Nhưng từ một sản phẩm nguồn mở, bạn chỉ nhận được các tính năng mới miễn là đội quân tình nguyện vẫn quan tâm và có ai đó có kỹ năng giúp đỡ lũ mèo.
RationalGeek

C # có nhiều tính năng, nhưng nó vẫn là ngôn ngữ sạch hơn C ++. Các bổ sung mới hơn như LINQ cho phép bạn thực hiện mọi thứ một cách sạch sẽ mà bạn không thể dễ dàng thực hiện trong C ++. Tôi nghĩ nhiều khả năng có hai loại bảo tồn phức tạp - một loại phức tạp vốn có trong một vấn đề và một khi bạn loại bỏ một loại phức tạp dư thừa khỏi các chương trình của mình, các yêu cầu trở nên phức tạp hơn - như dữ liệu, mở rộng để lấp đầy "không gian" có sẵn.
Steve314

11

Vì lý do tương tự, có búa, tua vít, tay cầm, cưa máy, búa khoan, xà beng và một loạt các công cụ khác: không phải ngôn ngữ nào cũng hoàn hảo cho mọi nhiệm vụ. Một số ngôn ngữ được nhắm mục tiêu vào các lĩnh vực vấn đề cụ thể: R đặc biệt tốt cho phân tích thống kê, C đặc biệt tốt cho việc viết các hạt nhân hệ điều hành, Haskell đặc biệt tốt cho các tính toán nặng về toán học hoặc tài chính, Erlang đặc biệt tốt trong lập trình đồng thời, v.v.

Ngoài ra, vì cùng một lý do mà áo sơ mi có nhiều màu sắc khác nhau: một số người chỉ thích "phong cách" của ngôn ngữ này hơn ngôn ngữ khác.

Và, tất nhiên, rất nhiều lập trình viên cảm thấy thú vị khi phát minh ra một ngôn ngữ mới, chỉ để xem điều gì xảy ra, hoặc có lẽ vì họ có một số kiến ​​thức về ngôn ngữ và muốn gãi ngứa, hoặc thử một số ý tưởng.


Không chỉ có tất cả các công cụ xây dựng đó, mà thậm chí còn có nhiều loại búa và búa khác nhau trông giống nhau nhưng có các yếu tố thiết kế cụ thể giúp chúng tốt hơn cho các công việc hoặc người dùng khác nhau.
Barry Brown

+1 Đối với sự phù hợp cho các miền có vấn đề. Các học giả nghiên cứu các công cụ nói chung nói rằng một công cụ rất chung chung ít mạnh hơn một công cụ cụ thể cho một nhiệm vụ cụ thể. Hãy suy nghĩ về một cờ lê có thể điều chỉnh so với một cờ lê kích thước cố định
MarkJ

8

Bởi vì tất cả đều hút (cách này hay cách khác).

Ngay bây giờ, chúng tôi đã tạo ra khoảng 5000 ngôn ngữ để mô tả các vấn đề tự nhiên và không có ngôn ngữ nào có sẵn để viết chương trình (một ví dụ sẽ là "Tiếng Anh").

Cho đến khi ai đó tìm ra cách tạo ra một ngôn ngữ lập trình có thể diễn đạt những gì bạn có thể diễn đạt trong một câu bằng ngôn ngữ tự nhiên, họ sẽ tiếp tục đến.


15
Thậm chí sau đó, họ sẽ tiếp tục đến. Chỉ có ngôn ngữ chết được viết bằng đá, tha thứ cho trò chơi chữ. Có một lý do ngôn ngữ sống liên tục thay đổi.
R. Martinho Fernandes

1
Một số người sẽ cho rằng ngôn ngữ tự nhiên để diễn đạt các vấn đề là toán học. Điều này đặt ra câu hỏi tại sao mọi người cứ thêm đường cú pháp vào các ngôn ngữ chức năng thay vì sử dụng phép tính lambda thuần túy. Tôi nghĩ rằng những vấn đề chúng ta phải giải quyết thường xuyên thường không dễ dàng diễn đạt bằng tiếng Anh hoặc toán học.
Steve314

5
Đã đồng ý. Thật khó để diễn tả "Tôi đói" bằng toán học thuần túy.
Aaron Digulla

1
@AaronDigulla: đói = sum (bụng / thức ăn) chắc chắn :)
gbjbaanb

@AaronDigulla đó là một ví dụ hay, thường thì bạn muốn thể hiện tính toán. Vì vậy, chúng tôi thực hiện một kịch bản nhất định như: Tôi đói, bây giờ ăn -> tốt, bây giờ không ăn -> chết đói. Để xây dựng các hệ thống, ong có thể đàm phán hoặc mở rộng bối cảnh, tôi nghĩ đó là mục tiêu của AI. Ngôn ngữ lập trình thông thường chỉ diễn tả những gì mọi người nói với họ những gì họ nên làm và thường là khá cụ thể hơn là chung chung. Nhưng vì hầu hết các vấn đề là chính họ, bạn có thể thấy vấn đề ở đây.
AndreasScheinert

6

Rõ ràng một động lực quan trọng để tạo ra một ngôn ngữ mới là đạt được điều gì đó tốt hơn các ngôn ngữ đã có. Và vì luôn có chỗ để cải tiến, sẽ luôn có những ngôn ngữ mới.

Lợi ích thương mại là một lý do lớn khác. Tôi tin rằng điều quan trọng là ví dụ Microsoft rằng họ có thể cung cấp ngôn ngữ cho mọi nhu cầu để các công ty và nhà phát triển thích nền tảng của họ.


6

Mã di sản. Nếu bạn bắt đầu một ngôn ngữ mới, bạn không phải lắng nghe / xem xét tất cả các khiếu nại khi bạn thay đổi ngôn ngữ cũ. Ngay cả khi mọi người đồng ý rằng việc triển khai mới tốt hơn, nó không thể phá vỡ mã cũ. Và có rất nhiều mã cũ ngoài kia.


3
Có trường hợp tài liệu nào của một ngôn ngữ được thiết kế để tránh mã kế thừa không? Yêu cầu này dường như rất khó xảy ra. Tôi có thể thấy trường hợp bạn muốn bắt đầu mới (.net xuất hiện trong tâm trí) nhưng không quá nhiều để tránh mã kế thừa nhưng để kích hoạt mã tương lai tốt hơn.
Bryan Oakley

Tôi không tin rằng điều này đúng. Nó (thường) có thể phân nhánh một triển khai nguồn mở của một ngôn ngữ hiện có.
thay thế

@BryanOakley - ban đầu .NET được dự định để giữ khả năng tương thích ngược với VB6, nhưng họ đã quyết định rằng đó là một vấn đề quá khó. .NET vẫn còn rất nhiều WRT Java / J ++ kế thừa mà nó dựa trên. Tôi nghĩ D là một ví dụ về ngôn ngữ được thiết kế chống lại mã kế thừa.
gbjbaanb

4

bởi vì thật vui khi tạo ngôn ngữ mới ngay cả khi chúng không có công dụng thực sự

Ngôn ngữ lập trình bí truyền (đôi khi được rút ngắn thành esolang) là ngôn ngữ lập trình được thiết kế để kiểm tra ranh giới của thiết kế ngôn ngữ lập trình máy tính, như một bằng chứng về khái niệm hoặc như một trò đùa.


1
Đối với những người không tìm hiểu các chú thích trong bài viết trên wikipedia, wiki ngôn ngữ bí truyền rất thú vị: esoteric.voxelperinf.net/wiki/Main_Page
David Winslow

bạn có phiền giải thích thêm về những gì nó làm không và tại sao bạn lại đề nghị nó như trả lời câu hỏi được hỏi? "Câu trả lời chỉ liên kết" không được chào đón tại Stack Exchange
gnat

1
@gnat Tôi thành thật nghĩ rằng văn bản gốc không phải là một câu trả lời duy nhất, nó sẽ là một câu trả lời ngắn gọn nhưng hoàn toàn hợp lệ nếu không có liên kết. Nhưng cho rằng liên kết không thêm hương vị, tôi đã bao gồm một trích dẫn ngắn từ nó.
jk.

3

Tạo một ngôn ngữ lập trình khá thú vị. Nó gần với công việc sáng tạo thuần túy, vì bạn không bị giới hạn bởi các yêu cầu trước đó. Không còn khó để thực hiện nữa, vì bạn luôn có thể biên dịch thành C và biên dịch mã C để có hiệu suất đầy đủ nếu bạn đang viết trình biên dịch ở vị trí đầu tiên.

Tất nhiên, hầu hết chúng ta có ít ý tưởng tốt hơn chúng ta nghĩ, vì vậy họ thường thất vọng, hoặc không được ai yêu thích ngoài nhà thiết kế ban đầu.

Hãy suy nghĩ về bất kỳ ngôn ngữ lập trình mà bạn biết. Bạn có thể dễ dàng đưa ra một số điều bạn không thích về nó, phải không? Bạn có thể có ý tưởng làm thế nào những cái đó có thể được sửa chữa. Chỉ cần thêm một chút động lực, giả sử bạn biết nhiều về xây dựng trình biên dịch (và rất nhiều người làm), bạn có thể bắt đầu thiết kế và thậm chí tự thực hiện.


2

Trả lời nhanh

Phát minh lại The Wheel ... Xu hướng hiện tại là gì ...

Chán dài trả lời

Nhiều người quên rằng "một ngôn ngữ mới tương tự khác dành cho lập trình viên cũ" là "ngôn ngữ mới đơn giản dành cho lập trình viên mới".

Tôi có ý gì cho điều đó?

Chà, đối với các lập trình viên "vài năm", Java hoặc C # có thể là ngôn ngữ lập trình bổ sung cho Cobol hiện tại, (OO / Thủ tục) Cơ bản, C / C ++, trong khi đối với lập trình viên "mới", Java hoặc C # là ngôn ngữ mới, trong khi Cobol, (OO / Thủ tục) Cơ bản, C / C ++ không tồn tại đối với họ, vì vậy việc phát minh lại bánh xe trở thành một điều phổ biến ...

Và, nếu có một xu hướng mới về công nghệ, mọi người có thể tạo ra một ngôn ngữ lập trình mới dựa trên xu hướng đó, như ecmascript / javascript cho web và lập trình chức năng ...

Chúc mừng.


+1 để chỉ ra khía cạnh phát minh lại bánh xe. Thông thường nó được thực hiện vì lý do tiếp thị: bất kỳ công ty hoặc tổ chức đủ lớn nào cũng phải có ngôn ngữ lập trình riêng.
Giorgio

1

ngôn ngữ lập trình mới được xây dựng vì nhiều lý do khác nhau, chủ yếu là do có mô hình lập trình mới hoặc vì những tiến bộ trong phần cứng, người ta tạo ra ngôn ngữ mới để tận dụng các tính năng phần cứng mới như đa nhiệm, v.v.

trong trường hợp của tôi, tôi thường xây dựng các trình biên dịch nhỏ (với ngôn ngữ lập trình mới), vì lý do đặc biệt. nếu tôi phân bổ các trò chơi và tôi tin rằng một ngôn ngữ lập trình dành riêng cho phát triển trò chơi sẽ dẫn đến mã nhanh hơn nhỏ hơn và phát triển nhanh hơn, sau đó tôi xây dựng nó. và cuối cùng, nó chỉ ra rằng nó cũng có thể được sử dụng cho lập trình mục đích chung khác.

Tôi nghĩ rằng hầu hết những người tạo ra ngôn ngữ lập trình đều có một mục đích cụ thể, có những người tạo ra chúng cho mục đích chung ngay từ đầu. nhưng hầu hết là không

Nhân tiện, tôi nghĩ có quá nhiều ngôn ngữ lập trình, nhưng hàng trăm ngôn ngữ mới sẽ luôn xuất hiện. một số vui vẻ, một số ngoài mục đích thích hợp, như một dự án trường học, hoặc vì hàng trăm lý do khác. và sớm hay muộn một cái mới sẽ trở nên phổ biến. Nó sẽ không bao giờ kết thúc.


0

Vì lý do tương tự, có rất nhiều <mọi thứ> và chúng tôi tiếp tục tạo <bất cứ thứ gì>

Chẳng hạn, có một tá các khung công tác PHP MVC, nhưng mọi người sẽ luôn tạo ra các khung mới để đáp ứng các nhu cầu cụ thể, để tránh bị phụ thuộc vào một số nhóm khác hoặc chỉ để thử và tạo ra thứ gì đó tốt hơn. Điều tương tự cũng đúng đối với mọi loại công cụ hoặc ứng dụng.

Theo ý kiến ​​của tôi, đó là một điều rất tốt, gần như là một chiến thắng cùng có lợi cho mọi người.


Hội chứng NIH = thường không hữu ích cho ngành CNTT.
gbjbaanb

0

Các trường đại học đóng góp rất nhiều ngôn ngữ lập trình, và các tập đoàn rất lớn như Ericsson (ngôn ngữ Erlang = Ericsson), Bell Labs (ngôn ngữ B và C), Google (ngôn ngữ của một vài tháng trước đó). Nhiều trong số những bài được viết như một phần của nghiên cứu đại học không được sử dụng nhiều. Có một vài ngoại lệ đáng chú ý, mặc dù. Tôi cho rằng việc viết ngôn ngữ / trình biên dịch của riêng bạn tạo ra một chủ đề hay cho luận án tiến sĩ của những người nghiên cứu Lý thuyết CS hoặc các chuyên ngành liên quan. Tôi nhận ra rằng Python là một trong những ngôn ngữ đầu tiên được sinh ra từ nỗ lực hợp tác trực tuyến của các lập trình viên khác nhau xung quanh một ý tưởng duy nhất.


python-history.blogspot.com/2009/01/ từ mô tả sự ra đời của Python một cách chi tiết
Andy Dent

0

Có một vài lý do, hầu hết là vì mọi người nghĩ rằng những gì tồn tại không giúp dễ dàng giải quyết một số vấn đề. Một số chỉ để cho vui hoặc cho lợi ích học tập.

Tôi nghĩ có một lập luận chắc chắn rằng vấn đề về cách bạn thiết kế ngôn ngữ hoàn hảo vẫn chưa được giải quyết (và có thể không bao giờ). Vì vậy, miễn là mọi người có ý tưởng mới về những gì sẽ làm cho một ngôn ngữ tuyệt vời mọi người sẽ tiếp tục cố gắng. Một số trong những lần thử đó sẽ vạch ra không gian mới tuyệt vời như Erlang và một số sẽ thất bại, nhưng miễn là một cái gì đó được học từ flop cũng không sao.


-1

Giống như đã nêu trước đây, các ngôn ngữ cố gắng nhắm mục tiêu một số nhiệm vụ cụ thể và các ngôn ngữ mới có thể nhắm mục tiêu đến một khu vực mới. Các ngôn ngữ này có thể lấy các tính năng từ các ngôn ngữ khác hiện đang ra.

Một lý do khác cho các ngôn ngữ mới là cố gắng kết hợp nhiều nhiệm vụ khác nhau và là ngôn ngữ được lựa chọn cho nhiều nhu cầu khác nhau. Một số ngôn ngữ này đang cố gắng trở thành tất cả các ngôn ngữ bao gồm bạn sẽ luôn sử dụng, bất kể bạn có nhu cầu gì.


-1

Tôi đã học trong lớp ngôn ngữ lập trình của mình rằng hầu hết các ngôn ngữ được phát minh để gãi ngứa. Hầu hết các ngôn ngữ được phát minh để có thể diễn đạt một số thuật toán tốt hơn. Ví dụ, các ngôn ngữ chức năng đã được phát minh để cung cấp cho các thuật toán đệ quy một không gian biểu cảm hơn nhiều.

Hỏi tại sao có nhiều ngôn ngữ giống như hỏi tại sao C ++ 0x? :)

Thêm vào đó, bạn càng biết nhiều ngôn ngữ, bạn càng có thể trở nên biểu cảm hơn - điều này đúng trong cả ngôn ngữ lập trình và ngôn ngữ tự nhiên!

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.