it-swarm-vi.com

Có bao nhiêu loại ngôn ngữ lập trình?

Về cơ bản, tôi muốn học nhiều ngôn ngữ lập trình để trở thành một lập trình viên tuyệt vời. Tôi chỉ biết một số ít chuyên sâu và Tôi đã hy vọng ai đó có thể giải thích về số lượng lớp hoặc loại của ngôn ngữ lập trình có. Giống như cách bạn sẽ gộp chúng lại với nhau nếu bạn phải học chúng theo nhóm.

Đến từ nền tảng Java, tôi quen thuộc với kiểu gõ tĩnh, nhưng tôi biết rằng ngoài việc gõ động phải có sự đa dạng trong các ngôn ngữ có sẵn mà tôi rất thích xem phân tích phân loại nếu có thể.

30
sova

Nó phụ thuộc vào cách bạn muốn phân loại ngôn ngữ. Về cơ bản, các ngôn ngữ có thể được chia thành hai loại: mệnh lệnh ngôn ngữ mà bạn hướng dẫn máy tính cách để thực hiện một tác vụ, và khai báo ngôn ngữ mà bạn nói với máy tính phải làm gì . Các ngôn ngữ khai báo có thể được chia nhỏ thành hàm ngôn ngữ, trong đó một chương trình được xây dựng bằng cách soạn các hàm và logic ngôn ngữ lập trình, trong đó một chương trình được xây dựng thông qua một bộ kết nối hợp lý. Các ngôn ngữ bắt buộc đọc giống như một danh sách các bước để giải quyết vấn đề, giống như một công thức. Các ngôn ngữ bắt buộc bao gồm C, C++ và Java; ngôn ngữ chức năng bao gồm Haskell; ngôn ngữ lập trình logic bao gồm Prolog.

Các ngôn ngữ bắt buộc đôi khi được chia thành hai nhóm nhỏ: thủ tục các ngôn ngữ như C và ngôn ngữ hướng đối tượng. Tuy nhiên, các ngôn ngữ hướng đối tượng là một chút trực giao với các nhóm, vì có các ngôn ngữ chức năng hướng đối tượng (OCaml và Scala là ví dụ).

Bạn cũng có thể nhóm các ngôn ngữ bằng cách nhập: tĩnhđộng. Các ngôn ngữ được nhập tĩnh là những ngôn ngữ trong đó việc gõ được kiểm tra (và thường được thi hành) trước khi chạy chương trình (thường là trong giai đoạn biên dịch); ngôn ngữ gõ động kiểm tra loại trì hoãn kiểm tra thời gian chạy. C, C++ và Java là các ngôn ngữ được nhập tĩnh; Python, Ruby, JavaScript và Objective-C là các ngôn ngữ được nhập động. Ngoài ra còn có chưa được gõ ngôn ngữ, trong đó bao gồm ngôn ngữ lập trình Forth.

Bạn cũng có thể nhóm các ngôn ngữ theo cách gõ kỷ luật : yế gõ, hỗ trợ chuyển đổi kiểu ẩn và mạnh gõ, cấm chuyển đổi kiểu ngầm định. Các dòng giữa hai thứ này hơi mờ: theo một số định nghĩa, C là một ngôn ngữ được gõ yếu, trong khi các ngôn ngữ khác cho rằng nó được gõ mạnh. Gõ kỷ luật không thực sự là một cách hữu ích để nhóm ngôn ngữ.

73
mipadi
  • Hội
  • Thủ tục
    • Căn bản
    • C
  • Hướng đối tượng
    • C #
    • Java
  • Tuyên bố
    • Prolog
    • SQL
  • Chức năng
    • LISP
    • Haskell

Đây là những cái chính, nhưng có rất nhiều mô thức khác ngoài kia, và có rất nhiều sự chồng chéo giữa chúng.

12
user1842

Đối với các loại ngôn ngữ lập trình (Paradigms), xem tại đây:
[.__.] http://en.wikipedia.org/wiki/Programming_paradigm

Để biết các đặc điểm khác của ngôn ngữ lập trình (ví dụ: Kiểu hệ thống), hãy xem tại đây: http://en.wikipedia.org/wiki/Programming_ling

11
Robert Harvey

Nhấp vào hình ảnh để xem PDF.Programming paradigms poster

Bạn nên xem Các mô hình lập trình cho người giả: Điều mà mọi lập trình viên nên biết của Peter Van Roy. Điều này sẽ cung cấp cho bạn một cái nhìn tổng quan về cách nó đang diễn ra bên ngoài.

Nếu bạn muốn đi xa hơn, bạn có thể đọc Khái niệm, Kỹ thuật và Mô hình lập trình máy tính . Bằng cách này, bạn sẽ không học được nhiều ngôn ngữ, nhưng bạn sẽ học được những mô hình ẩn sau các loại ngôn ngữ khác nhau. Vì vậy, học một ngôn ngữ mới sẽ dễ dàng hơn cho bạn.

9
mmdemirbas
  • Thủ tục: Hội, Java, C #, F #, LISP, Fortran.

  • Đặt dựa trên: SQL.

  • Mô hình dựa trên: Perl, Regex, Snobol.

  • Cây dựa: XSLT.

  • Mảng dựa: APL.

6
Tangurena

Có nhiều cách khác nhau để trả lời điều này, nhưng về mặt chúng có thể được phân loại thành:

Ngôn ngữ máy: Ngôn ngữ máy là ngôn ngữ lập trình cấp thấp. Nó dễ hiểu bởi máy tính nhưng khó đọc bởi mọi người. Đây là lý do tại sao mọi người sử dụng ngôn ngữ lập trình cấp cao hơn. Các chương trình được viết bằng ngôn ngữ cấp cao cũng được biên dịch và/hoặc diễn giải thành ngôn ngữ máy để máy tính có thể thực thi chúng.

Ngôn ngữ hội: Ngôn ngữ hội là biểu diễn của ngôn ngữ máy. Nói cách khác, mỗi hướng dẫn ngôn ngữ hội sẽ chuyển thành một hướng dẫn ngôn ngữ máy. Mặc dù các câu lệnh ngôn ngữ hội có thể đọc được, các câu lệnh vẫn ở mức độ thấp. Một nhược điểm của ngôn ngữ hội là nó không khả chuyển, vì mỗi nền tảng đi kèm với một ngôn ngữ hội cụ thể.

Ngôn ngữ cấp cao: Ngôn ngữ cấp cao là thứ mà hầu hết các lập trình viên sử dụng hiện nay. Các ngôn ngữ như C, C++ và Java đều là ngôn ngữ cấp cao. Ưu điểm của ngôn ngữ cấp cao là chúng rất dễ đọc và dễ mang theo. Nhược điểm của ngôn ngữ cấp cao là ít mạnh hơn ngôn ngữ hội. Bởi vì một câu lệnh trong ngôn ngữ cấp cao được dịch sang nhiều câu lệnh ngôn ngữ máy.

Các ngôn ngữ cấp cao có thể được phân loại thành:

  1. Ngôn ngữ hàm: Trong ngôn ngữ hàm, một chương trình được chia thành các định nghĩa hàm. Ngôn ngữ chức năng là một loại ngôn ngữ khai báo. Chúng chủ yếu dựa trên tính toán lambda đánh máy với hằng số. Một số ngôn ngữ Chức năng nổi tiếng là Scala, F #, Clojure và LISP.

  2. Ngôn ngữ thủ tục: Trong Ngôn ngữ thủ tục, một chương trình được viết theo một chuỗi các bước cần được thực hiện để tạo kết quả. COBOL, FORTRAN và C là một số ngôn ngữ thủ tục.

  3. Ngôn ngữ lập trình hướng đối tượng: Trong OOP ngôn ngữ, một chương trình được chia thành Đối tượng chứa dữ liệu cũng như phương thức hoạt động trên dữ liệu. Java, C # và C++ là OOP.

  4. Ngôn ngữ lập trình logic: Ngôn ngữ logic được sử dụng để tạo các chương trình cho phép máy tính suy luận logic. ví dụ: ngôn ngữ logic

Đối với nghiên cứu chuyên sâu, kiểm tra:

4
Badar

Tôi có xu hướng suy nghĩ về các tính năng:

Cú pháp :

C-Dựa hoặc những gì có bạn. Java có cú pháp dựa trên C. Tôi rất khuyên bạn nên thử một cái gì đó như Python hoặc Ruby để thoát ra khỏi đầu bạn về cú pháp và suy nghĩ nhiều hơn về các nguyên tắc cơ bản về cách thức hoạt động của một ngôn ngữ nhất định. Tôi cho rằng không có cú pháp nào cần phải cồng kềnh hơn dựa trên C và không có vấn đề xây dựng khối xung quanh khoảng trắng.

Được biên dịch so với giải thích w. Quá trình xây dựng so với phiên dịch/Bảng điều khiển :

Tôi có rất ít sự quen thuộc với thời gian biên dịch so với các mối quan tâm về môi trường thời gian chạy nhưng tôi nhận thấy rằng có rất nhiều mối quan tâm mà tôi hiếm khi nghĩ đến.

Tương tự như vậy, có rất nhiều ngôn ngữ được giải thích vẫn có một quá trình biên dịch để chạy bên trong một máy ảo như Java. Bạn vẫn phải xây dựng lại để xem các thay đổi đối với mọi thứ.

Và sau đó có JavaScript và Python mà bạn có thể thực thi nhanh chóng, ra lệnh bằng lệnh trong bảng điều khiển trong môi trường trực tiếp. Cả ba có thể dẫn đến các cách viết mã rất khác nhau.

Động so với gõ nghiêm ngặt :

Tôi có xu hướng xem hai là sự đánh đổi thiết kế. Khi bạn ở cấp độ thấp hơn nhiều và hiệu suất là rất quan trọng, gõ tĩnh có rất nhiều ý nghĩa. Tôi chưa bao giờ hiểu khái niệm này là "an toàn" hơn so với người khác bằng cách nào đó nhưng tôi đã nghĩ ra một ngôn ngữ rất dẻo/năng động, nơi bạn chỉ học cách hệ thống gõ hoạt động và những gì mong đợi, về cơ bản. Loại shenanigans hiếm khi là mối quan tâm của tôi trong JS. Trong một số cách, tính linh hoạt có thể làm cho mọi thứ trở nên mạnh mẽ hơn, mặc dù phải thừa nhận rằng một cú chạm mạnh mẽ hơn cho một nhà phát triển cấp độ cao hơn nếu bạn không biết về một số lỗ hổng trong ngôn ngữ.

Phạm vi cấp khối so với Phạm vi chức năng so với? :

Block-Level là phổ biến nhất (mọi thứ giữa {} trong hầu hết các ngôn ngữ cú pháp dựa trên c). Phạm vi JavaScript được xây dựng xung quanh các hàm (cũng được sử dụng để xây dựng các đối tượng sao cho các đối tượng cũng hiệu quả). Ngoài ra còn có một sự thay đổi lớn trong loại quyền truy cập mà bạn có từ phạm vi bên trong đến phạm vi bên ngoài. Tôi không quen thuộc với các kế hoạch phạm vi khác nhưng tôi chắc chắn chúng tồn tại.

Cổ điển OOP so với Prototypal OOP so với Hầu như-OOP (structs trong C?) So với Non-OOP :

Ngay cả trong lớp OOP cũng có rất nhiều chỗ để thay đổi. Cho dù bạn có thể thực hiện nhiều kế thừa (ew, vượt quá, ew), xác định giao diện, v.v ...

Trong JavaScript, chúng ta có một loại nguyên mẫu hỗn hợp đóng thế OOP trong đó các đối tượng đơn giản hơn đáng kể, có khả năng biến đổi cao, nhưng chúng ta vẫn có khả năng tách giao diện khỏi các mối quan tâm nội bộ, mà IMO, là khía cạnh quan trọng đóng gói.

Vấn đề về OOP là thực sự có rất nhiều thứ bạn có thể rút ra mà về cơ bản là định hướng OOP mà không phải là kỹ thuật OOP. Tất nhiên có những người theo chủ nghĩa thuần túy nhưng vào cuối ngày, Các mẫu thiết kế là về việc đạt được một số trừu tượng nhất định hoạt động tốt trong một số trường hợp nhất định. Đừng quá nhanh chóng cho rằng các ý tưởng từ ngôn ngữ dựa trên OOP không được sử dụng trong một cái gì đó thiên về thủ tục hơn. Và tôi không nói về JavaScript. hoàn toàn không bị giới hạn bởi phiên bản ngớ ngẩn của một nguyên mẫu dựa trên OOP mô hình.

Hàm hạng nhất :

Không có những thứ này trong một ngôn ngữ là một điều khó khăn để tôi từ bỏ. Bạn có thể truyền các hàm xung quanh giống như chúng là dữ liệu để sử dụng trong các ngữ cảnh khác. Điều này làm cho các kế hoạch xử lý sự kiện đặc biệt rất dễ thực hiện nhưng nó cũng giúp dễ dàng điều chỉnh ngôn ngữ để hoạt động theo cách bạn muốn. Đó là, hơn bất cứ điều gì tôi nghi ngờ, điều đã tạo nên thành công cho JavaScript, mặc dù nó đã được thiết kế trong hai tuần và nhận được cú pháp gần đúng của Java như là một kế hoạch tiếp thị.

Đóng :

Tôi không chắc cuộc tranh luận diễn ra ở đâu cho Java, nhưng tôi biết rất nhiều Java dev đang theo dõi tính năng này một hoặc hai năm trước. Trong một ngôn ngữ không đóng, khi một chức năng đóng, bất cứ thứ gì có thể tham chiếu nội dung nào đó từ bên trong chức năng đó sẽ không thể truy cập được vì nó là rác được thu thập. Trong một bao đóng, bối cảnh thực thi bị ràng buộc để nếu bạn có thể tham chiếu nội dung bên trong đóng chức năng từ một phạm vi khác như trong một đối tượng được trả lại hoặc về cơ bản bạn có được những chiếc bình đó khi chúng đóng lại. Nó giống như việc bạn bị kẹt chân trong cửa thu gom rác, mặc dù tôi nghi ngờ nó thực hiện giống như các bản sao của những chiếc bình đó được tạo ra vars địa phương của các thực thể tham chiếu.

Cứng nhắc/Nghiêm ngặt/An toàn so với việc mang đến cho bạn tất cả Sợi dây bạn muốn :

Các nhà phát triển JS và Java Các nhà phát triển có xu hướng không hiểu nhau chút nào và tôi nghĩ nó có liên quan nhiều đến hai ngôn ngữ nằm ở hai phía gần đối diện của phổ thiết kế cụ thể này. Tôi không ' Tôi muốn bạn bảo vệ tôi khỏi bản thân hoặc khỏi các nhà phát triển khác trong nhóm của tôi. Tôi muốn làm nhiều hơn với ít mã hơn và thực hiện tất cả theo những cách rất khác nhau (nhưng nhất quán cho một miền nhất định) tùy theo tình huống Hoàn toàn có sự đánh đổi cho cả hai và rất nhiều ngôn ngữ có xu hướng giảm nhiều hơn ở giữa.

3
Erik Reppen

Tôi nghĩ rằng một cách rút gọn cho tất cả những điều này là học đủ LISP để làm một số việc bán hữu ích. Hầu hết các mô hình này bắt đầu như là cách sử dụng LISP, vì vậy đây là cách đơn giản để thử mọi thứ.

Có một số "loại" ngôn ngữ xung quanh, nhưng những ngôn ngữ mới luôn có thể xuất hiện. Về cơ bản, mục đích của một ngôn ngữ là cho phép mã hóa các ý tưởng, khái niệm hoặc yêu cầu, càng trực tiếp càng tốt. Cuối cùng, có thể có những tình huống mà các mô hình hiện tại đang muốn, và một tình huống mới có thể cần thiết.

Một cách để xem xét là về cấu trúc bề mặt. Làm thế nào trực tiếp cho phép bạn mã hóa ý tưởng một cách chính xác, để nếu bạn thay đổi suy nghĩ về những gì bạn muốn, việc thay đổi mã tương ứng cũng dễ dàng, ít có cơ hội để đưa ra lỗi.

Một cách khác để xem xét nó là về mặt cấu trúc điều khiển. Khi ngôn ngữ được thực thi (nếu có), thứ tự xảy ra là gì, để thực hiện những gì bạn muốn? Ví dụ là: thực hiện đơn giản thông qua, đệ quy, quay lui, song song. Một tôi (ho khiêm tốn) được phát hiện là thực hiện khác biệt .

Một quan điểm hữu ích khác là bất cứ khi nào một cấu trúc dữ liệu được thiết kế, một ngôn ngữ được sinh ra. Dữ liệu được "thực thi" bởi các chương trình ứng dụng kết hợp với nó và thực hiện mọi việc, giống như một chương trình chỉ là một bó dữ liệu (như mã byte) được trình thông dịch sử dụng để thực hiện.

2
Mike Dunlavey

Tôi phải thêm rằng có các ngôn ngữ lập trình cho các ứng dụng cụ thể. Một ý tưởng xuất hiện là APT (Công cụ lập trình tự động) một ngôn ngữ được sử dụng trong sản xuất cho các công cụ máy móc.

1
Dave