13 ноября вышла долгожданная версия Solidity, то есть 0.5.0. В этот выпуск было решено внести много изменений. В этом выпуске есть отличный журнал изменений, который делает язык более сильным, зрелым и полезным для безопасной разработки.

Фонд Ethereum постоянно пытается обновить язык Solidity таким образом, чтобы разработка была менее подвержена ошибкам и была более надежной. В этом выпуске запрещены некоторые устаревшие функции и сделан упор на четкое указание предполагаемой функциональности кода и переменных. Я перечисляю здесь некоторые обновления вместе с некоторыми фрагментами кода.

Явное объявление

  • Добавьте public к каждой функции и external к каждой резервной или интерфейсной функции, для которой еще не указана ее видимость.
function() external { x = 1; } // Fallback
  • Явно укажите расположение данных для всех переменных типа структуры, массива или сопоставления (включая параметры функции)
// Function parameters along with data locations
function reveal(
        uint[] memory _values,
        bool[] memory _fake,
        bytes32[] memory _secret
    )
  • И один очень интересный: объявляйте переменные и особенно аргументы функций как address payable, если вы хотите вызвать transfer для них.
address payable public beneficiary; // If you want to transfer funds 
uint public auctionEndTime;

Запретить

  • Запретить объявление пустых структур.
  • Запретить необработанные callcode, var ключевое слово, sha3 и suicide псевдонимы, throw оператор, years номинал единицы (из-за сложностей и путаницы с високосными годами) и унарный +.
  • Запретить пустые операторы возврата для функций с одним или несколькими возвращаемыми значениями.
  • Запретить msg.value в (или ввести его с помощью модификатора) в функцию, не подлежащую оплате
  • Запретить нулевую длину для массивов фиксированного размера.

Разрешать

  • Поддержка pop() для массивов хранения и bytes (не string) для удаления элемента с конца массива.
pragma solidity ^0.5.0;
contract Array{
    uint256[] public arr;
    
    function insert(uint256 element) public {
        arr.push(element);
    }
    
    function removeOne() public {
        arr.pop();
    }
}
  • Разрешить enums и structs в интерфейсах.
interface Token {
    enum TokenType { Fungible, NonFungible }
    struct Coin { string obverse; string reverse; }
    function transfer(address recipient, uint amount) external;
}
  • Разрешить mapping указатели хранения в качестве аргументов и возвращаемых значений во всех внутренних функциях.

В этом выпуске также исправлены некоторые ошибки. В этой версии есть отличный набор изменений. Вы можете просмотреть полный список изменений здесь. (Обязательно для разработчиков)

После этого выпуска надежное кодирование и синтаксический анализ будут улучшены по мере того, как язык стал более богатым 😬

Удачного умного кодирования всем разработчикам!

Спасибо за прочтение.

EDIT1: Solidity v0.5.1 был выпущен с некоторыми исправлениями ошибок и следующей языковой функцией:

  • Разрешить тип сопоставления для параметров и возвращаемых переменных публичных и внешних библиотечных функций.
  • Разрешить общедоступным функциям переопределять внешние функции.

См. Полный список изменений здесь.

Получайте лучшие предложения по программному обеспечению прямо в свой почтовый ящик