Là ngôn ngữ lập trình trở nên giống ngôn ngữ tự nhiên hơn?


27

Chúng ta có thể học ngôn ngữ lập trình trong bối cảnh ngôn ngữ học không? Các ngôn ngữ lập trình có phát triển tự nhiên theo những cách tương tự như ngôn ngữ tự nhiên không?

Mặc dù tính hợp lý đầy đủ và tính nhất quán toán học là điều cần thiết cho các ngôn ngữ lập trình, nhưng vẫn cần có (đặc biệt là các ngôn ngữ hiện đại) để làm cho chúng dễ đọc và thoải mái với con người.

Là ngôn ngữ lập trình phát triển để trở nên ngôn ngữ hơn và do đó tự nhiên hơn? Ví dụ mã máy, thẻ đục lỗ và ngôn ngữ lắp ráp đã nhường chỗ cho các ngôn ngữ dễ đọc hơn như Ruby và Python, v.v.

Khi tôi nói ngôn ngữ máy tính trở nên tự nhiên hơn, tôi không có nghĩa là chúng chứa nhiều 'từ chúng ta có trong tiếng Anh', ý tôi là chúng dường như trở nên giống ngôn ngữ tự nhiên hơn, về độ phức tạp của ngữ pháp và khả năng diễn đạt ý nghĩa của chúng (ví dụ: có thể mô tả hùng hồn một truy vấn từ cơ sở dữ liệu theo cả hai cách hợp lý và dễ hiểu của con người).

Tất cả các bạn nghĩ gì? Có phải ngôn ngữ lập trình trở nên giống ngôn ngữ tự nhiên hơn, và do đó trở nên áp dụng cho các định luật Ngôn ngữ học?

Hoặc có lẽ các ngôn ngữ sống trên một quang phổ, trong đó một mặt bạn có các ngôn ngữ hợp lý cực đoan và mặt khác thì sáng tạo hơn. Có lẽ, lập trình và ngôn ngữ tự nhiên là giống hệt nhau và cả hai chỉ nằm trên phổ ngôn ngữ này (sự khác biệt duy nhất của chúng, có lẽ là 'thứ' mà chúng đang cố gắng đưa ra ý nghĩa của chúng).

Có mối liên hệ nào giữa sự phân tách (hiệu ứng Babel Tower) giữa ngôn ngữ của con người và ngôn ngữ máy tính không? Có phải chúng trở nên đa dạng hơn vì cùng một lý do (nghĩa là để giải quyết các vấn đề khác nhau trong các hệ thống máy tính / hệ thống văn hóa ngày càng phát triển, v.v.)?


3
Câu trả lời ngắn gọn: có, đúng vậy

17
Câu trả lời ngắn gọn: không, không họ không có.


3
Ngôn ngữ máy tính có xu hướng làm tốt với độ chính xác và độ chính xác, hơi giống ký hiệu toán học, cho thấy không có xu hướng đặc biệt nào để phát triển theo ngôn ngữ tự nhiên (mà tôi biết) trong vài nghìn năm qua. Tôi cũng nghi ngờ rằng nếu bạn giao tiếp với trẻ sơ sinh của mình ở Haskell trong vài năm đầu đời, bé sẽ phát triển thành thạo ngôn ngữ tự nhiên. Vì vậy, tôi nghĩ rằng có sự tương phản khá sắc nét giữa ngôn ngữ tự nhiên và máy tính. Có lẽ sự lan rộng của các kỹ thuật xây dựng ngôn ngữ đã cải thiện "tính tự nhiên" một chút theo thời gian, tôi cho rằng.

@ryanOptini: Do C #, JavaScript, Python hoặc SQL trông giống ngôn ngữ tự nhiên? Mặc dù tất cả đều sử dụng từ khóa từ tiếng Anh, nhưng không ai trong số chúng được hội tụ sang định dạng ngôn ngữ tự nhiên. COBOL có thể là gần nhất, nhưng tôi không nghĩ rằng nhiều người đang sử dụng COBOL cho các dự án sân xanh của họ.
Jim G.

Câu trả lời:


32

Không thực sự, không. Ngôn ngữ lập trình đã ngày càng trở nên giống như ngôn ngữ tự nhiên chỉ trong ý nghĩa của “những lời chúng tôi có bằng tiếng Anh” ( sic ).

Một tính năng chính của ngôn ngữ lập trình là chúng không mơ hồ. Khi bạn viết một chương trình và thực hiện nó, nó có một ý nghĩa được xác định rõ, đó là hành vi của nó. Nếu bạn muốn viết một chương trình hoạt động như dự định (một mục tiêu khó khăn), điều quan trọng là hành vi của chương trình phải càng dễ đoán càng tốt. Ngôn ngữ lập trình chưa tạo ra nhiều khác biệt trong khoảng cách rộng đối với ngôn ngữ tự nhiên.

Ngược lại, đã có công việc thu hẹp khoảng cách từ phía bên kia: phân tích các ngôn ngữ tự nhiên với các công cụ tương tự như ngôn ngữ lập trình. Lĩnh vực này được gọi là xử lý ngôn ngữ tự nhiên . Những cách tiếp cận này đã bị loại bỏ khá nhiều để ủng hộ việc học máy . Tôi sẽ trích dẫn một đoạn trong bài viết Wikipedia có liên quan trực tiếp ở đây:

Cho đến những năm 1980, hầu hết các hệ thống NLP đều dựa trên các bộ quy tắc viết tay phức tạp. Tuy nhiên, bắt đầu từ cuối những năm 1980, đã có một cuộc cách mạng trong NLP với việc giới thiệu các thuật toán học máy để xử lý ngôn ngữ. Điều này là do cả sự gia tăng đều đặn của sức mạnh tính toán do Định luật Moore và việc giảm dần sự thống trị của các lý thuyết ngôn ngữ học Chomskyan (ví dụ ngữ pháp chuyển đổi), mà nền tảng lý thuyết của nó không khuyến khích việc học ngôn ngữ học. xử lý ngôn ngữ.

Một cách mà lập trình đang phát triển là khi chúng ta thiết kế các hệ thống lớn hơn và lớn hơn, mã nguồn không phải lúc nào cũng là một cách tốt để hiểu chúng. Ví dụ, CPU Intel là một trong những đối tượng phức tạp nhất từng được Man thiết kế và mã nguồn mã nguồn của nó không phải là một tập hợp các tệp văn bản, cách xa nó. Nhưng thiết kế đầy đủ cũng không phát triển theo bất cứ thứ gì giống với ngôn ngữ của con người. Tôi không biết những công cụ nhận thức hay ẩn dụ thích hợp nào ở đây và tôi không nghĩ có ai biết cả; hỏi lại trong một vài thế kỷ

¹ Hay đúng hơn là tập các hành vi có thể chú thích với những trường hợp mà họ nảy sinh, nhưng đó là chỉ thêm một bước gián tiếp trong mô hình, vì vậy đây là không thực sự liên quan ở đây.


Đáng chú ý là những nỗ lực tạo ra các ngôn ngữ "tự nhiên" giống với ngôn ngữ lập trình hơn, không quá thành công. Xem Lojban là ví dụ phát triển nhất.
Dougal

so sánh giữa kiến ​​trúc và lập trình CPU có phần không rõ ràng, thiết kế phần cứng luôn không dựa trên văn bản, vì nó có các vấn đề hoàn toàn khác nhau để giải quyết, ví dụ như vấn đề định vị và định tuyến 2d. (nếu bất cứ điều gì thiết kế phần cứng đang chuyển sang thiết kế dựa trên văn bản nhiều hơn với HDL)
jk.

2

Ngôn ngữ máy tính có xu hướng làm tốt với độ chính xác và độ chính xác, hơi giống ký hiệu toán học, cho thấy không có xu hướng đặc biệt nào để phát triển theo ngôn ngữ tự nhiên (mà tôi biết) trong vài nghìn năm qua.

Tôi cũng nghi ngờ rằng nếu bạn giao tiếp với trẻ sơ sinh của mình ở Haskell trong vài năm đầu đời, bé sẽ phát triển thành thạo ngôn ngữ tự nhiên. Vì vậy, tôi nghĩ rằng có sự tương phản khá sắc nét giữa ngôn ngữ tự nhiên và máy tính.

Có lẽ sự lan rộng của các kỹ thuật xây dựng ngôn ngữ đã cải thiện "sự tự nhiên" một chút theo thời gian, tôi cho rằng, vì các lập trình viên "bỏ phiếu bằng chân" bằng cách sử dụng các ngôn ngữ có vẻ dễ dàng hơn với họ và số người có khả năng tạo ra ngôn ngữ đã tăng lên nhiều hơn các học viên và các công cụ tốt hơn, nhưng đây chỉ là một hiệu ứng nhỏ xung quanh các cạnh và không thể hiện sự chuyển đổi cơ bản của ngôn ngữ lập trình thành ngôn ngữ của con người.


2

một nghiên cứu trường hợp thú vị trong lĩnh vực này là Perl vs Ruby (và Python ). Perl là một ngôn ngữ kịch bản được phát triển vào đầu những năm 90, đã bổ sung nhiều khả năng so với các ngôn ngữ kịch bản dựa trên Unix trước đây (ví dụ bash). tác giả Larry Wall được ghi nhận cho biết nền tảng ngôn ngữ học của ông đã truyền cảm hứng cho một số tính năng ngôn ngữ.

tuy nhiên Perl có cú pháp vụng về và nhiều trường hợp đặc biệt khiến ngôn ngữ có phần giống tiếng Anh trong tất cả các đặc điểm tinh tế của nó truyền cảm hứng cho nhiều cấp độ phê bình khác nhau . các ngôn ngữ script sau này như Ruby và Python, được phát triển bởi các nhà khoa học máy tính, có sự thống nhất hơn nhiều trong cú pháp của chúng. vấn đề chính là ngôn ngữ tự nhiên có lượng lớn sự mơ hồ (điều này được nghiên cứu trong lĩnh vực ngôn ngữ học.) vì vậy ngôn ngữ tự nhiên sẽ có một vị trí quan trọng trên các giao diện máy tính của con người trong tương lai như Siri nhưng các giao diện đó vốn dĩ sẽ gặp phải vấn đề mơ hồ.

vì vậy, đây là một trường hợp mà sự phát triển của ngôn ngữ máy tính đã đi xa khỏi một ý tưởng ngôn ngữ tự nhiên. hơn nữa, lịch sử chung của các ngôn ngữ lập trình máy tính là chúng đã được phát triển và thay đổi để loại bỏ sự mơ hồ (vốn rất cao với ngôn ngữ tự nhiên). điều này không được hiểu sớm trong lịch sử các trình biên dịch (có thể là vào những năm 1970) và ví dụ các phiên bản đầu của ngôn ngữ Fortran có các câu với ý nghĩa mơ hồ phụ thuộc vào việc thực hiện trình biên dịch. một số lý thuyết ngôn ngữ CS liên quan đến phân tích cú pháp đã được phát triển một phần để đáp ứng với việc phát hiện ra sự mơ hồ trong phân tích ngôn ngữ.


Bạn có ngày sai: Perl được phát hành vào năm 1987, Bash năm 1989. Việc đọc bài đăng của bạn cũng gặp rắc rối vì lỗi viết hoa của nó.
tchrist

1

Ngôn ngữ máy rất chính xác, trong khi một văn bản do con người viết thường có thể được diễn giải theo nhiều cách khác nhau (ví dụ như một số văn bản thơ).

Những gì ngày càng phát triển là các mẫu phù hợp, ví dụ khi bạn viết một số mã xấu, trình biên dịch có thể giúp bạn đề xuất một số giải pháp có thể và sau đó đưa ra một số cảnh báo hoặc lỗi có thể giúp bạn thể hiện chính mình. (dựa trên các mẫu mã phổ biến chẳng hạn)

Có nghiên cứu cụ thể về các mẫu tương tác / thiết kế, thậm chí T9 và SWYPE là các công cụ nhận dạng mẫu giúp bạn rất nhiều (các chương trình ghi lại giọng nói của bạn và chuyển đổi nó thành văn bản cũng là các nhận dạng mẫu).

Tất nhiên một chương trình là một cái gì đó dựa trên các cơ chế chính xác để bạn cần ngôn ngữ chính xác (không phải tự nhiên), trong khi một tìm kiếm web đơn giản trên google là rất tự nhiên, bạn chỉ cần gõ vài từ và bạn có được những gì bạn muốn.

Mỗi nhiệm vụ và mục tiêu khác nhau đều có ngôn ngữ riêng, đó không phải là một "sự tiến hóa ngôn ngữ đơn giản" có nhiều ngôn ngữ hơn. Nhiệm vụ chính xác cần ngôn ngữ chính xác và nhiệm vụ thoải mái đòi hỏi ngôn ngữ thoải mái

Bạn có thể viết cùng một đoạn mã C và sau đó biên dịch nó với một số trình biên dịch khác nhau và (trừ khi một số trình biên dịch bị lỗi), kết quả của mã sẽ giống nhau ngay cả khi tạo ra một cách lắp ráp khác nhau, trong khi đối với một tìm kiếm trên web thì giống nhau từ khóa cho các công cụ tìm kiếm khác nhau cho kết quả khác nhau.


1

Vài năm trước, con trai lớn của tôi và tôi đã phát triển một hệ thống lập trình và phát triển tiếng Anh đơn giản nhằm trả lời các câu hỏi sau:

  1. Các chương trình cấp thấp (như trình biên dịch) có thể được viết một cách thuận tiện và hiệu quả bằng các ngôn ngữ cấp cao (như tiếng Anh) không?

  2. Các ngôn ngữ tự nhiên có thể được phân tích cú pháp theo cách tương đối "cẩu thả" và vẫn cung cấp một môi trường đủ ổn định để lập trình sản xuất không?

  3. Có dễ lập trình hơn khi bạn không phải dịch những suy nghĩ ngôn ngữ tự nhiên của mình sang một cú pháp thay thế?

Bây giờ chúng ta có thể trả lời từng câu hỏi trong số ba câu hỏi này, từ kinh nghiệm trực tiếp, với câu "Có" vang dội.

Trình phân tích cú pháp của chúng tôi hoạt động, chúng tôi nghĩ, một cái gì đó giống như bộ não của con người. Xem xét. Một người cha nói với con trai bé bỏng của mình:

"Muốn mút cái chai này không, chàng trai?"

Và đứa trẻ nghe thấy,

"blah, blah, Sucks, blah, blah, BOTTLE, blah, blah."

Nhưng anh ta trả lời đúng bởi vì anh ta có một "hình ảnh" của một cái chai ở phía bên phải đầu của anh ta được kết nối với từ "chai" ở bên trái, và một "kỹ năng" có sẵn gần sau gáy của anh ta được kết nối với hạn "hút". Nói cách khác, đứa trẻ phù hợp với những gì anh ta có thể với hình ảnh (loại) và kỹ năng (thói quen) mà anh ta tích lũy được, và đơn giản là coi thường phần còn lại. Trình biên dịch của chúng tôi thực hiện rất nhiều điều tương tự, với hình ảnh mới (loại) và kỹ năng (thói quen) được xác định - không phải bởi chúng tôi, mà - bởi lập trình viên, khi anh ấy viết mã ứng dụng mới.

Một định nghĩa loại điển hình trông như thế này:

Một đa giác là một điều với một số đỉnh.

Trong nội bộ, tên "đa giác" hiện được liên kết với một loại cấu trúc được phân bổ động có chứa danh sách các đỉnh được liên kết đôi. "Vertex" được định nghĩa ở nơi khác (trước hoặc sau định nghĩa này) theo cách tương tự; số nhiều được tự động hiểu.

Một thói quen điển hình trông như thế này:

Để nối tọa độ x và ay tọa độ vào đa giác: Tạo một đỉnh cho x và y. Nối các đỉnh với các đỉnh của đa giác.

Lưu ý rằng tên chính thức (danh từ riêng) không cần thiết cho các tham số và biến. Điều này, chúng tôi tin rằng, là một cái nhìn sâu sắc lớn. Ghế và bàn trong thế giới thực của tôi không bao giờ (trong cuộc trò chuyện bình thường) được gọi là "c" hoặc "myTable" - Tôi gọi chúng đơn giản là "cái ghế" và "cái bàn". Tương tự như vậy ở đây: "đỉnh" và "đa giác" là tên tự nhiên cho những thứ đó.

Cũng lưu ý rằng các khoảng trắng được cho phép trong các "tên" thường quy và biến (như "x tọa độ"). Đây là thế kỷ 21, phải không? Và "biệt danh" đó cũng được cho phép (chẳng hạn như "x" cho "x tọa độ"). Và các sở hữu đó ("đỉnh của đa giác") được sử dụng theo cách rất tự nhiên để tham chiếu "các trường" trong "bản ghi".

Cũng lưu ý rằng từ "được cho" có thể đã được "sử dụng" hoặc "với" hoặc bất kỳ từ tương đương nào khác vì phân tích cú pháp cẩu thả của chúng tôi tập trung vào các hình ảnh (loại) và kỹ năng (thói quen) cần thiết để hiểu và bỏ qua, càng tốt, phần còn lại

Ở cấp độ thấp nhất, mọi thứ trông như thế này:

Để thêm một số vào một số khác: Intel $ 8B85080000008B008B9D0C0000000103.

Lưu ý rằng trong trường hợp này, chúng tôi có cả ngôn ngữ cao nhất và thấp nhất - tiếng Anh và mã máy (mặc dù là thập lục phân) - trong một thói quen duy nhất. Cái nhìn sâu sắc ở đây là (giống như một cuốn sách toán học thông thường), một chương trình nên được viết chủ yếu bằng ngôn ngữ tự nhiên, với các đoạn thích hợp theo các cú pháp thuận tiện hơn theo yêu cầu (và chỉ khi).

Bạn có thể nhận hệ thống phát triển của chúng tôi tại đây: www.osmosian.com/cal-3040.zip. Đây là một chương trình Windows nhỏ, có kích thước nhỏ hơn một megabyte. Nếu bạn bắt đầu với PDF trong thư mục "tài liệu", trước khi bạn đi mười trang, bạn sẽ tự biên dịch lại toàn bộ shebang (trong chưa đầy ba giây trên máy dưới cùng của Walmart).

Câu hỏi và ý kiến ​​nên được gửi đến gerry.rzeppa@pobox.com


Bạn có biết tiếng Anh có kiểm soát.to.ifi.uzh.ch / site / descrip không? bạn dường như đang ngồi giữa đó và Inform7 vi.wikipedia.org/wiki/Inform#Example_game_2
Pete Kirkham

Tôi thích ý tưởng này, nhưng có vẻ như vẫn còn một số cú pháp để nhảy qua. Ví dụ, tôi không nghĩ rằng tôi hoặc bất kỳ ai mô hình hóa các công cụ hình học sẽ coi các tọa độ X và Y được thêm vào một cách riêng biệt, vì vậy "Để nối thêm tọa độ x và tọa độ ay ..." nghe có vẻ rất kỳ lạ đối với tôi. Cũng như "Tạo một đỉnh cho x và y". Gần tha thứ vì nó thực sự đọc chủ yếu như tiếng Anh, nhưng dường như vẫn còn quá khắt khe. Có lẽ tôi đã quá quen với việc không suy nghĩ như một con người hay một cái gì đó, tôi không biết.
cHao

1

Sự tách biệt ngôn ngữ của con người đến từ sự tiến hóa (darwinian?) Trong các cộng đồng bị cô lập. Sự tách biệt các ngôn ngữ lập trình xuất phát từ các biến thể về nhu cầu kỹ thuật, hệ tư tưởng kỹ thuật, từ những thay đổi về hiểu biết kỹ thuật và lý thuyết, từ những thay đổi trong khả năng kỹ thuật của chúng tôi để thực hiện. Đó là một quá trình có ý thức hơn, tôi nghĩ.

Ngôn ngữ máy tính có thể giống ngôn ngữ tự nhiên hơn không? Có lẽ là phần nào, lên đến một điểm. Tôi đoán rằng một phần lớn sự phức tạp của ngôn ngữ tự nhiên là kết quả của một loạt các hiện tượng tiến hóa đồng thời không có lý do để tạo ra một kết quả nhất quán tại bất kỳ thời điểm nào, mặc dù có khả năng những mâu thuẫn cũ có thể được loại bỏ dần dần trong khi hiện tượng mới xuất hiện . Tôi không phải là chuyên gia về ngôn ngữ học. Nhưng chúng ta có muốn sự phức tạp đó trong các ngôn ngữ lập trình.

Vấn đề mơ hồ là một vấn đề quan trọng, nhưng không được nêu ra bởi hầu hết mọi người. Ngôn ngữ là một phương tiện giao tiếp, và nó phải được phân tích trong ngữ cảnh của giao tiếp đó (người-người, người-máy, cả hai, giữa các địa điểm hoặc giữa các thời điểm, ... để nói một cách đơn giản). Vấn đề không phải là liệu bạn có thể đưa ra những tuyên bố rõ ràng bằng ngôn ngữ hay không, mà là bạn có thể luôn đảm bảo rằng giao tiếp sẽ không rõ ràng trong ngữ cảnh dự định của nó hay không. Có một ngôn ngữ lập trình nổi tiếng và được sử dụng rộng rãi, cho phép viết các chương trình mơ hồ (tốt, nó đã làm, nhưng tôi đã không xem xét các phiên bản mới nhất trong một thời gian). Trong trường hợp này, trình biên dịch đủ thông minh để phát hiện sự mơ hồ và yêu cầu làm rõ, có thể được kết hợp trong chương trình loại bỏ sự mơ hồ. Lưu ý rằng phát hiện sự mơ hồ không có nghĩa là chỉ một trong những lựa chọn có thể có ý nghĩa, tất cả đều có ý nghĩa. Vấn đề là liệu một trong những thực thể giao tiếp có thể phát hiện sự mơ hồ để người gửi có thể làm rõ nó hay không. Con người rất tệ trong việc này, nhưng máy tính có thể khá tốt.

Các hình thức và ngôn ngữ lập trình có thể có cú pháp phong phú và linh hoạt hơn. Tôi tin rằng lý do chính họ không phải là chủ nghĩa bảo thủ đơn giản. Các công cụ cú pháp được sử dụng vẫn rất thường là các công cụ được thiết kế từ ba mươi năm trước trở lên, để đáp ứng các hạn chế của máy tính thời đó. Hiệu quả phân tích cú pháp không còn là vấn đề quan trọng trong việc biên dịch và các kỹ thuật mạnh hơn tồn tại một cách dễ dàng.

Thật thú vị, cơ sở được sử dụng rộng rãi nhất cho cú pháp ngôn ngữ lập trình đến từ nghiên cứu ngôn ngữ tự nhiên: ngữ pháp không ngữ cảnh. Phần lớn các nghiên cứu kỹ thuật đã chuyển sang khoa học máy tính lý thuyết / kỹ thuật vào những năm sáu mươi, để phần nào được khám phá lại vào đầu những năm tám mươi bởi những người có ngôn ngữ tự nhiên (tôi đang đơn giản hóa). Kể từ đó, nhiều tiến bộ đã được thực hiện cho cú pháp trong các ngôn ngữ tự nhiên, trong khi khoa học máy tính dường như chủ yếu bị mắc kẹt với các công cụ cú pháp cũ. Con lắc ngôn ngữ tự nhiên hiện đang quay trở lại với các kỹ thuật thống kê, nhưng các phương pháp đại số cho cú pháp không bị lãng quên. Nhiều khả năng, các phương pháp tốt sẽ đến từ sự kết hợp của các kỹ thuật đại số và thống kê.

Cảm giác của tôi là khu vực quan trọng là ngữ nghĩa và sự chuyển đổi giữa cú pháp và ngữ nghĩa. Điều này vẫn rất khó để chính thức hóa ngôn ngữ tự nhiên, trong khi chúng ta có nhiều kỹ thuật chính xác trong trường hợp ngôn ngữ lập trình và hệ thống chính thức. Vì trò chơi không được chơi cho các ngôn ngữ tự nhiên, thật khó để nói tác động của nó đến các ngôn ngữ lập trình trong tương lai.

Một điểm khác là nhiều nhà thiết kế ngôn ngữ lập trình đang cố gắng chứng minh một cái gì đó hoặc thực thi một ý thức hệ kỹ thuật. Do đó, họ nhận được rất nhiều quy định trong thiết kế của họ để ngăn người dùng rời khỏi mô hình dự định của họ. Thật không may, điều này cực kỳ phản tác dụng cho sự sáng tạo. Ngôn ngữ sáng tạo nhất từng được thiết kế là một trong những ngôn ngữ đầu tiên: Lisp (1958). Sự tự do và linh hoạt mà nó cho phép là nguồn sáng tạo đáng kể. Giá là nó đòi hỏi kỷ luật tự giác và hiểu biết. Nhưng Lisp thực sự là một ngôn ngữ kim loại, một ngôn ngữ để tạo ra các ngôn ngữ.

Bây giờ, để có một góc nhìn khác, các chương trình thực sự là bằng chứng về đặc điểm kỹ thuật của chúng được xem như một tuyên bố toán học (tốt, tôi đang đơn giản hóa một lần nữa). Một số người (tôi không nhớ các tài liệu tham khảo, xin lỗi) đã chơi với các nhà tiên tri định lý để đưa ra các bằng chứng trông giống như chúng được viết bởi một nhà toán học bằng ngôn ngữ tự nhiên. Vì vậy, tôi đoán ý tưởng có các chương trình trông giống như chúng được viết bằng ngôn ngữ tự nhiên có thể không hoàn toàn vô lý.

Tuy nhiên, bạn có thể nhận thấy rằng, ngay cả khi được viết một cách không chính thức bởi một nhà toán học, diễn ngôn toán học trông khá khác so với nói chuyện thông thường hoặc từ một cuốn sách lịch sử. Điều này là do một sự khác biệt đáng kể trong vũ trụ diễn ngôn có liên quan, các lĩnh vực ngữ nghĩa đang được nói đến. Do đó, trong khi bạn có thể hình dung các ngôn ngữ lập trình trông giống ngôn ngữ tự nhiên hơn, có một giới hạn tự nhiên là lĩnh vực diễn ngôn và các thuộc tính mong muốn của riêng nó. Nhiều khả năng nó sẽ vẫn cơ bản là hời hợt, nghĩa là, chủ yếu là cú pháp. Nhà toán học có thể nói về các hệ thống chính thức và về chính trị. Hy vọng rằng hai bài diễn thuyết sẽ không giống nhau. Máy tính không thể (chưa?) Nói về chính trị, hoặc hiểu nó. Ngày họ làm điều đó sẽ không còn là lập trình.

Nhìn lại lịch sử, các ngôn ngữ cấp cao, ngay từ lần đầu tiên (FORTRAN) cố gắng tiến gần hơn đến một hình thức tự nhiên hơn để diễn đạt các nhiệm vụ tính toán, nhưng các nhiệm vụ này được hiểu là toán học hoặc logic (Fortran 1957, Algol 1958, Lisp 1958 ), hoặc định hướng kinh doanh nhiều hơn (Cobol 1959). Trong vòng 10 năm, mọi người đã lo lắng về các ngôn ngữ sẽ gần gũi hơn, thích nghi tốt hơn với vấn đề hiện tại và đã có nghiên cứu quan trọng về cái gọi là extensible languages, bao gồm cả cú pháp và ngữ nghĩa. Một con đường chính để thể hiện vấn đề một cách tự nhiên hơn là sự xuất hiện của object orientation(đôi khi dưới những tên khác). Mặc dù việc phân công làm cha mẹ luôn khó khăn, nhưng có lẽ nó xuất hiện từ công việc về trí tuệ nhân tạo, chủ yếu là ở Lisp và từ ngôn ngữSimula 67(Gia đình Algol) vốn được dự định thể hiện các vấn đề trong thế giới thực tự nhiên hơn sẽ được mô phỏng trên máy tính. Tất cả dường như lịch sử nhất quán.


0

Mặc dù chúng giống nhau ở chỗ các câu hỏi được hỏi tương tự nhau, nhưng chúng khá khác biệt về độ phức tạp. Sự khác biệt chính là ngôn ngữ tự nhiên vốn đã mơ hồ (thậm chí ở cấp độ từ). Nó thậm chí không rõ nghĩa của một từ là gì? Tuy nhiên, trong thế giới của các ngôn ngữ lập trình, một loạt các thiết bị xác định đang được sử dụng. Nhìn vào ngữ pháp để phân tích ngôn ngữ tự nhiên và những ngôn ngữ để phân tích ngôn ngữ lập trình, sự khác biệt về kích thước là tuyệt đẹp. Vấn đề là ngữ pháp cho các ngôn ngữ lập trình là các hệ thống chính thức; vì vậy họ có thể tuân theo phân tích toán học. Đối phó với sự mơ hồ xuất hiện nhiều vấn đề mà một giải pháp trong đối tác ngôn ngữ lập trình sẽ là tầm thường hoặc đơn giản.

Có thể khoảng cách giữa ngôn ngữ tự nhiên và ngôn ngữ lập trình sẽ thu hẹp lại nếu khoảng cách giữa các nhà khoa học máy tính và người "tự nhiên" thu hẹp lại.


0

Trong những năm qua, sự quan tâm đến (E) DSL và các giao diện lưu loát đã tăng lên đều đặn, trong rất nhiều ngôn ngữ: Haskell, các ngôn ngữ kịch bản khác nhau, C #, Java và thậm chí C ++ (nghĩ về sự quá tải của operator<<để làm đầu ra).

Ở một mức độ nào đó, những điều này cho phép mã để đọc tự nhiên hơn. Tôi sẽ minh họa bằng một ví dụ EDSL trong Groovy. Các groovy.time gói cho phép bạn ghi

use ( TimeCategory ) {
    // application on numbers:
    println 1.minute.from.now
    println 10.days.ago

    // application on dates
    def someDate = new Date()
    println someDate - 3.months 
}

Nếu bạn đã làm điều này thông qua lớp java.util.CalWiki, bạn sẽ phải viết một cái gì đó như thế này cho ví dụ đầu tiên:

void demo() {
    Calendar date = new GregorianCalendar();
    date.add(Calendar.MINUTE, 1);
    System.out.println(date);
}

0

Ngôn ngữ máy tính (thậm chí là ngôn ngữ máy thô sơ của những ngày đã qua) ngôn ngữ của con người, vì chúng chủ yếu để giao tiếp với đồng loại, được xác định bởi con người và chỉ được sử dụng tạm thời để truyền đạt hướng dẫn đến máy. Vì vậy, chúng phát triển theo cách tương tự như các ngôn ngữ "tự nhiên" phát triển (chỉ cần tìm "thành ngữ" cho ngôn ngữ yêu thích của bạn, kiểm tra xem C đã phát triển từ K & R C sang ISO-C hiện tại năm 2011. Nhưng chúng tồn tại trong một môi trường khác phải truyền đạt ý nghĩa chính xác (máy tính vẫn quá ngu ngốc để hiểu và sửa những gì được yêu cầu) và có một sự bảo đảm dễ xử lý (do đó ngữ pháp và từ vựng của C ++, PL / 1 hoặc APL đơn giản hơn nhiều hơn là tiếng Anh, ngôn ngữ tự nhiên khá đơn giản).

Nhiều điều tương tự có thể được nói về tính hình thức của toán học hoặc khoa học nói chung, hoặc thậm chí là bản thiết kế (vốn dĩ là 2D, không phải 1D như những thứ khác).

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.