Ngôn ngữ lập trình nào được Gini xây dựng với?
Có thể bảo mật. Unlike the "monolithic blobs" of Bitcoin and other cryptocurrencies, Gini's systems are designed to be chứng minh an toàn which means it will be possible to employ mathematical analysis of Gini's systems to provide quantifiable assurances that the software source code can perform as expected within specific statistical thresholds of security and reliability. This is possible primarily because Gini's systems and architecture are created with the Ngôn ngữ lập trình Haskell, trong đó có nhiều lợi ích kỹ thuật độc đáo. Đây là lý do tại sao Haskell được NASA, Lockheed Martin, Boeing và nhiều công ty hàng không vũ trụ và quốc phòng khác sử dụng để xây dựng các hệ thống an toàn và an toàn cho máy bay, vệ tinh, tàu con thoi và các hệ thống quan trọng khác phải thực hiện ở cấp độ đặc biệt an toàn, bảo mật và độ tin cậy.
Mã Gini có độ tin cậy cao. Since the core Gini components (Gini Settlement Layer and Gini Computation Layer) are produced with Haskell, which is classified as a "chức năng programming language," Gini's software source code is up to 80% more time- and cost-efficient than it would be if we used other mệnh lệnh (còn gọi là thủ tục hoặc là hướng đối tượng) các ngôn ngữ như C ++, C #, Java và hầu hết các ngôn ngữ khác. Haskell giảm đáng kể số lượng lỗi và lỗ hổng bảo mật trong suốt vòng đời của chương trình phần mềm. Haskell cũng dẫn đến mã thanh lịch và dễ bảo trì hơn nhiều, điều này dẫn đến các hệ thống đáng tin cậy và hiệu quả hơn về mặt chi phí. (Dưới đây là một số tổng quan kỹ thuật tốt từ Microsoft và Cộng đồng Quora về lợi ích của các ngôn ngữ lập trình chức năng.)
Một vài gạch đầu dòng kỹ thuật về Haskell:
Haskell is a "functional programming language," có nghĩa là hầu như mọi thứ trong Haskell đều dựa trên định nghĩa hàm. Điều này làm cho mã có tổ chức và dễ đọc hơn và buộc người viết mã phải suy nghĩ về việc giải quyết các vấn đề một cách sâu sắc và trực quan hơn, thay vì cung cấp cho máy tính một chuỗi dài các lệnh tẻ nhạt, giải mã để thực hiện cùng một hành vi. Điều đó cũng có nghĩa là mã hóa trong Haskell tập trung vào việc mô tả dữ liệu / chức năng nào là nhiều hơn những gì họ nên làm. Điều này có nhiều ý nghĩa thú vị và có ý nghĩa đối với mọi khía cạnh của quy trình mã hóa.
Everything in Haskell is "immutable," có nghĩa là: Khi một giá trị được đặt cho một biến, hằng hoặc hàm đã cho, giá trị đó được đặt mãi mãi (hoặc miễn là chương trình đang chạy). Tính không thay đổi là thứ ngăn chặn nhiều lỗi vì nó ngăn ngừa các biến và các chức năng được thay đổi trong một số phạm vi cục bộ từ việc tạo ra các tác dụng phụ không mong muốn / không mong muốn trên toàn cầu trong các chức năng khác phụ thuộc vào cùng một biến / chức năng trong suốt chương trình.
In fact, Haskell technically doesn't have "variables"; it has "constants" (values) and "functions" (which are also treated as values) that never change. The only way to update a constant/function in Haskell is to define a new constant/function. However, the scope of a constant matters. For example, a constant declared at the global level can be khai báo lại như một giá trị khác trong một hàm khác xử lý các hoạt động I / O, nhưng giá trị mới đó chỉ có tồn tại trong phạm vi địa phương của chức năng I / O đó. Nó không thay đổi giá trị của hằng số ở phạm vi toàn cầu hoặc trong phạm vi cục bộ của bất kỳ chức năng nào khác.
Tính không thay đổi giúp tái cấu trúc mã Haskell thực sự nhanh chóng và hiệu quả because there's no possibility for unexpected gotchas (i.e., side-effects and state changes) that might cause a program to crash or create unexpected security vulnerabilities. In Haskell, the value of functions, variables, and constants can't be changed during run-time after they've already been declared, which simplifies source code analysis during the refactoring process. This eliminates one of the most tedious parts of refactoring and optimizing code: function performance profiling. Thus, it's much easier to maintain, update, and continuously improve all our Haskell-based Gini systems over time.
Haskell có tính minh bạch tham chiếu, có nghĩa là các hàm trong biểu thức Haskell và các giá trị đầu ra của chúng có thể được sử dụng thay thế cho nhau mà không thay đổi hành vi của chương trình. Điều này có liên quan đến tính bất biến, nhưng tính minh bạch tham chiếu đề cập đến thực tế là các hàm sẽ luôn tạo ra cùng một kết quả với cùng một đầu vào, đây là một thuộc tính rất hữu ích khi nói đến gỡ lỗi, kiểm toán bảo mật, song song hóa, đồng thời và tối ưu hóa mã. Đây là lý do tại sao Haskell thường thực hiện đặc biệt tốt trong các ứng dụng mạng đồng thời, khối lượng lớn, thông lượng cao. Ngược lại, các hàm trong các ngôn ngữ mệnh lệnh thường phụ thuộc vào trạng thái của các hàm và biến khác, chúng có thể thay đổi bất cứ lúc nào tùy thuộc vào trạng thái của các thành phần khác của chương trình. Điều này tạo ra nhiều rủi ro và sự không chắc chắn khiến cho việc đảm bảo tính bảo mật và tính toàn vẹn của các chương trình được viết bằng các ngôn ngữ phi chức năng trở nên khó khăn hơn nhiều.
In Haskell, we say "functions are first-class citizens." Điều này có nghĩa là các hàm có thể được truyền dưới dạng tham số / đối số cho các hàm khác giống như bất kỳ biến hoặc giá trị nào khác. Điều này mở ra một lượng lớn khả năng sáng tạo để viết mã sạch, hiệu quả, đáng tin cậy và thanh lịch, mà các ngôn ngữ phi chức năng không thể sao chép.
Suy luận kiểu chữ thông minh & Phát hiện lỗi thời gian biên dịch. Haskell được coi là có hệ thống kiểu chữ thông minh nhất của bất kỳ ngôn ngữ lập trình nào. Điều này có nghĩa là các loại dữ liệu (ví dụ: chuỗi, số nguyên, booleans, danh sách và nhiều loại khác) được tự động và chính xác detected by Haskell's type system and intelligently inferred from how the functions interact with the values that are passed between functions. For this reason, many computer scientists say, "In Haskell, if it compiles, it's correct." This may seem like a boring, arcane concept, but it's actually one of the most significant reasons why programs built with Haskell are so reliable and secure.
In fact, typeclass errors and associated bugs frequently cause software programs to crash when they're written in other languages because the compilers and interpreters for those other languages often allow disparate data types to interact with one another, which can cause unexpected results. For example, if a function passes a string type (e.g., "four") to another function, but the receiving function is expecting an integer type (e.g., 4), the receiving function will choke because it doesn't know what "four" actually means. This type of scenario causes many programs to crash, but Haskell completely prevents these crashes by catching type errors or intelligently inferring typeclass membership for a given value before a program is even deployed to a live environment.
Đệ quy được sử dụng thường xuyên. Điều này tạo ra các hàm mạnh hơn và hiệu quả hơn với ít mã hơn, nhưng các hàm đệ quy lồng nhau có thể gây nhầm lẫn cho người mới của Haskell vì mã có xu hướng trừu tượng hơn mã trong các ngôn ngữ mệnh lệnh.
Code abstraction is a byproduct of Haskell's extremely intelligent compiler. Trình biên dịch Haskell thu hút nhiều hành động và các yếu tố theo ngữ cảnh làm giảm tổng số mã cần thiết để tạo ra một hành vi chương trình nhất định tới 70% (hoặc thậm chí nhiều hơn nếu thành phần chức năng is used). This is one of the primary reasons why the Haskell-based Web server ("Warp") can be written trong ít hơn 1.000 dòng mã trong khi Máy chủ web Apache đòi hỏi về 1,5 triệu dòng mã. Và Warp nhanh hơn 100 lần so với Apache và ít bị tổn thương hơn trước nhiều lỗi và hack bảo mật. (Tất nhiên, tất cả các điểm chuẩn phụ thuộc vào cách mỗi hệ thống được định cấu hình, nhưng về tổng thể, Warp's per-CPU HTTP request processing is at least two orders of magnitude faster than a similarly powered server running Apache without any load-balancing and caching techniques.)
Haskell has no "for" or "while" loops or "variables" theo cách hiểu thông thường, nhưng nó có các hằng số và đệ quy rất mạnh và các tính năng khớp mẫu. Chúng thay thế cho các vòng lặp for / while và các biến có thể thay đổi. Trong thực tế, đệ quy và khớp mẫu là các công cụ hiệu quả hơn nhiều để thực hiện các nhiệm vụ tương tự, đó là lý do tại sao ngôn ngữ lập trình Haskell không bao gồm các vòng lặp for / while.
Haskell là lười biếng. Being lazy is not always a virtue, but in this case, it means that Haskell always consumes the least amount of resources (CPU, memory, and thus, electricity) possible. Specifically, Haskell doesn't force a computer to execute more CPU cycles or consume more memory than is needed at the moment of each function's execution. For example, in Haskell we can define an infinite list of data objects at any time, but a Haskell program will not traverse the entire list because that would quickly consume all system resources and cause it to crash. Instead, a Haskell function will only traverse an infinite list until it finds the value it's looking for based on the efficient pattern-matching functions that Haskell provides. (See note 4 for a special exception to Haskell's laziness.)
Tóm tắt: Haskell's approach to system resource management and its intelligent typeclass system alone eliminate many (50-70%) of all the bugs and security vulnerabilities that typically plague code written in other programming languages. Haskell's virtuous lazy processing prevents many stack and heap buffer overflows and corresponding system crashes caused by unintended infinite loops, which are often caused by poorly designed code in non-functional programming languages. Haskell's succinct syntax and well-organized functional design philosophy enforce good coding habits, which also eliminates many bugs.
Haskell provides many other benefits, but the benefits listed above are several of the most significant reasons why we chose to build Gini's systems with Haskell. To learn a lot more about Haskell, visit the Trang ngôn ngữ Haskell.
Ghi chú:
1. Some of Gini's early prototypes and test systems are built with Java, C++, and Python, but those are just for our R&D and proof-of-concept systems. The 1.0+ versions of all Gini systems will always be built with Haskell (for PC-based systems) and standard Web-based languages (e.g., browser-agnostic Javascript, HTML, and CSS delivered on the Haskell-based Yesod/Warp Web framework) for all Web-based Gini systems. Mobile apps for Gini are built in Haskell and cross-compiled into each mobile platform's native language (e.g., Objective-C for iOS and Java for Android).
2. Some open source software libraries that are integrated into Gini's systems (including certain well-known cryptography packages like the Blake2 chức năng băm và Argon2 hàm dẫn xuất chính) được viết bằng C, C ++ và Java và đôi khi chúng ta cần xây dựng giao diện giữa chúng và các thành phần Haskell của chúng ta. Tuy nhiên, chúng tôi cố gắng sử dụng Haskell cho càng nhiều thành phần Gini càng tốt; và theo thời gian, chúng tôi sẽ thay thế các thư viện nguồn mở không phải Haskell bằng các thư viện nguồn mở dựa trên Haskell và / hoặc các thành phần dựa trên Haskell của chúng tôi bất cứ khi nào chúng tôi tin rằng nó sẽ làm cho hệ thống của chúng tôi an toàn và đáng tin cậy hơn.
3. Tất cả phần mềm Gini sẽ được phát hành cho cộng đồng nguồn mở sau khi chúng tôi chính thức ra mắt Khối Gini và Trao đổi phi tập trung Gini cho công chúng nói chung.
4. Có hai trường hợp ngoại lệ đối với tính năng lười biếng trong Haskell: Strict Bytestrings và Lazy Bytestrings. Bytestrings nghiêm ngặt biểu thị dữ liệu dưới dạng khối dữ liệu 8 bit (1 byte) không lười biếng, but they're used in special cases where large data files must be processed more efficiently than the typical lazy processing. In contrast, Lazy Bytestrings represent data as 64K-byte data chunks, the first of which is processed immediately like Strict Bytestrings, but all subsequent 64K-byte data chunks within a given file (or data stream) are processed lazily, i.e., processing is deferred until the data is actually needed for a given function.
Did You Like This Resource?
Gini is doing important work that no other organization is willing or able to do. Please support us by joining the Gini Newsletter below to be alerted about important Gini news and events and follow Gini trên Twitter.