2010-11-02 13 views
5

Tôi không có chuyên gia về ngôn ngữ nhưng gần đây tôi đã sử dụng ngôn ngữ và cố gắng tìm hiểu tổng quan về các khái niệm chính và ngôn ngữ "của chúng". Điều này tương tự như another question about books. Trước tiên, khái niệm ngôn ngữ lập trình chính là gì, ví dụ:Các khái niệm ngôn ngữ lập trình khác nhau và ngôn ngữ nào hiển thị chúng theo cách thuần túy

  • cấu trúc
  • thủ tục đối tượng
  • định hướng
  • đối tượng định hướng - nguyên mẫu dựa (ví dụ như Java Script)
  • chức năng (ví dụ như Haskell)
  • luận định hướng (ví dụ như Prolog)
  • meta (nếu một khái niệm thuần túy của riêng nó?)
  • ngăn xếp dựa trên (ví dụ: Forth)
  • dựa trên toán học/mảng được định hướng (ví dụ: APL)
  • declarative
  • concatenative (ví dụ như PostScript)
  • (chắc chắn danh sách không đầy đủ ...)

và thứ hai để có được một crasp tốt về những khái niệm, những gì sẽ là ngôn ngữ lập trình dựa trên/triển khai khái niệm cốt lõi của nó một cách tự nhiên và tinh khiết nhất?

  • Ví dụ Java là OO, nhưng đây không phải là ví dụ tốt bởi vì nó không phải là OO thuần túy do nguyên tử.
  • Lisp được biết đến là một ngôn ngữ chức năng, nhưng nó đa mô hình, do đó, nó không phải là tinh khiết. Nhưng Lisp có thể là một sự thực thi thuần túy "dựa trên danh sách" (nếu nó được tính là khái niệm).
  • Có ngôn ngữ được cấu trúc (không có GOTO) nhưng không phải là thủ tục không? (Có thể XSLT v1.x)
+1

Smalltalk không phải là nguyên mẫu. SELF là. Ngoài ra, một số "khái niệm" ở trên không trực giao. Người ta sẽ phải nói về * các khía cạnh cụ thể * của mỗi ngôn ngữ so với nhau (ngay cả các điều khoản trên có thể thay đổi ý nghĩa dựa trên ngữ cảnh/ngôn ngữ). SQL cũng được "đặt theo định hướng" (nhưng một "ngôn ngữ truy vấn khai báo"), không theo định hướng bảng :-) –

+0

@pst cảm ơn, tôi đã xóa các ví dụ sai. –

+2

Nhân tiện, cảm ơn vì đã không chọn Java làm ví dụ chính OO. – delnan

Trả lời

0

Nhờ JUST MY đúng Ý KIẾN' s câu trả lời tôi đã chỉ ở bên phải phương hướng. Tôi sẽ cung cấp danh sách các mô hình cùng với ngôn ngữ thuần túy của họ như xa như tôi phát hiện ra cho đến bây giờ:

  • bắt buộc
    • phi cấu trúc --- đầu BASIC, hội
    • cấu trúc ---?
    • thủ tục ---?
    • modular --- Modula-2, có lẽ Pascal
    • hướng đối tượng
      • đẳng cấp dựa --- Smalltalk
      • dựa trên nguyên mẫu --- Tự, có lẽ Java Script, Lua
  • declarative --- SQL, Regular Expressions, CSS
    • luận --- Thủy, có lẽ Prolog
    • chức năng --- Đề án, Haskell
      • ngầm/điểm miễn
        • concatenative --- Joy, Cát

Trên một "trục" khác nhau chúng tôi có

  • vô hướng --- hầu hết trong số họ
  • mảng --- APL

Không biết nơi để đặt nó:

  • ngăn xếp dựa --- Forth, Postscript
8

Thuật ngữ bạn đang tìm kiếm ở đây là "mô hình lập trình" và có a whole lot of them ngoài kia. Bạn có thể nhận được một danh sách các ngôn ngữ hỗ trợ từng ngôn ngữ từ trang Wikipedia đó và các liên kết tiếp theo của nó.

Để hiển thị "thuần túy" của bất kỳ loại nào trong số này, điều đó khó hơn vì nó phụ thuộc vào mức độ tinh khiết bạn đang tìm kiếm.

  • Đối với cấu trúc thuần túy (dưới bất kỳ định nghĩa đủ thuần túy nào "tinh khiết" ở đây), bạn có thể xem, ví dụ: Modula-2.
  • Đối với hướng đối tượng thuần túy, bạn đang tìm kiếm chủ yếu tại Smalltalk và ilk của nó nếu bạn muốn hoàn toàn mọi thứ được điều trị thống nhất (không thực sự cần thiết theo định nghĩa phổ biến nhất!) Hoặc bạn đang xem các ngôn ngữ như JavaEiffel nếu bạn sẽ chấp nhận các kiểu nguyên thủy dưới tiêu đề đó.
  • Đối với chức năng bạn đang tìm kiếm nhiều khả năng nhất tại Haskell.
  • Để lập trình logic ngôn ngữ nguyên mẫu là Prolog, nhưng nó không thực sự thuần khiết. Ngôn ngữ logic thuần túy (chủ yếu) mà tôi biết là Mercury và chỉ khi bạn xem các khối chức năng của nó về cơ bản tương thích với các khối logic của nó.

... v.v. v.v. Bạn có được ý tưởng.

+0

+1 esp. cho liên kết Wikipedia, chưa từng thấy trước đây. Nhưng các mô hình cảm thấy hơi thấp với tôi, vì thường có các nhóm máy chủ được nhóm lại với nhau. Vẫn là một khởi đầu tốt với thủ tục, OO, FP, Logic. Cảm ơn. –

+0

Tôi thực sự sẽ đề cử Ruby trên Smalltalk để định hướng đối tượng thuần túy. Cấp, Smalltalk là lần đầu tiên ở đây, nhưng Ruby theo bước chân của nó - tất cả mọi thứ là một đối tượng trong Ruby (bao gồm cả literals và định nghĩa lớp), và Ruby là hiện đại hơn, phổ biến hơn, và cho là dễ sử dụng hơn. –

+0

@Ben Lee Đồng ý rằng Ruby là OO thuần khiết hơn nhưng cũng có một số khía cạnh chức năng, Đóng cửa, bản đồ, Continuations, vv. Propably mọi ngôn ngữ hiện đại là đa mô hình? –

2

Tôi nghĩ Pascal là ngôn ngữ thủ tục kinh điển.

Tôi cũng nghĩ rằng Lisp (trớ trêu thay không phải ML) là ngôn ngữ "meta" kinh điển.

Đối với một, macro là đoạn chương trình sửa đổi cấu trúc dữ liệu đại diện cho đoạn chương trình --- vì vậy bạn sử dụng ngôn ngữ để tinh chỉnh ngôn ngữ. Thứ hai, nó được coi là thực tế phổ biến để viết tự giải thích lưu trữ, truyền thống được gọi là đánh giá metacircular: họ là những chương trình mà chương trình và chạy chúng.

Tất nhiên, bất kỳ ngôn ngữ nào khác cũng có thể làm điều đó. Trong Python bạn có quyền truy cập vào trình biên dịch python, và PyPy là một thực thi python trong python. Nhưng Lisp có, tôi nghĩ, truyền thống mạnh nhất của việc này.

Nhưng tôi là một người ngoài Lisp, vì vậy những gì tôi biết ... 'hy vọng-này-giúp ;-)

+0

+1 để hiểu ý nghĩa của câu hỏi của tôi –