title: Why required and optional is removed in Protocol Buffers 3
body: <p>I'm recently using <code>gRPC</code> with <code>proto3</code>, and I've noticed that <code>required</code> and <code>optional</code> has been removed in new syntax.</p>
  
  <p>Would anyone kindly explain why required/optional are removed in proto3? Such kind of constraints just seem necessary to make definition robust.</p>
  
  <p>syntax proto2:</p>
  
  <pre><code>message SearchRequest {
    required string query = 1;
    optional int32 page_number = 2;
    optional int32 result_per_page = 3;
  }
  </code></pre>
  
  <p>syntax proto3:</p>
  
  <pre><code>syntax = "proto3";
  message SearchRequest {
    string query = 1;
    int32 page_number = 2;
    int32 result_per_page = 3;
  }
  </code></pre>