Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Xin chào, Habr! Tôi xin giới thiệu với các bạn bản dịch bài viết của Stephen Wolfram "Kho lưu trữ chức năng Wolfram: Ra mắt nền tảng mở để mở rộng ngôn ngữ Wolfram".

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Điều kiện tiên quyết cho tính nhất quán của ngôn ngữ Wolfram

Ngày nay chúng ta đang đứng trước ngưỡng cửa của những thành tựu to lớn cùng với ngôn ngữ lập trình Ngôn ngữ Wolfram. Chỉ ba tuần trước chúng tôi đã ra mắt Công cụ Wolfram miễn phí dành cho nhà phát triểnđể giúp người dùng của chúng tôi tích hợp Ngôn ngữ Wolfram vào các dự án phần mềm quy mô lớn của họ. Hôm nay chúng tôi khai trương Kho lưu trữ chức năng Wolfram, để cung cấp nền tảng phối hợp cho các chức năng được tạo để mở rộng ngôn ngữ Wolfram và chúng tôi cũng mở một kho chức năng cho bất kỳ ai có thể đóng góp vào việc phát triển sản phẩm phần mềm của chúng tôi.

Kho lưu trữ hàm Wolfram là thứ được tạo ra nhờ tính chất độc đáo của Ngôn ngữ Wolfram không chỉ với tư cách là ngôn ngữ lập trình mà còn là một ngôn ngữ điện toán quy mô đầy đủ. Trong các ngôn ngữ lập trình truyền thống, việc thêm chức năng mới quan trọng thường liên quan đến việc tạo toàn bộ thư viện bổ sung có thể hoạt động hoặc không hoạt động khi sử dụng cùng nhau. Tuy nhiên, trong ngôn ngữ Wolfram rất nhiều thứ đã được tích hợp vào ngôn ngữ, có thể mở rộng đáng kể chức năng của nó bằng cách thêm các chức năng mới được tích hợp ngay vào cấu trúc tổng thể của toàn bộ ngôn ngữ.

Ví dụ: kho lưu trữ hàm Wolfram đã chứa 532 tính năng mới được cấu trúc thành 26 loại chủ đề:

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Tương tự như vậy hơn 6000 chức năng tiêu chuẩn, được tích hợp bằng ngôn ngữ Wolfram, mỗi chức năng từ kho lưu trữ đều có một trang tài liệu với mô tả chi tiết về chúng và các ví dụ về công việc:

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Để truy cập trang, hãy sao chép đối tượng trên (hàm BLOB), dán nó vào dòng đầu vào rồi chạy hàm - nó đã được tích hợp sẵn trong ngôn ngữ Wolfram và được hỗ trợ theo mặc định bắt đầu bằng phiên bản 12.0:

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Điều cần lưu ý ở đây là khi xử lý LogoQRCode Ví dụ: bạn không cần thiết lập “thư viện xử lý hình ảnh” - vì chúng tôi đã triển khai một cách thuật toán nhất quán và cẩn thận trong Ngôn ngữ Wolfram đang xử lý hình ảnh, có thể được xử lý ngay lập tức bằng các chức năng ngôn ngữ đồ họa khác nhau:

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Tôi mong rằng với sự hỗ trợ cộng đồng tuyệt vời và tài năng, đã phát triển và mở rộng (dựa trên Ngôn ngữ Wolfram) trong nhiều thập kỷ qua. Kho lưu trữ hàm Wolfram sẽ cho phép trong tương lai gần mở rộng đáng kể phạm vi các hàm (có thể có tiềm năng quan trọng, chuyên biệt trong các lĩnh vực khoa học và công nghệ khác nhau) có sẵn trong ngôn ngữ. Do đó, có thể sử dụng cả nội dung của ngôn ngữ (các chức năng tích hợp của nó) và nguyên tắc phát triển, được thực hiện dựa trên ngôn ngữ. (Cần lưu ý ở đây rằng Ngôn ngữ Wolfram đã có hơn Lịch sử 30 năm phát triển và tăng trưởng ổn định).
Các hàm từ kho lưu trữ có thể chứa các đoạn mã nhỏ hoặc lớn được viết bằng Ngôn ngữ Wolfram. Ví dụ: đây có thể là các cuộc gọi API và dịch vụ bên ngoài hoặc thư viện bên ngoài bằng các ngôn ngữ khác. Tính năng độc đáo của phương pháp này là khi bạn đi sâu vào chức năng ở cấp độ người dùng, sẽ không có sự mâu thuẫn tiềm ẩn nào vì phương pháp này được xây dựng dựa trên cấu trúc nhất quán của Ngôn ngữ Wolfram - và mọi chức năng sẽ tự động hoạt động chính xác - chính xác như dự định Cô ấy nên.
Cấu trúc vỏ và lập trình của Kho lưu trữ tính năng Wolfram được thiết kế để mọi người có thể đóng góp cho sự nghiệp chung một cách đơn giản và thuận tiện nhất cho họ - trên thực tế, chỉ cần bằng cách điền vào tệp văn bản notepad (có phần mở rộng nb) WL. Các chức năng tự động tích hợp cho phép bạn kiểm tra các chức năng mới được thêm vào kho lưu trữ để đảm bảo chúng tích hợp vào ngôn ngữ. Công ty chúng tôi đang đặt cược vào nhiều người dùng có thể tích hợp các chức năng của họ vào ngôn ngữ, thay vì vào sự phức tạp lớn của các chức năng mới - và mặc dù có quy trình xem xét nhưng chúng tôi không nhấn mạnh vào bất cứ điều gì như phân tích thiết kế tỉ mỉ hoặc các tiêu chuẩn nghiêm ngặt về tính đầy đủ và độ tin cậy của các tính năng mới dành cho người dùng, trái ngược với việc kiểm tra nghiêm ngặt hơn các tính năng được tích hợp trong ngôn ngữ cốt lõi mà chúng tôi sử dụng.

Có nhiều sự đánh đổi và chi tiết trong cách tiếp cận này, nhưng mục tiêu của chúng tôi là tối ưu hóa kho tính năng Wolfram cho cả trải nghiệm người dùng và đảm bảo rằng các tính năng mới của người dùng đóng góp có ý nghĩa cho sự phát triển của ngôn ngữ. Khi chúng tôi phát triển, tôi tin chắc rằng chúng tôi sẽ phải phát minh ra các phương pháp mới để xử lý và xác thực các hàm được tích hợp trong kho lưu trữ, đặc biệt là để tổ chức số lượng lớn các hàm và tìm những hàm mà người dùng cần. Tuy nhiên, điều đáng khích lệ là con đường chúng ta đã chọn là một khởi đầu tốt đẹp. Cá nhân tôi đã thêm một số tính năng vào cơ sở dữ liệu gốc. Nhiều trong số chúng dựa trên mã mà cá nhân tôi đã phát triển khá lâu. Và tôi chỉ mất vài phút để đẩy chúng vào kho lưu trữ. Bây giờ chúng đã có trong kho lưu trữ, cuối cùng tôi có thể - ngay lập tức và bất cứ lúc nào - sử dụng các chức năng này khi cần mà không phải lo lắng về việc tìm kiếm tệp, tải xuống gói, v.v.

Tăng hiệu quả đồng thời giảm chi phí

Ngay cả trước khi có Internet, đã có nhiều cách để chia sẻ mã Ngôn ngữ Wolfram (dự án tập trung lớn đầu tiên của chúng tôi là Nguồn toán học, được tạo cho Mathematica vào năm 1991 dựa trên CD-ROM, v.v.). Tất nhiên, cách tiếp cận được đề xuất triển khai dựa trên kho lưu trữ hàm Wolfram là một công cụ mạnh mẽ và đáng tin cậy hơn để thực hiện các nhiệm vụ trên.

Trong hơn 30 năm, công ty chúng tôi đã làm việc chăm chỉ để duy trì tính toàn vẹn của cấu trúc ngôn ngữ Wolfram và điều này rất quan trọng để đảm bảo rằng ngôn ngữ Wolfram không chỉ trở thành ngôn ngữ lập trình mà còn là một ngôn ngữ lập trình. ngôn ngữ tính toán chính thức. Và do đó, bản chất của cách tiếp cận triển khai kho lưu trữ hàm Wolfram là sử dụng cách tiếp cận thống nhất để lập trình và phát triển các hàm mới được bổ sung tuần tự và phù hợp với khuôn khổ của ngôn ngữ để nó có thể phát triển và cùng phát triển.

Các quá trình tính toán khác nhau xảy ra trong cấu trúc thực hiện của từng chức năng. Cần lưu ý ở đây rằng chức năng này cần có hình thức rõ ràng, thống nhất và khả năng đọc trực quan cho người dùng. Trong bối cảnh này, các hàm tích hợp của Ngôn ngữ Wolfram được trình bày với hơn 6000 ví dụ tuần tự về cách lập trình các hàm đúng cách (đây là những ví dụ của chúng tôi video lập trình trực tiếpbao gôm hàng trăm giờ tạo ra các chương trình tiêu chuẩn). Điều mà cách tiếp cận này cuối cùng làm cho kho lưu trữ tính năng Wolfram có khả năng hoạt động tốt là bản chất cấu trúc của Ngôn ngữ Wolfram, với số lượng lớn các thư viện bổ sung và đa dạng đã được tích hợp vào ngôn ngữ. Ví dụ: nếu bạn có chức năng xử lý hình ảnh hoặc mảng thưa thớtHoặc cấu trúc phân tửdữ liệu địa lý hoặc một số biểu tượng khác - cách biểu diễn ký hiệu nhất quán của chúng đã tồn tại trong ngôn ngữ và nhờ đó, hàm của bạn ngay lập tức trở nên tương thích với các hàm khác trong ngôn ngữ.

Tạo một kho lưu trữ thực sự hoạt động tốt là một nhiệm vụ lập trình meta thú vị. Ví dụ, việc vượt quá các hạn chế trong chương trình sẽ không cho phép đạt được sự thống nhất và tính phổ quát cần thiết của thuật toán. Cũng giống như khi không có đủ số lượng hạn chế chức năng, bạn sẽ không thể thực hiện một trình tự thực thi thuật toán đủ chính xác. Một số ví dụ trước đây về việc thực hiện thỏa hiệp các phương pháp tiếp cận này do công ty chúng tôi thực hiện đã hoạt động khá ổn định - đó là: Trình diễn dự án vonfram, ra mắt năm 2007 và hiện chạy trực tuyến với hơn 12000 bản demo tương tác với người dùng. TRONG Cơ sở dữ liệu Wolfram có hơn 600 cơ sở dữ liệu được tạo sẵn có thể được sử dụng bằng Ngôn ngữ Wolfram và Lưu trữ mạng thần kinh Wolfram được bổ sung các mạng lưới thần kinh mới hầu như mỗi tuần (hiện đã có 118 mạng) và chúng được kết nối ngay lập tức thông qua chức năng NetModel bằng ngôn ngữ Wolfram.

Tất cả các ví dụ trên đều có một đặc điểm cơ bản - các đối tượng và chức năng được thu thập trong dự án có mức độ cấu trúc và phân bổ quy trình rất cao. Tất nhiên, chi tiết về cấu trúc của bản demo hoặc mạng lưới thần kinh hay thứ gì khác có thể khác nhau rất nhiều, nhưng cấu trúc cơ bản cho bất kỳ kho lưu trữ hiện tại nào luôn giữ nguyên. Vậy ý kiến ​​của bạn là gì, người dùng thân mến, về việc tạo một kho lưu trữ bổ sung các phần mở rộng cho ngôn ngữ Wolfram? Ngôn ngữ Wolfram được thiết kế cực kỳ linh hoạt, vì vậy nó có thể được mở rộng và sửa đổi theo bất kỳ cách nào. Tình huống này cực kỳ quan trọng đối với khả năng nhanh chóng tạo ra nhiều dự án phần mềm quy mô lớn khác nhau bằng Ngôn ngữ Wolfram. Cần lưu ý ở đây rằng khi tính linh hoạt của ngôn ngữ tăng lên, chi phí của các dự án được thực hiện bằng ngôn ngữ đó chắc chắn sẽ tăng lên. Điều này là do người dùng càng sử dụng ngôn ngữ như vậy thì càng nhận được nhiều chức năng chuyên dụng hơn, nhưng chúng ta không nên quên rằng cách tiếp cận này cũng có thể có những mặt tiêu cực về việc không thể đảm bảo tính nhất quán nhất quán của các mô-đun chương trình.

Có một vấn đề phổ biến với các thư viện trong các ngôn ngữ lập trình truyền thống - ví dụ: nếu bạn sử dụng một thư viện, mã sẽ hoạt động chính xác, nhưng nếu bạn cố gắng sử dụng nhiều thư viện, không có gì đảm bảo rằng chúng sẽ tương tác chính xác với nhau . Ngoài ra, trong các ngôn ngữ lập trình truyền thống - không giống như ngôn ngữ điện toán chính thức - không có cách nào đảm bảo sự hiện diện của các biểu diễn tích hợp nhất quán cho bất kỳ hàm hoặc loại dữ liệu nào ngoài cấu trúc cơ bản của chúng. Tuy nhiên, trên thực tế, vấn đề thậm chí còn lớn hơn so với cái nhìn thoáng qua: nếu một người đang xây dựng một chức năng theo chiều dọc quy mô lớn, thì nếu không có chi phí khổng lồ cho việc lập trình dự án tập trung mà chúng tôi đưa vào ngôn ngữ Wolfram, thì không thể đạt được sự nhất quán. Do đó, điều quan trọng là tất cả các mô-đun phần mềm luôn hoạt động chính xác cùng nhau.

Vì vậy, ý tưởng đằng sau kho lưu trữ tính năng Wolfram là tránh vấn đề được nêu ở trên bằng cách chỉ cần thêm các phần mở rộng vào ngôn ngữ trong các đoạn mã tương đối nhỏ thông qua các tính năng riêng lẻ dễ phát triển hơn dưới dạng mô-đun mạch lạc. Tuy nhiên, có những tính năng lập trình không thể trở nên thuận tiện khi sử dụng các chức năng riêng lẻ (và công ty chúng tôi đang có kế hoạch phát hành thuật toán lập trình được tối ưu hóa trong tương lai gần để giúp triển khai các gói phần mềm quy mô lớn). Tuy nhiên, dựa trên các chức năng đã được tích hợp trong Ngôn ngữ Wolfram, có nhiều khả năng lập trình được triển khai dựa trên các chức năng riêng lẻ. Ý tưởng ở đây là với nỗ lực lập trình tương đối ít, có thể tạo ra một số chức năng mới và rất hữu ích nhằm cung cấp đủ sự gắn kết cho thiết kế, chúng sẽ phối hợp tốt với nhau và ngoài ra, chúng còn sẽ có thể được sử dụng dễ dàng và rộng rãi trong ngôn ngữ này trong tương lai.

Tất nhiên, cách tiếp cận này là một sự thỏa hiệp. Nếu một gói lớn hơn được triển khai, người ta có thể tưởng tượng rằng một thế giới chức năng hoàn toàn mới sẽ cực kỳ mạnh mẽ và hữu ích. Nếu cần có chức năng mới phù hợp với mọi thứ khác, nhưng bạn không sẵn sàng dành nhiều công sức để phát triển dự án, thì thật không may, điều này có thể dẫn đến việc giảm phạm vi dự án của bạn. Ý tưởng đằng sau kho lưu trữ tính năng Wolfram là cung cấp chức năng cho một phần xác định của dự án; cách tiếp cận này sẽ bổ sung chức năng mạnh mẽ đồng thời giúp duy trì tính nhất quán tốt trong dự án lập trình dễ dàng hơn.

Giúp thêm các chức năng tùy chỉnh vào kho chức năng

Nhóm của chúng tôi đã làm việc chăm chỉ để giúp người dùng dễ dàng đóng góp vào các tính năng của kho lưu trữ Wolfram. Trên máy tính để bàn (đã có trong phiên bản 12.0), Bạn có thể chỉ cần duyệt tuần tự các tab menu chính: Tệp > Mới > RepositoryItem > Mục kho lưu trữ chức năng và bạn sẽ nhận được "Sổ tay định nghĩa" (được lập trình bên trong bàn làm việc. Bạn cũng có thể sử dụng chức năng tương tự - Tạo Notebook["Tài nguyên chức năng"]):

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Có hai bước chính bạn cần thực hiện: thứ nhất, viết mã cho hàm của bạn và thứ hai, viết ra tài liệu minh họa cách hàm của bạn sẽ hoạt động.
Nhấp vào nút "Mở mẫu" ở trên cùng để xem ví dụ về những gì bạn cần làm:

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Về cơ bản, bạn đang cố gắng tạo ra thứ gì đó tương tự như chức năng tích hợp sẵn trong Ngôn ngữ Wolfram. Ngoại trừ việc nó có thể làm điều gì đó cụ thể hơn nhiều so với chức năng tích hợp sẵn. Đồng thời, những kỳ vọng về tính đầy đủ và độ tin cậy của nó sẽ thấp hơn nhiều.
Bạn cần đặt tên cho hàm của mình tuân theo nguyên tắc đặt tên hàm của Ngôn ngữ Wolfram. Ngoài ra, bạn sẽ cần phát triển tài liệu cho chức năng của mình, tương tự như các chức năng tích hợp sẵn của ngôn ngữ. Tôi sẽ nói về điều này chi tiết hơn sau. Bây giờ, chỉ cần lưu ý rằng trong hàng nút ở đầu tệp sổ ghi chép định nghĩa có một nút "Nguyên tắc phong cách", giải thích những việc cần làm và nút Công cụ, cung cấp các công cụ để định dạng tài liệu về chức năng của bạn.
Khi bạn chắc chắn mọi thứ đã được điền đúng và bạn đã sẵn sàng, hãy nhấp vào nút “Kiểm tra”. Việc bạn chưa tìm hiểu hết các chi tiết là điều hoàn toàn bình thường. Vì vậy, chức năng "Kiểm tra" sẽ tự động chạy và thực hiện nhiều kiểm tra về kiểu dáng và tính nhất quán. Thông thường, nó sẽ ngay lập tức nhắc bạn xác nhận và chấp nhận các chỉnh sửa (Ví dụ: “Dòng này phải kết thúc bằng dấu hai chấm” và nó sẽ nhắc bạn nhập dấu hai chấm). Đôi khi cô ấy sẽ yêu cầu bạn tự thêm hoặc thay đổi điều gì đó. Chúng tôi sẽ liên tục bổ sung các tính năng mới vào chức năng tự động của nút Kiểm tra, nhưng về cơ bản mục đích của nó là đảm bảo rằng mọi thứ bạn gửi tới kho tính năng đều tuân thủ chặt chẽ nhiều nguyên tắc về kiểu dáng nhất có thể

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Vì vậy, sau khi chạy "Kiểm tra", bạn có thể sử dụng "Xem trước". "Xem trước" tạo bản xem trước của trang tài liệu mà bạn đã xác định cho chức năng của mình. Bạn cũng có thể tạo bản xem trước cho tệp được tạo trên máy tính của mình hoặc cho tệp nằm trong bộ lưu trữ đám mây. Nếu vì lý do nào đó mà bạn không hài lòng với những gì bạn thấy trong bản xem trước, chỉ cần quay lại và thực hiện các chỉnh sửa cần thiết, sau đó nhấp lại vào nút Xem trước.
Bây giờ bạn đã sẵn sàng đẩy chức năng của mình vào kho lưu trữ. Nút Triển khai cung cấp cho bạn bốn tùy chọn:

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Điều quan trọng ở bước này là bạn có thể gửi hàm của mình đến kho lưu trữ hàm Wolfram để bất kỳ ai cũng có thể sử dụng nó. Đồng thời, bạn cũng có thể đặt chức năng của mình cho một số lượng người dùng hạn chế. Ví dụ: bạn có thể tạo một chức năng được lưu trữ cục bộ trên máy tính của mình để chức năng này khả dụng khi bạn sử dụng máy tính cụ thể đó. Hoặc bạn có thể đăng nó trong tài khoản đám mây, để nó có sẵn cho bạn khi bạn kết nối với đám mây. Bạn cũng có thể lưu trữ (triển khai) công khai tính năng này thông qua tài khoản đám mây của mình. Nó sẽ không có trong kho tính năng trung tâm của Wolfram, nhưng bạn sẽ có thể cung cấp cho ai đó một URL cho phép họ lấy tính năng của bạn từ tài khoản của bạn. (Trong tương lai, chúng tôi cũng sẽ hỗ trợ các kho lưu trữ trung tâm trong toàn công ty.)

Vì vậy, giả sử bạn thực sự muốn gửi hàm của mình tới cơ sở kiến ​​thức về hàm Wolfram. Để thực hiện việc này, bạn nhấp vào nút “Gửi” tới kho lưu trữ. Vậy điều gì đang xảy ra vào lúc này? Đơn đăng ký của bạn sẽ ngay lập tức được xếp hàng để đội ngũ giám tuyển tận tâm của chúng tôi xem xét và phê duyệt.

Khi đơn đăng ký của bạn tiến triển trong quá trình phê duyệt (thường mất vài ngày), bạn sẽ nhận được thông tin liên lạc về trạng thái của nó và có thể có các đề xuất để sử dụng trong tương lai. Nhưng sau khi tính năng của bạn được phê duyệt, nó sẽ ngay lập tức được xuất bản lên Kho lưu trữ tính năng Wolfram và sẽ có sẵn cho bất kỳ ai sử dụng. (Và điều này sẽ xuất hiện trong bản tóm tắt tin tức về các tính năng mới và vân vân)

Những gì nên có trong kho?

Cần lưu ý rằng công ty chúng tôi có các tiêu chuẩn rất cao về tính đầy đủ, độ tin cậy và chất lượng tổng thể, đồng thời trong số hơn 6000 chức năng mà chúng tôi đã tích hợp vào ngôn ngữ Wolfram trong hơn 30 năm qua, tất cả đều đáp ứng các yêu cầu trên. Mục tiêu của Kho lưu trữ chức năng Wolfram là sử dụng tất cả cấu trúc và chức năng đã tồn tại trong Ngôn ngữ Wolfram để thêm càng nhiều chức năng nhẹ hơn (nghĩa là các chức năng hiệu suất cao hơn) càng tốt.

Tất nhiên, các hàm trong kho hàm Wolfram phải tuân thủ các nguyên tắc thiết kế của Ngôn ngữ Wolfram - để chúng có thể tương tác đầy đủ với các hàm khác và kỳ vọng của người dùng về cách hàm này hoạt động bình thường. Tuy nhiên, các chức năng không nhất thiết phải có độ đầy đủ hoặc độ tin cậy như nhau.

Trong các hàm tích hợp của ngôn ngữ Wolfram, chúng tôi làm việc chăm chỉ để làm cho các hàm lập trình trở nên tổng quát nhất có thể. Điều đó đang được nói, khi trong kho lưu trữ hàm Wolfram, không có gì sai khi có một hàm trong đó chỉ xử lý một số trường hợp rất cụ thể nhưng hữu ích. Ví dụ, chức năng GửiThưTừMáy tính xách tay có thể nhận tệp ở một định dạng cụ thể và tạo thư theo một cách cụ thể. Sơ Đồ Đa Giác tạo biểu đồ chỉ với một số màu sắc và nhãn nhất định, v.v.

Một điểm khác liên quan đến các chức năng tích hợp là công ty chúng tôi nỗ lực hết sức để xử lý tất cả các trường hợp không điển hình, xử lý chính xác dữ liệu nhập sai, v.v. Trong kho lưu trữ hàm, việc có một hàm đặc biệt xử lý các trường hợp chính để giải quyết một vấn đề là điều hoàn toàn bình thường và bỏ qua tất cả các trường hợp khác.

Điểm rõ ràng là sẽ tốt hơn nếu có các hàm làm được nhiều việc hơn và làm tốt hơn, nhưng việc tối ưu hóa cho kho lưu trữ hàm - trái ngược với các hàm tích hợp sẵn của ngôn ngữ Wolfram - nên có nhiều hàm đi kèm với nhiều hàm hơn thay vì đi sâu vào quá trình thực hiện từng chức năng cụ thể.

Bây giờ hãy xem một ví dụ về các chức năng kiểm tra trong kho lưu trữ. Kỳ vọng về tính nhất quán đối với các hàm như vậy đương nhiên thấp hơn nhiều so với các hàm ngôn ngữ tích hợp. Điều này đặc biệt đúng trong trường hợp các chức năng phụ thuộc vào tài nguyên bên ngoài như API, điều quan trọng là phải liên tục tiến hành các thử nghiệm nhất quán, việc này sẽ tự động diễn ra trong các thuật toán xác minh. Trong tệp nb, bạn có thể chỉ định rõ ràng các định nghĩa (trong phần Thông tin bổ sung) và chỉ định số lượng kiểm tra được xác định bởi chuỗi đầu vào và đầu ra hoặc các đối tượng ký tự đầy đủ thuộc loại Kiểm tra xác minh, nhiều như bạn thấy phù hợp. Ngoài ra, hệ thống liên tục cố gắng biến các ví dụ tài liệu mà bạn cung cấp thành quy trình xác minh (và đôi khi việc này có thể khá tốn tài nguyên, chẳng hạn như đối với một hàm có kết quả phụ thuộc vào số ngẫu nhiên hoặc thời gian trong ngày).

Kết quả là kho chức năng sẽ có một số vấn đề phức tạp khi triển khai. Một số sẽ chỉ là một dòng mã, một số khác có thể bao gồm hàng nghìn hoặc hàng chục nghìn dòng, có thể sử dụng nhiều hàm trợ giúp. Khi nào nên thêm một hàm yêu cầu rất ít mã để xác định? Về cơ bản, nếu đối với một chức năng có tên dễ nhớ tốt, mà người dùng sẽ dễ dàng hiểu được nếu họ nhìn thấy nó trong một đoạn mã thì nó có thể được thêm vào. Nếu không, có lẽ tốt hơn là bạn chỉ cần thêm lại mã vào chương trình của mình mỗi khi bạn cần sử dụng nó.

Mục đích chính của kho lưu trữ chức năng (như tên gọi của nó) là giới thiệu các tính năng mới vào ngôn ngữ. Nếu bạn muốn thêm dữ liệu mới hoặc thực thể mới, sử dụng Kho lưu trữ dữ liệu Wolfram. Nhưng nếu bạn muốn giới thiệu các loại đối tượng mới cho các phép tính của mình thì sao?

Thực tế có hai cách. Bạn có thể muốn giới thiệu một loại đối tượng mới sẽ được sử dụng trong các hàm mới trong kho hàm. Và trong trường hợp này, bạn luôn có thể chỉ cần ghi lại biểu diễn ký hiệu của nó và sử dụng nó khi nhập hoặc xuất các hàm trong kho hàm.

Nhưng điều gì sẽ xảy ra nếu bạn muốn biểu thị một đối tượng và sau đó xác định rằng bạn muốn làm việc với nó thông qua các hàm hiện có trong Ngôn ngữ Wolfram? Ngôn ngữ Wolfram luôn có một cơ chế gọn nhẹ cho việc này, được gọi là Giá trị lên. Với một số hạn chế (đặc biệt đối với các chức năng không thể đánh giá lập luận của họ), kho lưu trữ hàm cho phép bạn biểu diễn một hàm một cách đơn giản và xác định các giá trị cho nó. (Để nâng cao kỳ vọng về tính nhất quán khi tạo ra một thiết kế chính mới được tích hợp hoàn toàn trong Ngôn ngữ Wolfram nói chung là một quy trình rất quan trọng không thể đạt được chỉ bằng cách tăng chi phí của dự án và là điều mà công ty chúng tôi thực hiện như một phần của dự án. để phát triển ngôn ngữ lâu dài, nhiệm vụ này không phải là mục tiêu được đặt ra như một phần của quá trình phát triển kho lưu trữ).

Vì vậy, mã chức năng trong kho chức năng có thể có những gì? Mọi thứ được tích hợp trong Ngôn ngữ Wolfram, tất nhiên (ít nhất là nếu nó không đại diện các mối đe dọa cho An ninh và hiệu suất của chính chương trình, như một môi trường điện toán) cũng như bất kỳ chức năng nào từ kho lưu trữ chức năng. Tuy nhiên, còn có các chức năng khác: một hàm trong kho hàm có thể gọi một API hoặc trong Đám mây WolframHoặc từ một nguồn khác. Tất nhiên, có một số rủi ro liên quan đến điều này. Do không có gì đảm bảo rằng API sẽ không thay đổi và chức năng trong kho chức năng sẽ ngừng hoạt động. Để giúp xác định các vấn đề như thế này, có một ghi chú trên trang tài liệu (trong phần Yêu cầu) cho bất kỳ tính năng nào không chỉ dựa vào chức năng Ngôn ngữ Wolfram tích hợp. (Tất nhiên, khi nói đến dữ liệu thực, thậm chí có thể có vấn đề với chức năng này - bởi vì dữ liệu trong thế giới thực liên tục thay đổi và đôi khi ngay cả định nghĩa và cấu trúc của nó cũng thay đổi.)

Tất cả mã cho kho lưu trữ tính năng Wolfram có nên được viết bằng Wolfram không? Chắc chắn, mã bên trong API bên ngoài không được viết bằng ngôn ngữ Wolfram, ngôn ngữ này thậm chí không tạo ra mã ngôn ngữ. Trên thực tế, nếu bạn tìm thấy một hàm ở hầu hết mọi ngôn ngữ hoặc thư viện bên ngoài, bạn có thể tạo một trình bao bọc cho phép bạn sử dụng hàm đó trong kho lưu trữ hàm Wolfram. (Thông thường bạn nên sử dụng các hàm có sẵn cho việc này Đánh giá bên ngoài hoặc Chức năng bên ngoài bằng mã ngôn ngữ Wolfram.)

Vậy ý nghĩa của việc làm này là gì? Về cơ bản, điều này cho phép bạn sử dụng toàn bộ hệ thống Ngôn ngữ Wolfram tích hợp và toàn bộ bộ khả năng phần mềm thống nhất của nó. Nếu bạn có được triển khai cơ sở từ thư viện hoặc ngôn ngữ bên ngoài, thì bạn có thể sử dụng cấu trúc biểu tượng phong phú của Ngôn ngữ Wolfram để tạo một hàm cấp cao thuận tiện cho phép người dùng dễ dàng sử dụng bất kỳ chức năng nào đã được triển khai. Ít nhất, điều này sẽ khả thi trong một thế giới lý tưởng nơi tồn tại tất cả các khối xây dựng của thư viện tải, v.v., trong trường hợp đó chúng sẽ được Ngôn ngữ Wolfram xử lý tự động. (Cần lưu ý rằng trong thực tế có thể có vấn đề với thiết lập ngôn ngữ bên ngoài hệ thống máy tính cụ thể và lưu trữ đám mây có thể gây ra các vấn đề bảo mật bổ sung).

Nhân tiện, khi bạn nhìn vào các thư viện bên ngoài điển hình lần đầu tiên, chúng thường có vẻ quá phức tạp để chỉ đề cập đến một vài chức năng, nhưng trong nhiều trường hợp, phần lớn sự phức tạp đến từ việc tạo cơ sở hạ tầng cần thiết cho thư viện và tất cả các chức năng để ủng hộ nó. Tuy nhiên, khi sử dụng Ngôn ngữ Wolfram, cơ sở hạ tầng thường đã được tích hợp sẵn trong các gói và do đó không cần phải trình bày chi tiết tất cả các chức năng hỗ trợ này mà chỉ tạo các chức năng cho các chức năng dành riêng cho ứng dụng "trên cùng" trong thư viện .

“Hệ sinh thái” cơ sở tri thức

Nếu bạn đã viết các hàm mà bạn sử dụng thường xuyên, hãy gửi chúng đến Kho lưu trữ hàm Wolfram! Nếu điều gì đó không xảy ra nữa (phát triển ngôn ngữ), thì thậm chí khi đó bạn sẽ thuận tiện hơn nhiều khi sử dụng các chức năng cho mục đích cá nhân. Tuy nhiên, thật hợp lý khi cho rằng nếu bạn sử dụng các chức năng này thường xuyên, có thể những người dùng khác cũng sẽ thấy chúng hữu ích.

Đương nhiên, bạn có thể rơi vào tình huống không thể - hoặc không muốn - chia sẻ các chức năng của mình hoặc trong trường hợp có được quyền truy cập vào các tài nguyên thông tin cá nhân. Ngay cả trong những trường hợp như vậy, bạn chỉ cần triển khai các chức năng trong tài khoản đám mây của riêng mình, chỉ định quyền truy cập vào chúng. (Nếu tổ chức của bạn có Đám mây riêng của Wolfram Enterprise, thì nó sẽ sớm có thể lưu trữ kho lưu trữ tính năng riêng tư của riêng mình, kho lưu trữ này có thể được quản lý từ bên trong tổ chức của bạn và đặt xem có buộc người dùng bên thứ ba xem chế độ xem hay không.)

Các hàm bạn gửi tới kho lưu trữ hàm Wolfram không cần phải hoàn hảo; chúng chỉ cần hữu ích. Điều này hơi giống phần "Lỗi" trong tài liệu Unix cổ điển - trong "Phần định nghĩa" có phần "Ghi chú của tác giả" nơi bạn có thể mô tả các hạn chế, vấn đề, v.v. mà bạn đã biết về chức năng của mình. Ngoài ra, khi bạn gửi tính năng của mình đến kho lưu trữ, bạn có thể thêm ghi chú gửi sẽ được đọc bởi một nhóm người phụ trách chuyên trách.

Khi một tính năng được xuất bản, trang của nó luôn có hai liên kết ở cuối: "Gửi tin nhắn về tính năng này"Và"Thảo luận trong cộng đồng Wolfram" Nếu bạn đang đính kèm ghi chú (ví dụ: cho tôi biết về lỗi), bạn có thể chọn hộp cho biết bạn muốn chia sẻ thông báo và thông tin liên hệ của mình với tác giả tính năng.

Đôi khi bạn chỉ muốn sử dụng các hàm từ kho lưu trữ hàm Wolfram, chẳng hạn như các hàm tích hợp sẵn mà không cần xem mã của chúng. Tuy nhiên, nếu bạn muốn nhìn vào bên trong thì luôn có nút Notepad ở trên cùng. Nhấp vào nó và bạn sẽ nhận được bản sao sổ ghi chép định nghĩa ban đầu của riêng mình đã được gửi tới kho lưu trữ tính năng. Đôi khi bạn chỉ có thể sử dụng nó làm ví dụ cho nhu cầu của mình. Đồng thời, bạn cũng có thể phát triển bản sửa đổi của riêng mình cho chức năng này. Bạn có thể muốn đăng các chức năng này mà bạn tìm thấy từ kho lưu trữ trên máy tính hoặc trong tài khoản lưu trữ đám mây rệp của mình, có lẽ bạn muốn gửi chúng đến cơ sở kiến ​​thức về chức năng, có thể dưới dạng phiên bản cải tiến, mở rộng của chức năng ban đầu.

Trong tương lai, chúng tôi dự định hỗ trợ phân nhánh kiểu Git cho các kho tính năng, nhưng hiện tại, chúng tôi đang cố gắng làm cho nó đơn giản và chúng tôi luôn chỉ có một phiên bản được chấp nhận của mỗi tính năng được tích hợp trong ngôn ngữ. Thường xuyên hơn không (trừ khi các nhà phát triển từ bỏ việc duy trì các tính năng họ đã phát triển và phản hồi nội dung gửi của người dùng), tác giả ban đầu của tính năng này sẽ kiểm soát các bản cập nhật cho tính năng đó và gửi các phiên bản mới, sau đó sẽ được xem xét và nếu chúng vượt qua quá trình xem xét , được xuất bản bằng ngôn ngữ.

Chúng ta hãy xem xét câu hỏi "phiên bản" của các chức năng đã phát triển hoạt động như thế nào. Hiện tại, khi bạn sử dụng một hàm từ kho hàm, định nghĩa của hàm đó sẽ được lưu trữ vĩnh viễn trên máy tính của bạn (hoặc trong tài khoản đám mây của bạn nếu bạn đang sử dụng đám mây). Nếu có phiên bản mới của một tính năng, lần tiếp theo sử dụng tính năng đó, bạn sẽ nhận được thông báo về điều này. Và nếu bạn muốn cập nhật chức năng lên phiên bản mới, bạn có thể thực hiện bằng lệnh Cập nhật tài nguyên. ("Thực tế, "blob chức năng" lưu trữ nhiều thông tin phiên bản hơn và chúng tôi dự định làm cho thông tin này dễ truy cập hơn đối với người dùng trong tương lai.)

Một trong những điều hay về Kho lưu trữ chức năng Wolfram là bất kỳ chương trình Ngôn ngữ Wolfram nào, ở bất cứ đâu đều có thể sử dụng các chức năng từ nó. Nếu một chương trình xuất hiện trong notepad, việc định dạng các hàm của kho lưu trữ là các hàm "đối tượng nhị phân hàm" dễ đọc (có thể với một bộ phiên bản thích hợp) thường rất thuận tiện.

Bạn luôn có thể truy cập bất kỳ chức năng nào trong kho chức năng bằng văn bản Hàm tài nguyên[...]. Và điều này rất thuận tiện nếu bạn viết mã hoặc tập lệnh trực tiếp cho Wolfram Engine, chẳng hạn với sử dụng IDE hoặc trình soạn thảo mã văn bản (cần đặc biệt lưu ý rằng kho chức năng hoàn toàn tương thích với Công cụ Wolfram miễn phí dành cho nhà phát triển).

Nó hoạt động như thế nào?

Bên trong các hàm trong kho lưu trữ Wolfram, điều này có thể thực hiện được bằng cách sử dụng chính xác hệ thống tài nguyên căn cứ, như trong tất cả các kho lưu trữ hiện có khác của chúng tôi (kho dữ liệu, Kho lưu trữ mạng thần kinh, bộ sưu tập các dự án demo v.v.), giống như tất cả các tài nguyên hệ thống Wolfram khác, Chức năng tài nguyên cuối cùng dựa trên chức năng Đối tượng tài nguyên.

Hãy xem xét Chức năng tài nguyên:

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Bên trong bạn có thể xem một số thông tin bằng cách sử dụng chức năng Thông tin:

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Việc thiết lập chức năng tài nguyên hoạt động như thế nào? Trường hợp đơn giản nhất là trường hợp thuần túy cục bộ. Sau đây là ví dụ lấy một hàm (trong trường hợp này chỉ là một hàm thuần túy) và định nghĩa nó là hàm tài nguyên cho một phiên chương trình nhất định:

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Khi bạn đã xác định xong, bạn có thể sử dụng hàm tài nguyên:

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Lưu ý rằng có một biểu tượng màu đen trong đốm màu chức năng này Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram. Điều này có nghĩa là hàm BLOB đề cập đến hàm tài nguyên trong bộ nhớ được xác định cho phiên hiện tại. Tính năng tài nguyên được lưu trữ vĩnh viễn trên máy tính hoặc tài khoản đám mây của bạn có biểu tượng màu xám Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram. Và có một biểu tượng màu cam cho tính năng tài nguyên chính thức trong Kho lưu trữ tính năng Wolfram Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram.

Vậy điều gì sẽ xảy ra khi bạn sử dụng menu Mở rộng trong Sổ tay Định nghĩa? Đầu tiên, nó lấy tất cả các định nghĩa trong sổ ghi chú và từ đó tạo ra một biểu tượng Đối tượng tài nguyên). (Và nếu bạn đang sử dụng IDE hoặc chương trình dựa trên văn bản thì bạn cũng có thể tạo một cách rõ ràng Đối tượng tài nguyên)

Việc triển khai cục bộ một chức năng từ kho lưu trữ trên máy tính của bạn được thực hiện bằng lệnh Cục bộ nhớ cache để một đối tượng tài nguyên lưu nó dưới dạng Đối tượng cục bộ trên hệ thống tập tin của bạn. Việc triển khai vào tài khoản đám mây được thực hiện bằng lệnh Triển khai đám mây cho một đối tượng tài nguyên và việc triển khai đám mây công cộng là Xuất bản trên nền tảng đám mây. Trong tất cả trường hợp Đăng ký tài nguyên cũng được sử dụng để đăng ký tên hàm tài nguyên, vì vậy Hàm tài nguyên["tên"] sẽ làm việc.

Nếu bạn nhấp vào nút Gửi cho Kho lưu trữ chức năng, điều gì sẽ xảy ra bên dưới nó Tài nguyênGửi được gọi trên một đối tượng tài nguyên. (Và nếu bạn đang sử dụng giao diện nhập văn bản, bạn cũng có thể gọi Tài nguyênGửi trực tiếp.)

Theo mặc định, việc gửi được thực hiện dưới tên được liên kết với ID Wolfram của bạn. Nhưng nếu bạn gửi đơn đăng ký thay mặt cho một nhóm hoặc tổ chức phát triển, bạn có thể đặt ID nhà xuất bản riêng và thay vào đó hãy sử dụng nó làm tên để tương tác với các quan điểm của bạn.

Sau khi bạn gửi bất kỳ chức năng nào của mình tới cơ sở kiến ​​thức về chức năng, chức năng đó sẽ được xếp hàng đợi để xem xét. Nếu bạn nhận được phản hồi, chúng thường ở dạng tệp văn bản có thêm “ô nhận xét” bổ sung. Bạn luôn có thể kiểm tra trạng thái đơn đăng ký của mình bằng cách truy cập cổng thông tin thành viên hệ thống tài nguyên. Nhưng sau khi tính năng của bạn được phê duyệt, bạn sẽ được thông báo (qua email) và tính năng của bạn sẽ được đăng lên kho tính năng Wolfram.

Một số sự tinh tế trong công việc

Thoạt nhìn, có vẻ như bạn chỉ cần lấy một cuốn sổ ghi chép định nghĩa và đặt nguyên văn nó vào một kho lưu trữ hàm, tuy nhiên, thực tế có khá nhiều điều phức tạp liên quan - và việc xử lý chúng đòi hỏi phải thực hiện một số lập trình meta khá phức tạp, xử lý việc xử lý biểu tượng là mã xác định hàm và chính Notepad cũng được xác định. Hầu hết điều này xảy ra trong nội bộ, ở hậu trường, nhưng nó có thể có một số hàm ý đáng để hiểu nếu bạn định đóng góp cho cơ sở kiến ​​thức về tính năng.

Sự tinh tế ngay lập tức đầu tiên: Khi bạn điền vào Sổ tay định nghĩa, bạn có thể chỉ cần tham khảo chức năng của mình ở mọi nơi bằng cách sử dụng một cái tên như chức năng của tôi, trông giống như tên thông thường của một hàm trong Ngôn ngữ Wolfram, nhưng đối với tài liệu kho lưu trữ hàm thì tên này được thay thế Hàm tài nguyên["Chức năng của tôi"] là những gì người dùng thực sự sẽ sử dụng khi làm việc với hàm này.

Điều tinh tế thứ hai: khi bạn tạo một hàm tài nguyên từ Sổ tay định nghĩa, tất cả các phần phụ thuộc liên quan đến định nghĩa hàm phải được ghi lại và đưa vào một cách rõ ràng. Tuy nhiên, để đảm bảo rằng các định nghĩa vẫn mang tính mô-đun, bạn cần đặt mọi thứ trong một không gian tên. (Tất nhiên rồi, chức năng làm tất cả, nằm trong kho chức năng.)

Thông thường, bạn sẽ không bao giờ thấy bất kỳ dấu vết nào của mã được sử dụng để định cấu hình không gian tên này. Nhưng nếu vì lý do nào đó mà bạn gọi một biểu tượng chưa được thực thi bên trong hàm của mình thì bạn sẽ thấy biểu tượng này nằm trong ngữ cảnh bên trong của hàm. Tuy nhiên, khi xử lý Notepad Định nghĩa, ít nhất ký hiệu tương ứng với chính hàm đó là điều chỉnh để hiển thị tốt nhất như một BLOB chức năng chứ không phải là một ký tự thô trong ngữ cảnh bên trong.

Kho lưu trữ chức năng là để xác định các chức năng mới. Và các chức năng này có thể có các tùy chọn. Thông thường các tham số này (ví dụ: Phương pháp hoặc Kích thước ảnh) sẽ có thể được sử dụng cho các hàm dựng sẵn cũng như cho các hàm đã tồn tại ký hiệu dựng sẵn. Nhưng đôi khi một tính năng mới có thể yêu cầu các tùy chọn mới. Để duy trì tính mô-đun, các tham số này cần phải là các ký hiệu được xác định trong ngữ cảnh nội bộ duy nhất (hoặc thứ gì đó giống như toàn bộ các hàm tài nguyên, nghĩa là chính chúng). Để đơn giản, kho hàm cho phép bạn xác định các tùy chọn mới trong định nghĩa chuỗi. Và để thuận tiện cho người dùng, những định nghĩa này (giả sử họ đã sử dụng Giá trị tùy chọn и Tùy chọnMẫu) cũng được xử lý để khi sử dụng hàm, các tham số có thể được chỉ định không chỉ dưới dạng chuỗi mà còn dưới dạng ký hiệu chung có cùng tên.

Hầu hết các hàm chỉ đơn giản thực hiện những gì chúng phải làm mỗi khi được gọi, nhưng một số hàm cần được khởi tạo trước khi chúng có thể chạy trong một phiên cụ thể - và để giải quyết vấn đề này, có phần "Khởi tạo" trong phần Định nghĩa.

Các hàm từ kho lưu trữ có thể sử dụng các hàm khác đã có trong kho lưu trữ; để thiết lập các định nghĩa cho kho lưu trữ hàm bao gồm hai (hoặc nhiều) hàm tham chiếu lẫn nhau, bạn phải triển khai chúng trong phiên chương trình của mình để có thể tham khảo như trên chúng Hàm tài nguyên["tên"], thì bạn có thể tạo sự kết hợp của các chức năng này mà bạn cần, ví dụ (tôi không hiểu) và thêm chức năng mới vào kho lưu trữ dựa trên những chức năng đã được đăng trước đó. (hoặc đã hoặc trước đó – cả hai từ đều vụng về)

Triển vọng phát triển. Điều gì sẽ xảy ra khi kho lưu trữ thực sự lớn?

Hôm nay, chúng tôi mới ra mắt Kho lưu trữ tính năng Wolfram, nhưng theo thời gian, chúng tôi hy vọng rằng quy mô và chức năng của nó có thể tăng lên đáng kể và khi nó phát triển trong quá trình phát triển, sẽ có nhiều vấn đề khác nhau mà chúng tôi dự đoán có thể phát sinh.

Vấn đề đầu tiên liên quan đến tên hàm và tính duy nhất của chúng. Kho lưu trữ hàm được thiết kế theo cách giống như các hàm tích hợp trong Ngôn ngữ Wolfram, bạn có thể tham chiếu bất kỳ hàm nhất định nào chỉ bằng cách chỉ định tên của nó. Nhưng điều này chắc chắn có nghĩa là tên hàm phải là duy nhất trên toàn bộ kho lưu trữ, do đó, chẳng hạn, chỉ có thể có một Hàm tài nguyên["Chức năng yêu thích của tôi"].

Điều này ban đầu có vẻ giống như một vấn đề lớn, nhưng cần nhận ra rằng về cơ bản, đây là vấn đề tương tự như đối với những thứ như tên miền internet hoặc địa chỉ mạng xã hội. Và thực tế là hệ thống chỉ cần có một nhà đăng ký - và đây là một trong những vai trò mà công ty chúng tôi sẽ thực hiện đối với cơ sở tri thức chức năng Wolfram. (Đối với các phiên bản riêng tư của một kho lưu trữ, người đăng ký của chúng có thể là quản trị viên.) Tất nhiên, một miền Internet có thể được đăng ký mà không cần bất kỳ thứ gì trên đó, nhưng trong kho chức năng, tên chức năng chỉ có thể được đăng ký nếu có định nghĩa thực tế về chức năng.

Một phần vai trò của chúng tôi trong việc quản lý cơ sở kiến ​​thức về hàm Wolfram là đảm bảo rằng tên được chọn cho hàm là hợp lý theo định nghĩa của hàm và nó tuân theo các quy ước đặt tên của Ngôn ngữ Wolfram. Chúng tôi có hơn 30 năm kinh nghiệm đặt tên cho các hàm tích hợp bằng Ngôn ngữ Wolfram và nhóm người phụ trách của chúng tôi cũng sẽ mang trải nghiệm đó vào kho lưu trữ hàm. Tất nhiên, luôn có những trường hợp ngoại lệ. Ví dụ: có vẻ thích hợp hơn khi đặt một tên ngắn cho một số chức năng, nhưng tốt hơn là nên "bảo vệ" bằng một tên dài hơn, cụ thể hơn vì bạn sẽ ít gặp phải trường hợp ai đó muốn đặt một tên chức năng tương tự trong tương lai. .

(Cần lưu ý ở đây rằng việc chỉ thêm một số thẻ thành viên vào các hàm phân biệt sẽ không có tác dụng như mong muốn. Bởi vì trừ khi bạn nhấn mạnh rằng một thẻ luôn được gán, bạn sẽ cần xác định một thẻ mặc định cho bất kỳ hàm nhất định nào và cũng phân bổ tác giả thẻ, một lần nữa sẽ yêu cầu sự phối hợp toàn cầu.)

Khi nền tảng kiến ​​thức về các hàm Wolfram phát triển, một trong những vấn đề có thể sẽ nảy sinh là khả năng khám phá các hàm mà hệ thống cung cấp. chức năng tìm kiếm (và các tệp định nghĩa có thể bao gồm các từ khóa, v.v.). Đối với các hàm tích hợp trong Ngôn ngữ Wolfram, có tất cả các loại tham chiếu chéo trong tài liệu để giúp “quảng cáo” các hàm. Các hàm trong kho hàm có thể tham chiếu các hàm dựng sẵn. Nhưng ngược lại thì sao? Để làm điều này, chúng tôi sẽ thử nghiệm các thiết kế khác nhau để hiển thị các hàm kho lưu trữ trong các trang tài liệu dành cho các hàm tích hợp.

Đối với các chức năng tích hợp trong Ngôn ngữ Wolfram, có một lớp được gọi là lớp phát hiện được cung cấp bởi mạng lưới "trang trợ giúp", cung cấp danh sách có tổ chức các tính năng liên quan đến các khu vực cụ thể. Việc cân bằng các trang man một cách hợp lý luôn là điều khó khăn và khi ngôn ngữ Wolfram phát triển, các trang man thường cần phải được tổ chức lại hoàn toàn. Khá dễ dàng để sắp xếp các chức năng từ kho lưu trữ thành các danh mục rộng rãi và thậm chí chia nhỏ các danh mục đó một cách nhất quán, nhưng sẽ có giá trị hơn nhiều khi có các trang tham chiếu ngôn ngữ được tổ chức hợp lý. Vẫn chưa rõ cách tốt nhất để tạo chúng cho toàn bộ cơ sở kiến ​​thức về chức năng. Ví dụ, CreateResourceObjectGallery trong kho lưu trữ tính năng, bất kỳ ai cũng có thể đăng một trang web chứa "lựa chọn" của họ từ kho lưu trữ:

Kho lưu trữ chức năng Wolfram: Nền tảng truy cập mở cho các phần mở rộng ngôn ngữ Wolfram

Kho lưu trữ hàm Wolfram được cấu hình như một kho lưu trữ hàm liên tục, trong đó mọi hàm trong đó sẽ luôn hoạt động. Tất nhiên, các phiên bản tính năng mới có thể được cung cấp và chúng tôi hy vọng rằng một số tính năng tất nhiên sẽ trở nên lỗi thời theo thời gian. Các chức năng sẽ hoạt động nếu chúng được sử dụng trong các chương trình, nhưng các trang tài liệu của chúng sẽ liên kết đến các chức năng mới, nâng cao hơn.

Kho lưu trữ tính năng Wolfram được thiết kế để giúp bạn nhanh chóng khám phá các tính năng mới và tìm hiểu những cách mới để sử dụng ngôn ngữ Wolfram. Chúng tôi rất lạc quan rằng một số nội dung đã được khám phá trong kho tính năng cuối cùng sẽ có ý nghĩa để trở thành các phần tích hợp của Ngôn ngữ Wolfram cốt lõi. Trong thập kỷ qua chúng ta đã có một bộ tương tự các tính năng ban đầu được giới thiệu trong Wolfram | Alpha. Và một trong những bài học rút ra từ trải nghiệm này là việc đạt được các tiêu chuẩn về chất lượng và tính nhất quán mà chúng tôi tập trung vào mọi thứ được xây dựng bằng ngôn ngữ Wolfram đòi hỏi rất nhiều công sức, điều này thường khó hơn nỗ lực ban đầu để thực hiện ý tưởng. Mặc dù vậy, một hàm trong cơ sở kiến ​​thức hàm có thể đóng vai trò là bằng chứng rất hữu ích về khái niệm cho một hàm trong tương lai mà cuối cùng có thể được tích hợp vào ngôn ngữ Wolfram.

Điều quan trọng nhất ở đây là chức năng trong kho lưu trữ chức năng là thứ có sẵn cho mọi người dùng sử dụng ngay bây giờ. Có thể tính năng ngôn ngữ bản địa có thể tốt hơn và hiệu quả hơn nhiều, nhưng kho lưu trữ tính năng sẽ cho phép người dùng có quyền truy cập vào tất cả các tính năng mới ngay lập tức. Và quan trọng nhất, khái niệm này cho phép mọi người thêm bất kỳ tính năng mới nào họ muốn.

Trước đây trong lịch sử của ngôn ngữ Wolfram, ý tưởng này có thể đã không hoạt động tốt như hiện tại, nhưng ở giai đoạn này, ngôn ngữ đã nỗ lực rất nhiều và sự hiểu biết sâu sắc về các nguyên tắc thiết kế ngôn ngữ, đến mức bây giờ nó có vẻ khá một cộng đồng lớn người dùng có thể thêm các tính năng sẽ duy trì tính nhất quán trong thiết kế để làm cho chúng hữu ích cho nhiều người dùng.

Có một tinh thần tài năng(?) đáng kinh ngạc trong cộng đồng người dùng Ngôn ngữ Wolfram. (Tất nhiên, cộng đồng này bao gồm nhiều chuyên gia R&D hàng đầu trong nhiều lĩnh vực khác nhau.) Tôi hy vọng rằng Kho lưu trữ tính năng Wolfram sẽ cung cấp một nền tảng hiệu quả để khai thác và phổ biến tinh thần tài năng này. Chỉ cùng nhau, chúng ta mới có thể tạo ra thứ gì đó có thể mở rộng đáng kể lĩnh vực mà mô hình điện toán ngôn ngữ Wolfram có thể được áp dụng.

Trong hơn 30 năm, chúng ta đã đi được một chặng đường dài với ngôn ngữ Wolfram. Bây giờ cùng nhau, chúng ta hãy tiến xa hơn nữa. Tôi thực sự khuyến khích tất cả những người dùng ngôn ngữ Wolfram được kính trọng trên toàn thế giới sử dụng kho lưu trữ chức năng làm nền tảng cho việc này, cũng như dự án phần mềm mới như Công cụ Wolfram miễn phí dành cho nhà phát triển.

Nguồn: www.habr.com

Thêm một lời nhận xét