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(); } }
- Разрешить
enum
s иstruct
s в интерфейсах.
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 был выпущен с некоторыми исправлениями ошибок и следующей языковой функцией:
- Разрешить тип сопоставления для параметров и возвращаемых переменных публичных и внешних библиотечных функций.
- Разрешить общедоступным функциям переопределять внешние функции.
См. Полный список изменений здесь.
Получайте лучшие предложения по программному обеспечению прямо в свой почтовый ящик