Ответ 1
Возможно, я ошибаюсь, но разница не только семантически, но и в поведении. С помощью @push вы добавляете столько раз, сколько необходимо для стека, тогда как (по умолчанию) вы можете заполнить @section только один раз в своих представлениях. В некоторых ситуациях это пригодится, когда вам нужно добавлять контент из разных мест в файлы шаблонов или в циклы:
index.blade.php:
@extends('master')
...
@for ($i = 0; $i < 3; $i++)
@push('test-push')
<script type="text/javascript">
// Push {{ $i }}
</script>
@endpush
@section('test-section')
<script type="text/javascript">
// Section {{ $i }}
</script>
@endsection
@endfor
master.blade.php
@stack('test-push')
@yield('test-section')
</body>
результат:
<script type="text/javascript">
// Push 0
</script>
<script type="text/javascript">
// Push 1
</script>
<script type="text/javascript">
// Push 2
</script>
<script type="text/javascript">
// Section 0
</script>
</body>