Là CLR phân cấp nguồn mở?


9

Hệ thống phân cấp tích hợp là CLR lưu trữ các đường dẫn ở dạng nhị phân hiệu quả và cung cấp các chức năng hữu ích khác.

Thật không may, có giới hạn về độ sâu của các đường dẫn được biểu diễn và nó ~ 1427 cho cây nhị phân. Tôi muốn tăng giới hạn đó cho một ứng dụng hiện có phức tạp bị ràng buộc để đạt giới hạn này. Tôi không muốn thay đổi giao diện của loại. Tôi không tự tin rằng tôi có thể thay đổi giao diện của loại mà không đưa các lỗi tinh vi vào tất cả các mã sẽ phải thay đổi.

Về mặt lý thuyết, tôi có thể tạo ra một CLR UDT "binhVELyid" thực hiện giao diện giống như phân cấp, nhưng chỉ hỗ trợ các cây nhị phân. Điều đó sẽ giúp tôi có độ sâu ~ 7000 trong khi vẫn còn trong giới hạn 900 byte. Không chắc chắn sẽ lớn như thế nào.

Là nguồn của CLR phân cấp này có sẵn ở đâu đó, để tôi có thể tự tạo dựa trên nó hỗ trợ các cấu trúc sâu hơn?


Tôi đã quan tâm để biết những gì bạn đang làm người mẫu. Bạn có thể mô tả?
wBob

Câu trả lời:


6

Rất nhiều mã nguồn .NET có sẵn và phần lớn là Mã nguồn mở, mặc dù theo các giấy phép khác nhau. Vẫn còn mã khác, nhưng chỉ cho mục đích tham khảo và không thể được sử dụng trong mã của bạn.

Cho rằng mục tiêu đã nêu là:

Tôi muốn tăng giới hạn đó cho một ứng dụng hiện có phức tạp bị ràng buộc để đạt giới hạn này. Tôi không muốn thay đổi giao diện của loại. Tôi không tự tin rằng tôi có thể thay đổi giao diện của loại mà không đưa các lỗi tinh vi vào tất cả các mã sẽ phải thay đổi.

nếu ý định cập nhật loại Phân cấp hiện tại, thì mã nguồn có phải là Nguồn mở hay không là không liên quan vì ngay cả khi đó, bạn sẽ không bao giờ có thể đưa ra bất kỳ thay đổi nào trong hệ thống tổng thể: ngay cả khi bạn có thể thay thế Hội ​​trong SQL Server, bạn sẽ không thể ký nó với cùng một Chứng chỉ / Khóa riêng và do đó nó sẽ không được hệ thống sử dụng.

Tuy nhiên, bạn có thể xây dựng Loại xác định người dùng (UDT) SQLCLR của riêng bạn để cung cấp chức năng mong muốn.

Tuy nhiên , vì nó liên quan đến việc hiểu rõ hơn về .NET Framework:

Bạn có thể xem mã nguồn của hầu hết mọi thứ ở đây: https://github.com/Microsoft/referencesource

và thậm chí nhiều thứ khác ở đây: https://github.com/dotnet/corefx

Cả hai kho lưu ý ở trên đều là Nguồn mở và chủ yếu được quản lý theo giấy phép MIT, mặc dù bạn cần xem lại thông tin cấp phép ở từng vị trí và đôi khi trong các thư mục khác nhau, để chắc chắn.

Rất nhiều mã còn lại có thể được tìm thấy ở đây: http://referencesource.microsoft.com/

Mã được tìm thấy tại ReferenceSource.Microsoft.com (liên kết trực tiếp ở trên) không được tìm thấy ở hai liên kết đầu tiên (là Nguồn mở) không phải là Nguồn mở và thay vào đó được điều chỉnh bởi MICROSOFT TÀI LIỆU THAM KHẢO (MS-RSL) , phần có liên quan (được chỉnh sửa nhẹ để đặt định nghĩa về "sử dụng tham chiếu" ngay sau khi sử dụng cụm từ đó):

Bên cấp phép cấp cho bạn giấy phép bản quyền không thể chuyển nhượng, không độc quyền, trên toàn thế giới, miễn phí bản quyền để sao chép phần mềm để sử dụng tham chiếu: sử dụng phần mềm trong công ty của bạn làm tài liệu tham khảo, dưới dạng chỉ đọc, cho mục đích gỡ lỗi duy nhất sản phẩm của bạn, bảo trì sản phẩm của bạn hoặc tăng cường khả năng tương tác của sản phẩm với phần mềm và đặc biệt loại trừ quyền phân phối phần mềm bên ngoài công ty của bạn.

Tuy nhiên, dường như Microsoft.SqlServer.*không gian tên không có sẵn ở bất kỳ vị trí nào trong số đó. Điều đó có nghĩa là câu trả lời đơn giản cho câu hỏi: "là Nguồn mở HVELyID?" là: Không .

Nếu mong muốn là nhìn thấy mã nguồn, thì bạn sẽ cần mở DLL - Microsoft.SqlServer.Types.dll - bằng trình dịch ngược. NHƯNG, có những vấn đề pháp lý và / hoặc đạo đức tiềm năng để giải quyết. Đây mã độc quyền nên có hai điểm chính cần xem xét:

  • như đã nêu trong Thỏa thuận cấp phép người dùng cuối của SQL Server (EULA) (và như được trích dẫn trong câu trả lời của @ TomV ), bạn chỉ có thể " thiết kế ngược, dịch ngược hoặc phân tách " mã không được cung cấp " chỉ trong phạm vi luật pháp hiện hành cho phép rõ ràng " . Có nghĩa là đối với một số người, việc làm này là hoàn toàn hợp pháp, nhưng đối với những người khác, không quá nhiều. Vì vậy, bạn có thể muốn tham khảo ý kiến ​​một luật sư sở hữu trí tuệ địa phương.

  • nếu nó hợp pháp để bạn dịch ngược, mục đích của ngôn ngữ pháp lý, cộng với thực tế là một số mã nguồn được cung cấp (như được liên kết ở trên cùng) nhưng mã này không phải, chắc chắn ngụ ý rằng mong muốn của công chúng là không thấy hoặc có mã này Vì vậy, việc hợp pháp để dịch ngược không nên được thực hiện vì nó cũng hợp pháp để sao chép, nhưng nhiều hơn để nó có thể được sử dụng làm tài liệu tham khảo (ví dụ để gỡ lỗi, v.v.).


4
Tôi đã không nghĩ về khía cạnh pháp lý khi viết câu hỏi. Tôi đoán, cách duy nhất thực sự hợp pháp để đi là thực hiện phòng sạch.
Tarnay Kálmán

3
Xin chào Solomon, tôi chỉ tự hỏi bạn sẽ cảm thấy thế nào nếu chúng tôi đề nghị dịch ngược các thư viện (xuất sắc) của bạn để xem cách chúng hoạt động hoặc sao chép mã nguồn của chúng :)
Tom V - thử topanswers.xyz

1
Trả lời chỉnh sửa của bạn về việc không thể thay thế lắp ráp: Tôi không muốn thay thế lắp ráp. Tôi ổn với loại của tôi có một tên khác. Tôi chưa (chưa?) Thấy khó khăn trong việc di chuyển sang một loại được đặt tên khác mà (đối với trường hợp sử dụng cây nhị phân hạn chế của tôi) có hành vi tương tự. Tôi sẽ phải thay đổi tất cả các tham chiếu thành loại trong các thủ tục được lưu trữ (nhưng có thể quản lý được) và ALTER (có thể TẠO // CẬP NHẬT / DROP) một số cột, nhưng đó là về nó.
Tarnay Kálmán

1
@TomV Đó là một điểm tốt để nâng cao vì vậy cảm ơn bạn đã làm như vậy. Tôi qua lại về vấn đề này, ở cả hai phía của nó và là một người tò mò tự nhiên. Có nhiều lý do khác nhau để muốn mã (gỡ lỗi, tìm hiểu kỹ thuật, sao chép / đánh cắp, v.v.), một số vẫn ổn. Mọi người đã hỏi làm thế nào để dịch ngược SQL # và thậm chí biết rằng nó có thể hợp pháp và dựa vào sự đổi mới hơn là bí mật, tôi nhớ lại không đánh giá cao nó. Tôi đoán rằng tôi đã trả lời vội vàng, tập trung vào khía cạnh "làm thế nào", nhưng đã cập nhật câu trả lời của tôi thay thế các hướng dẫn bằng các khía cạnh khác nhau của tình huống.
Solomon Rutzky

6

Vì srutzky đã chỉ cho bạn một số vị trí trong câu trả lời của anh ấy , nơi có sẵn một số mã nguồn của Microsoft và chức năng bạn yêu cầu không được liệt kê, tôi nghĩ rằng chúng tôi có thể kết luận mã nguồn không có sẵn theo bất kỳ giấy phép nguồn mở nào và có vẻ như câu hỏi của bạn là về nó là nguồn mở, không phải về việc có thể xem mã nguồn .

Cho rằng EULA tuyên bố như sau:

Khi làm như vậy, bạn phải tuân thủ mọi giới hạn kỹ thuật trong phần mềm chỉ cho phép bạn sử dụng phần mềm theo những cách nhất định. Bạn không được:
...
kỹ sư đảo ngược, dịch ngược hoặc tháo rời phần mềm, ngoại trừ và chỉ trong phạm vi mà luật áp dụng rõ ràng cho phép, bất chấp giới hạn này;

Vì vậy, tôi sợ bạn còn lại để thực hiện logic.

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.