Một ngôn ngữ mạnh mẽ của người Viking là gì?


22

Tôi thường thấy mọi người đấu tranh vì ngôn ngữ yêu thích của họ "mạnh mẽ" hơn những ngôn ngữ khác. Khi mô tả một ngôn ngữ lập trình, tôi có thể hiểu ngôn ngữ hướng đối tượng là gì hoặc ngôn ngữ động là gì, nhưng tôi vẫn không thể hiểu chính xác ngôn ngữ "mạnh mẽ" là gì. Quan điểm của bạn là gì?


5
Một ngôn ngữ mạnh mẽ như người dùng của nó.
ysolik

6
@ysolik không nhất thiết phải đúng. tôi có thể cho ai đó một ngôn ngữ nhảm nhí và xem họ đi được bao xa. Nó có một op, NOOP! =)
Đánh dấu Canlas

2
@Mark nếu chúng ta đang nói cực đoan, thì bạn đã đúng. Tuy nhiên, nếu bạn xem xét các ngôn ngữ ngày nay ít nhiều được sử dụng rộng rãi, thì người dùng là một phần lớn của nó.
ysolik

1
PowerBASIC: Không thể mạnh hơn thế. ^^
gablin

1
@ysolik: sẽ chính xác hơn khi nói "một ngôn ngữ có thể không mạnh hơn người dùng của nó."
Duncan Bayne

Câu trả lời:


32

Chúng ta không thể định nghĩa ngôn ngữ "mạnh mẽ" là gì mà không xác định trước từ "mạnh mẽ".

Các nghĩa đen nghĩa về sức mạnh sẽ là "tiềm năng", và tôi nghĩ rằng tất cả chúng ta có thể đồng ý rằng đại đa số các trình biên dịch - và thậm chí nhiều thông dịch viên mà không phải là Turing hoàn tất - làm một công việc không kém phần tốt nhận được bộ vi xử lý để thực hiện hướng dẫn của họ . Theo như định nghĩa theo nghĩa đen, câu trả lời cho câu hỏi sẽ là "gần như bất kỳ ngôn ngữ nào".

Thực tế, chúng tôi thực sự phải dừng lại ở đó; định nghĩa "ngôn ngữ mạnh mẽ" giống như định nghĩa "người tốt" hoặc "sản phẩm chất lượng". Hoàn toàn không có định nghĩa khách quan về những từ này mà bạn có thể khiến tất cả mọi người, hoặc thậm chí đa số các chuyên gia, đồng ý, và hầu hết các định nghĩa chỉ đơn giản là kết thúc câu hỏi . Tùy thuộc vào người bạn nói chuyện, quyền lực có thể là một trong những điều sau đây:

  • Khung hoặc thư viện đa năng phong phú để thực hiện nhiều nhiệm vụ chung
  • Một cú pháp tên miền cụ thể tinh vi "làm một việc và làm tốt"
  • Truy cập trực tiếp vào các chức năng của máy, tức là khả năng viết mã cấp thấp
  • Tóm tắt các khái niệm cấp độ máy, tức là khả năng viết mã cấp cao
  • Một hệ thống loại rất phong phú cho phép các chiến lược nâng cao như phản xạ, DI và phân tích tĩnh
  • Một hệ thống loại rất lỏng lẻo cho phép các lập trình viên hoàn thành nó (ép buộc kiểu, v.v.)
  • Khả năng coi mọi thứ là một đối tượng , cung cấp xác minh khái niệm
  • Khả năng coi mọi thứ là một hàm , cung cấp xác minh toán học
  • Quản lý tài nguyên và bộ nhớ tự động (GC, RAII) dẫn đến ít lỗi hơn
  • Quản lý tài nguyên và bộ nhớ thủ công, có khả năng dẫn đến hiệu suất được tối ưu hóa
  • Một lượng tiếng ồn cú pháp tối thiểu , dẫn đến khả năng đọc được cải thiện
  • Một cú pháp giống tiếng Anh hơn , cung cấp một đường cong học tập nông hơn
  • Khả năng viết mã rất súc tích (ví dụ toán tử ternary, null-coalescing, null-extension)
  • Không có khả năng viết mã có khả năng gây nhầm lẫn (nghĩa là không có toán tử ternary, v.v.)

Mọi người có thấy những gì đang xảy ra ở đây không? Hầu như mọi tính năng của dấu đầu dòng đều có thể được hiểu là dấu hiệu của "sức mạnh", và do đó, nó hoàn toàn có thể ngược lại!

Ai đó, ở đâu đó, rõ ràng nghĩ rằng các biến số là một ý tưởng tuyệt vời sẽ làm cho ngôn ngữ trở nên rất mạnh mẽ . Tôi sẽ không phán xét; Tôi không phải là một người PHP.

Tôi đề nghị thay vì tất cả những điều vô nghĩa chiến tranh thần thánh này, tất cả chúng ta đều sử dụng Định nghĩa thực sự đơn giản này:

Ngôn ngữ mạnh nhất là ngôn ngữ cho phép bạn vận chuyển sản phẩm chất lượng cao nhất với chi phí thấp nhất trong khoảng thời gian ngắn nhất.

Mơ hồ? Bạn betcha. Đó là lý do tại sao bất cứ ai muốn gọi anh ấy / cô ấy là một chuyên gia phải hiểu cả các khái niệm lập trình miền dự án. Đó là cách duy nhất bạn có thể quyết định những gì "mạnh mẽ" cho bạn.

Nếu không, bạn có thể sẽ mang một con dao thực sự lớn đến một cuộc đấu súng.


1
+1 Đây là định nghĩa duy nhất cố gắng bao gồm tất cả các khái niệm khác nhau về sức mạnh ngôn ngữ. Tôi đặc biệt thích cách bạn thể hiện rằng các tính năng xung đột có thể được coi là mạnh mẽ. Khoa học máy tính là khoa học về sự đánh đổi, ngay cả trong lựa chọn ngôn ngữ.
CodexArcanum

11

Tôi có thể thiên vị bởi vì tôi là một lập trình viên hệ thống. Tôi nghĩ rằng một ngôn ngữ lập trình được sử dụng cho tất cả các chương trình kernel, hệ thống, máy chủ và ứng dụng hoặc hỗ trợ nhiều mô hình lập trình hoặc cả hai có thể được gọi là "mạnh mẽ".

C, C ++, D rất mạnh mẽ, nhưng rõ ràng đây chỉ là ý kiến ​​khiêm tốn của tôi.


Bạn sẽ sử dụng Java để lập trình cấp kernel hay tôi hiểu nhầm bạn?
Davy8

@ Davy8, bạn nói đúng, theo định nghĩa của riêng tôi, tôi không nên bao gồm Java.
Grokus

5

Có một vài định nghĩa về sức mạnh ngoài sự hoàn thiện của Turing. Mark đã trích dẫn những gì tôi có xu hướng nghĩ là "định nghĩa Paul Graham." Đó là một định nghĩa khá hay, với một lỗ hổng nghiêm trọng: nó sai. Về mặt lý thuyết, đây là một định nghĩa rất tốt về sức mạnh ngôn ngữ, nhưng bạn biết họ nói gì về sự khác biệt giữa lý thuyết và thực hành ...

Nếu mọi người đều có khả năng viết mã hoàn hảo, không chỉ hoàn toàn không có lỗi mà còn hoàn toàn không có bằng chứng trong tương lai, thì định nghĩa của Paul Graham sẽ là chính xác. Nhưng đó rõ ràng không phải là trường hợp. Trong thế giới thực, phần lớn thời gian và nỗ lực dành cho công nghệ phần mềm không phải được tạo ra bởi việc tạo ra sản phẩm ban đầu, mà bằng cách bảo trì sau đó. Tùy thuộc vào số liệu thống kê mà bạn nghe, (và có thể thay đổi khá nhiều từ dự án này sang dự án khác), bảo trì có thể chiếm bất kỳ nơi nào từ 60% đến 90% tổng số nỗ lực dành cho một chương trình.

Việc bảo trì thường được thực hiện bởi những người không phải là người đã viết mã ban đầu và thường là vài tháng hoặc thậm chí nhiều năm sau khi viết mã ban đầu, điều đó có nghĩa là ngay cả với người viết mã gốc, nó cũng có thể là "mã của người khác" điểm. Nếu bạn muốn làm việc hiệu quả trong quá trình bảo trì, bạn cần có thể nhanh chóng xác định mục đích ban đầu của mã bằng cách đọc nó.

Do đó, một ngôn ngữ mạnh hơn là ngôn ngữ giúp mã dễ đọc nhanh hơn, không phải ngôn ngữ giúp mã dễ viết nhanh hơn. Có xu hướng có sự chồng chéo khá lớn giữa hai loại, nhưng các khái niệm cũng thường có mục đích chéo, vì cú pháp ngắn gọn sẽ thường bỏ qua các chi tiết mà trình biên dịch / trình thông dịch có thể dễ dàng suy ra hơn một lập trình viên bảo trì.

EDIT: Có một điểm quan trọng khác trong việc mô tả sức mạnh của ngôn ngữ: phạm vi các khái niệm mà bạn có thể diễn đạt và bạn có thể dễ dàng đạt được cả hai đầu của ngôn ngữ đó như thế nào. Paul Graham thích đánh giá điều này về mức độ trừu tượng mà bạn có thể đạt tới, nhưng đó chỉ là một nửa. Bất kỳ ngôn ngữ nào áp đặt giới hạn trừu tượng thấp hơn, bên dưới mà bạn không thể đi khi cần thiết, sẽ bị tê liệt vì các chi tiết bị trừu tượng hóa đều có lý do. Đây là điểm khác biệt giữa ngôn ngữ đồ chơi dễ đọc như COBOL và ngôn ngữ mạnh mẽ dễ đọc: COBOL không có con trỏ và không có quyền truy cập vào lắp ráp nội tuyến, nơi bạn có thể diễn đạt bất kỳ tính toán nào, ngay cả những ngôn ngữ mà COBOL không phù hợp.

COBOL cũng không đặc biệt tốt trong việc đạt được mức cao của phổ trừu tượng. Theo Wikipedia, nó "không có các loại do người dùng định nghĩa và không có các hàm do người dùng định nghĩa", điều này gây khó khăn cho việc tạo các thuật toán và cấu trúc dữ liệu.


1
Vấn đề tôi gặp phải với điều này là nó dường như chỉ ra COBOL là một ngôn ngữ rất mạnh.
David Thornley

2
Tôi lấy nó bạn không biết Lisp? :)
dash-tom-bang

1
@Matt: Đó là điều. Ngôn ngữ được sử dụng để làm gì bị giới hạn bởi những gì ngôn ngữ có thể được sử dụng và bạn có thể làm với Python ít hơn nhiều so với ngôn ngữ không trừu tượng hóa các chi tiết liên quan đến bộ nhớ.
Mason Wheeler

3
-1 Do khái niệm ngầm rằng mã ngắn hơn, biểu cảm hơn bằng cách nào đó khó duy trì hơn. Bạn đã sử dụng cả hai ý nghĩa phổ biến của sức mạnh ngôn ngữ (tính biểu cảm và tính cởi mở) và đưa chúng vào một khái niệm chỉ một nửa thể hiện một trong hai ý tưởng ban đầu.
CodexArcanum

1
@ Jorg W Mittag: Bạn nói đúng, nhưng tôi nghĩ rằng câu tôi đã trích dẫn đề cập đến việc kiểm soát trực tiếp tài nguyên phần cứng (ví dụ: bộ nhớ): C ++ cho phép bạn kiểm soát nhiều hơn. Tất nhiên, nếu bạn triển khai một máy ảo, bạn có toàn quyền kiểm soát, nhưng tôi nghĩ Mason Wheeler đề cập đến việc có quyền kiểm soát máy thật.
Giorgio

4

Điều này đã được tranh luận nhiều lần ở độ dài lớn (ví dụ, trên comp.lang.lisp, nhiều lần). Tôi không nghĩ có ai từng đưa ra câu trả lời "đúng" nhưng rất nhiều người đã đưa ra câu trả lời khiến tôi thấy rõ là sai.

Trong các câu trả lời tôi thấy ở đây, hãy để tôi chọn câu trả lời của Mason Wheeler. Một mặt, các vấn đề anh ấy đề cập rất quan trọng - nhưng mặt khác, tôi hoàn toàn không thể tưởng tượng được việc gọi chúng ở tất cả liên quan đến "quyền lực". Nó giống như anh ấy nói chiếc xe mini Honda của mình mạnh hơn một chiếc xe kéo nhiên liệu hàng đầu bởi vì nó an toàn hơn, yên tĩnh hơn, xử lý tốt hơn, nhiều phòng khách hơn và đi xe thoải mái hơn nhiều. Tất cả điều này là hoàn toàn đúng, và tất cả đều quan trọng. Những yếu tố đó (trong số nhiều yếu tố khác) làm cho minivan trở nên thiết thực và hợp lý hơn đối với hầu hết mọi người - nhưng họ không thay đổi thực tế rằng động cơ của minivan chỉ tạo ra khoảng 250 HP trong khi con rồng tạo ra khoảng 8000 HP.

Vấn đề, tất nhiên, là với các phương tiện có một định nghĩa rõ ràng về những gì cấu thành "sức mạnh" và những gì không. Với các ngôn ngữ lập trình, đối với tôi, cuộc thảo luận kết thúc tương đương với việc xử lý, thoải mái, tốc độ, sức chứa hàng hóa và phạm vi bay như tất cả đều là một phần của "sức mạnh". Kết quả có xu hướng là các luồng chạy liên tục, tạo ra một lượng nhiệt lớn hơn ánh sáng. Hầu hết các câu hỏi phát sinh về cơ bản đều đi đến mức độ quan trọng mà bạn gắn với các tính năng hoàn toàn không liên quan và trực giao - ví dụ: là khả năng lập trình MMU bằng ngôn ngữ lắp ráp ít nhiều "mạnh" hơn khả năng tạo các hàm cấp cao hơn ở Haskell? Ít nhất là IMO, không có cách nào có ý nghĩa để so sánh cả hai và không có câu trả lời có ý nghĩa nào là "

Như vậy, nhiều như tôi ghét tôi phải nói rằng trong trường hợp này, câu trả lời có ý nghĩa duy nhất về cơ bản là một câu tương đối - một ngôn ngữ mạnh mẽ là ngôn ngữ mà bạn tìm thấy giúp bạn thực hiện những gì bạn muốn. Sự khác biệt trong mục tiêu của mọi người làm cho hầu hết các phép đo sức mạnh "tuyệt đối" trở nên vô nghĩa.


3

Sự cân bằng đúng đắn của sự ngắn gọn và linh hoạt.

Câu hỏi tuyệt vời. Cho rằng nhiều ngôn ngữ là "Turing hoàn thành", chúng ta có thể đặt tất cả chúng trên cơ sở bình đẳng liên quan đến những gì chúng có khả năng về mặt lý thuyết. Nhưng chúng tôi không làm điều đó bởi vì ngôn ngữ rõ ràng khác nhau. Và sự khác biệt là gì?

Sự khác biệt là khả năng nói rất nhiều điều khác nhau với rất ít . Nếu chúng ta có thể nhảy ngay đến cực đoan, tôi có thể tạo một ngôn ngữ là ngôn ngữ tốt nhất để tự động khởi tạo hệ thống quản lý nội dung chỉ bằng một ký tự, 'c'. Nhưng quan điểm của nó sẽ là gì? Chắc chắn, nó mạnh mẽ theo nghĩa rất ngắn gọn, nhưng nó không linh hoạt. Những gì bạn muốn là một ngôn ngữ cho phép bạn nói nhiều điều phức tạp khác nhau mà không quá dài dòng. Không giống như lắp ráp, có khả năng mọi thứ dưới ánh mặt trời, vô cùng linh hoạt nhưng vô cùng dài dòng.

Một ngôn ngữ mạnh mẽ là một ngôn ngữ cho phép bạn nói nhiều điều khác nhau với độ dài ít nhất có thể.


1
-1. Tôi xin lỗi, nhưng đó không chỉ là một quan niệm sai lầm, mà còn là một điều nguy hiểm, vì nó có thể cản trở nghiêm trọng năng suất xuống dòng.
Mason Wheeler

@Mason Wheeler: Bạn có thể giải thích?
Joey Adams

@Joey: Xem câu trả lời của tôi cho câu hỏi này.
Mason Wheeler

1

Khi bạn nhấn Turing hoàn chỉnh (và ngôn ngữ dễ dàng thực hiện điều này), "sức mạnh" không có nghĩa gì nhiều, theo nghĩa là bất cứ điều gì bạn có thể nói bằng một ngôn ngữ hoàn chỉnh Turing bạn có thể nói bằng ngôn ngữ khác. Mark Canlas 'trả lời cho nó: sự ngắn gọn và linh hoạt tạo nên sự khác biệt.

Phải nói rằng, bài viết của Matthias Felleisen về sức mạnh biểu cảm của ngôn ngữ lập trình làm cho việc đọc thú vị. Trong đó, ông cố gắng chính thức hóa khái niệm về tính biểu cảm trong các ngôn ngữ.


Nhân tiện, điều này không thực sự đúng. Tôi đã thấy các ngôn ngữ Turing hoàn chỉnh nhưng kém mạnh mẽ hơn các ngôn ngữ khác. Một ví dụ đơn giản: xem xét một ngôn ngữ chỉ có số nguyên và chuỗi là kiểu dữ liệu của nó, không có cách nào để chuyển đổi giữa chúng, tính toán tùy ý trên số nguyên và chỉ nối chuỗi và so sánh trên chuỗi. (Tôi đã làm việc với một ngôn ngữ như vậy.) Nó hoàn thành Turing, nhưng nó không thể biểu thị các hàm tùy ý trên các chuỗi, vì vậy việc thêm nhiều chức năng sẽ tăng sức mạnh tính toán của nó.
Revierpost

@reinerpost - Ngôn ngữ Turing-Complete cho biết vẫn có thể tính toán các hàm tùy ý trên các chuỗi, nó chỉ phải biểu diễn chúng theo một cách khác. Tính đầy đủ của Turing khá trực giao với câu hỏi về loại dữ liệu nào bạn có sẵn. Ví dụ, một số ngôn ngữ hoàn chỉnh Turing không có loại dữ liệu và chỉ đại diện cho mọi thứ có chức năng - và phải dùng đến những thứ như Church Encoding cho số học.
mikera

1

Dường như có rất nhiều sự bất đồng về những gì cấu thành sức mạnh ngôn ngữ. Đó có phải là sự căng thẳng, dễ đọc, khả năng thích ứng hay chỉ là sự hoàn thiện Turing đơn giản? Tôi nghĩ rằng tất cả các yếu tố này đi vào hoạt động, vì vậy có lẽ cách tốt nhất để xem xét nó là về điểm số. Vâng, tôi đang nói về game nhập vai bằng giấy bút ở đây.

Ý tưởng là mỗi ngôn ngữ có (khoảng) cùng một số "điểm", có thể được phân phối tùy ý trên một số danh mục. Đối với các mục đích thảo luận, nói rằng các yếu tố duy nhất là ngắn gọn, dễ đọc và linh hoạt. Một ngôn ngữ sau đó có thể cực kỳ ngắn gọn và linh hoạt, nhưng do đó rất khó đọc; hoặc rất dễ đọc và linh hoạt, nhưng vô cùng dài dòng.

(Có thể cho rằng, số điểm mà một ngôn ngữ phải phân phối được xác định bởi kỹ năng của người thiết kế và người thực hiện, nhưng hãy giả vờ rằng tất cả các nhà thiết kế ngôn ngữ đều giỏi như nhau về những gì họ làm.)

Khi một nhà thiết kế ngôn ngữ quyết định tăng sức mạnh của ngôn ngữ trong một danh mục, họ sẽ lấy đi một phần của sức mạnh tiềm năng đó từ mọi danh mục khác. Đây là lý do tại sao người ta thường nói rằng thiết kế ngôn ngữ lập trình là tất cả về sự đánh đổi. Từ quan điểm này, sức mạnh tổng thể của một ngôn ngữ vẫn chưa thể xác định được và chúng ta phải trở lại phương pháp phân loại ngôn ngữ đã thử và thực sự dựa trên thế mạnh tương đối của chúng. Không thỏa mãn? Quá tệ.

Bạn có thể lập luận theo hai cách: một ngôn ngữ mạnh mẽ là một ngôn ngữ có sự phân phối điểm tương đối đồng đều (jack của tất cả các giao dịch, không thành thạo) hoặc có càng nhiều điểm càng tốt trong một lĩnh vực mà không để người khác không giám sát (chuyên gia). Không có thứ gọi là ngôn ngữ "người phục hưng", với khả năng làm chủ hoàn hảo trong nhiều lĩnh vực. Và nếu đó là định nghĩa của bạn về ngôn ngữ mạnh mẽ nhất có thể, thì bạn hoàn toàn không gặp may.

Để đọc thêm, bài viết này (ngẫu nhiên cũng bởi Paul Graham, người dường như có nhiều ý kiến ​​trái chiều) chạm vào ý tưởng rằng, mặc dù có thể khó xác định làm thế nào , ngôn ngữ lập trình thực sự khác nhau về sức mạnh. Anh ta lập luận khá thuyết phục rằng rất dễ để thấy một ngôn ngữ kém mạnh mẽ hơn ngôn ngữ ưa thích của bạn như thế nào với một loạt những thứ khác được ném vào. Tôi để lại cho bạn một trích dẫn từ tờ giấy đó:

Bằng cách cảm ứng, các lập trình viên duy nhất ở một vị trí để thấy tất cả sự khác biệt về sức mạnh giữa các ngôn ngữ khác nhau là những người hiểu ngôn ngữ mạnh nhất. . cách họ nghĩ về các chương trình.

Tôi không đồng ý với mô hình của bạn rằng tất cả các ngôn ngữ nhất thiết phải có số điểm bằng nhau trong phân phối của chúng. Chúng ta hãy lấy ví dụ tuyệt vời của brainf * ck và chúng ta có thể dễ dàng nói rằng nó không thể so sánh với bất kỳ ngôn ngữ hiện đại nào, ngay cả khi chỉ bằng tổng số điểm. tức là nó không phải là một trò chơi có tổng bằng không trong ngôn ngữ lập trình - ngôn ngữ không bắt đầu bằng x điểm và phân phối chúng, chúng bắt đầu bằng 0 và nhận điểm tùy theo tính năng. Rằng có một số thỏa hiệp cần phải được thực hiện tất nhiên là tự nhiên nhưng tất cả các lựa chọn không bằng nhau (ít nhất là ý kiến ​​của tôi).
n1ckp

Tôi đã không nói rằng tất cả các ngôn ngữ nhất thiết phải có cùng số điểm. Tôi cho rằng tất cả các ngôn ngữ đang được xem xét (có nghĩa là, ngôn ngữ thiết kế để sử dụng thực tế) có khoảng cùng một số. Ngôn ngữ bí truyền là một trường hợp bệnh lý bởi vì chúng không được thiết kế để trở nên hữu ích ngay từ đầu. Tôi đã đơn giản hóa để tranh luận, vì nó không hữu ích để cố phân biệt giữa các ngôn ngữ dựa trên "số lượng tính năng" tuyệt đối, nếu trên thực tế các tính năng là có thể đếm được.
Jon Purdy

xin lỗi tôi đọc lại bài viết của bạn và tôi phải đồng ý rằng tôi đã đọc quá nhanh .. nhưng tôi vẫn không đồng ý rằng mọi ngôn ngữ (chính thống) đều có những điểm giống nhau. Hãy dùng Java và c ++ vì chúng là ngôn ngữ tôi biết có phần tốt. Tôi khá chắc chắn rằng tôi có thể khẳng định rằng c ++ mạnh mẽ hơn Java chỉ vì c ++ tắt về cơ bản mọi thứ mà Java làm (ngoại trừ gc - nhưng sau đó java cũng không cung cấp quản lý bộ nhớ thủ công) PLUS nhiều hơn (các mẫu thực FTW). Đó là điều mà phần nào tôi muốn làm cho tôi nghĩ: Không, không phải tất cả các ngôn ngữ đều gần như bằng nhau trong vùng đất cổ tích lập trình, thậm chí
n1ckp

khi chỉ so sánh các ngôn ngữ chính.
n1ckp

0

Ngôn ngữ lập trình là công cụ - không hơn, không kém. Một số công cụ cực kỳ chuyên dụng và phù hợp cho các mục đích cụ thể; những người khác được khái quát hóa và đơn giản hóa đến mức gần như vô dụng.

Tôi sẽ lập luận rằng ngôn ngữ "mạnh mẽ" nhất là ngôn ngữ cho phép bạn đạt được mục tiêu của mình với sự đầu tư tối thiểu về thời gian, năng lượng và các sự phục hồi khác; đó là ngôn ngữ cung cấp ROI lớn nhất. Trong một số tình huống có thể là C; ở những người khác, Java; vẫn còn những người khác, Haskell.

Điều tốt nhất để làm là làm quen với nhiều ngôn ngữ khác nhau và chúng hữu ích cho việc gì. Sau đó, khi đến lúc bắt đầu một dự án mới, bạn có thể đưa ra quyết định sáng suốt về việc nào sẽ là phù hợp nhất.


-1

Các cuộc thảo luận về ngôn ngữ lập trình là - IMHO - giống như các cuộc thảo luận về ứng dụng thư khách trong một số nhóm tin Linux: chúng có xu hướng là một cuộc chiến rực lửa. Tôi có thể nhớ những lúc VB6 phổ biến. Thậm chí có người còn tranh luận rằng đó hoàn toàn không phải là ngôn ngữ lập trình, trong khi những người khác tạo ra các ứng dụng tuyệt đẹp với nó.

Tôi nghĩ rằng các ngôn ngữ lập trình đã khác nhau trong khái niệm này vì người sáng tạo có những điều khác biệt trong tâm trí khi họ tạo / thiết kế ngôn ngữ. Vì vậy, một ngôn ngữ phù hợp với một mục đích - và trong hoàn cảnh đó là mạnh mẽ - có thể không phù hợp với ngôn ngữ khác. Đặt tên cho ngôn ngữ mạnh mẽ hay không thì hoàn toàn chủ quan. Điều đó nói rằng, tôi không nghĩ rằng có một số liệu có thể được áp dụng.


+1 để chống lại downvote không giải thích được và vì tôi thường đồng ý với nó. Sử dụng một ngôn ngữ cho nhiệm vụ mà nó được thiết kế cho. Đừng viết GUI phức tạp bằng C, đừng viết các thuật toán hoặc HĐH phức tạp trong VB6
Gerry

-1

Chúng là tất cả các công cụ trong rương công cụ của bạn. Một cái búa có thể mạnh mẽ, nhưng không phải nếu bạn cần một cái cờ lê. C / C ++ thật tuyệt nếu bạn là một lập trình viên hệ thống, nhưng Adobe Flash có lẽ phù hợp hơn với trang web chơi game mà bạn muốn xây dựng.


-1

Ngôn ngữ lập trình mạnh mẽ nhất là ngôn ngữ giải quyết vấn đề lập trình tuyến tính sau :

Tối đa hóa

    Nhanh chóng   phát triển
    + Dễ đọc mã
    + Dễ gỡ lỗi
    + Tính ngắn gọn / ngắn gọn của biểu thức
    + Dễ học / dạy
    - Sử dụng CPU
    - Yêu cầu bộ nhớ

Theo

  • Nó phải là Turing Complete.
  • Nó phải là đa mô hình : chức năng, hướng đối tượng, lập trình logic, lập trình ràng buộc, đồng thời, tính toán phân tán, v.v.
  • Nó phải linh hoạt , cho phép tạo giao diện dòng lệnh, thư viện thành phần, máy chủ, GUI và ứng dụng web.
  • Nó phải có khả năng di động , nghĩa là dễ dàng chuyển và duy trì trong một thiết lập đa nền tảng.
  • Nó phải có khả năng thích ứng , tức là mở để thay đổi và có thể phát triển như phần cứng mới (chip lượng tử), mô hình mới và những đổi mới khác trong công nghệ xảy ra.
  • Nó phải khuyến khích sự phát triển của các thư viện (như CPAN, CTAN và CRAN).
  • Nó phải là nguồn mởmiễn phí .

(Và vâng, tôi biết, tôi đã đăng một câu trả lời hoàn toàn trái ngược. Đó là vì tôi là một người biện chứng.)


-2

Điều này được viết liên quan đến ngôn ngữ tự nhiên, nhưng tôi nghĩ nó cũng phù hợp với ngôn ngữ lập trình:

Một niềm tin rằng một số ngôn ngữ thực chất vượt trội so với những ngôn ngữ khác là phổ biến, nhưng nó không có cơ sở trong thực tế ngôn ngữ. Một số ngôn ngữ tất nhiên hữu ích hoặc có uy tín hơn các ngôn ngữ khác, trong một giai đoạn lịch sử cụ thể, nhưng điều này là do sự ưu việt của người nói tại thời điểm đó, và không phải do bất kỳ đặc điểm ngôn ngữ vốn có.
--David Crystal (chủ biên). Bách khoa toàn thư Cambridge 2 / e (1997). tr.7

"Sức mạnh" đơn giản là không thể quy cho một ngôn ngữ khác ngôn ngữ khác. Sẽ thật ngớ ngẩn khi nói "Tiếng Trung là một ngôn ngữ mạnh hơn tiếng Hàn". Tương tự như vậy, thật ngớ ngẩn khi nói "APL là một ngôn ngữ mạnh hơn so với COBOL."

Đã có một số nỗ lực để đánh đồng sức mạnh ngôn ngữ với một số biện pháp khách quan. Tôi tin rằng những nỗ lực này thất bại:

  • Có thể dễ dàng kiếm được một công việc ở Mỹ nếu bạn nói tiếng Anh Mỹ hơn là nói tiếng Maori. Tương tự như vậy, không dễ nghi ngờ gì để có được một công việc lập trình Java hoặc C, hơn là LISP hay J. Nhưng lợi thế kinh tế này chắc chắn không phản ánh một loại sức mạnh bẩm sinh nào của ngôn ngữ. Đó là về sức mạnh của người nói ngôn ngữ.
  • "Hi" không tốt hơn "ni hao" hay "shalom" vì nó ngắn hơn. Tương tự, trong khi một chức năng có thể được thể hiện ngắn gọn hơn trong APL so với COBOL, thì điều này cũng không phản ánh một loại sức mạnh bẩm sinh nào của ngôn ngữ.

Ý kiến ​​của tôi là các cuộc thảo luận về "sức mạnh của ngôn ngữ này so với ngôn ngữ khác" là những biểu hiện che giấu cảm giác vượt trội của người nói so với một số nhóm khác. Nói tóm lại, định kiến ​​và định kiến ​​của nó. Tất nhiên, những người định kiến ​​thực sự, thực sự tin vào định kiến ​​của họ khá mạnh mẽ, và không chắc bạn có thể thuyết phục họ thay đổi suy nghĩ của họ.


Tôi không đồng ý. Đối với một ví dụ dễ hiểu, tôi nghĩ rằng không ai sẽ nói khác hơn là nói hơn là tồn tại ngôn ngữ mạnh mẽ hơn so với brainf * ck (nói) ngay cả khi về mặt lý thuyết nó đã hoàn thành (tôi nghĩ). Vấn đề là 'mạnh mẽ' là một phẩm chất nhất định không liên quan gì đến thực tế là tất cả chúng đều 'hoàn thành'. Tôi đồng ý rằng điều đó có thể hơi chủ quan nhưng để nói rằng tất cả các ngôn ngữ đều bình đẳng liên quan đến 'sức mạnh' dường như khá xa vời.
n1ckp

1
@ n1ck: Bạn đang nói Power = Khả năng đọc? Và :. Sự thiếu khả năng đọc của BF ngụ ý sự thiếu sức mạnh của nó? APL và J cũng có khả năng đọc rất thấp, tuy nhiên chúng cực kỳ hữu ích và cô đọng (mặc dù tôi chắc chắn không đánh đồng tính hữu dụng hay cô đọng với sức mạnh). Đi theo hướng ngược lại, COBOL rất dễ đọc; verbose thẳng đứng của nó; nhưng một lần nữa, điều này hầu như không làm cho nó mạnh hơn APL hoặc BF. BF rất thú vị; nó có sức mạnh để giải trí; nhưng đó không phải là Power qua Power. Vấn đề là dường như không ai có một lý thuyết tốt về Quyền lực mà họ có thể có được sự đồng thuận.
AN khác

1
Không, tôi không có nghĩa là sức mạnh = khả năng đọc. Tôi chỉ không đồng ý về quan điểm của bạn rằng tất cả các ngôn ngữ đều bình đẳng và chúng tôi không thể so sánh ngôn ngữ về 'sự mạnh mẽ', tuy nhiên bạn xác định nó. Theo tôi, một cơ bản về khả năng đọc được yêu cầu để cung cấp bất kỳ sức mạnh nào cho ngôn ngữ nhưng nó không thực sự là câu hỏi. Nếu chúng ta muốn thực sự trả lời câu hỏi, tất nhiên chúng ta sẽ cần xác định sự mạnh mẽ trước tiên nhưng theo quan điểm của tôi thì đây không giống như 'tốt nhất trong mọi tình huống' mà câu trả lời của bạn dường như gợi ý cho tôi rằng bạn diễn giải theo cách đó (nghĩa là không tốt nhất ngôn ngữ cho tất cả mọi thứ, mà tôi đồng ý).
n1ckp
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.