Re[9]: Грядет Go++ ?
От: m2l  
Дата: 10.12.18 06:48
Оценка: -1
Здравствуйте, eskimo82, Вы писали:

m2l>>У-у как грубо... Навскидку: извраты с setjmp/longjmp не позволят вызвать деструкторы, необходимые для сохранения RAII при выходе из областей видимости внутри try...

m2l>>Так что за синтаксический сахар в С++ они не засчитываются.
E>Возможность атоматически вызывать деструкторы при выходе за scope является другим сахаром.

...прыгали, бегали и стояли на ушах...

Но написать код демонстрирующий, что try/catch это синтаксический сахар — ты не можешь
Re[8]: Грядет Go++ ?
От: eskimo82  
Дата: 10.12.18 12:47
Оценка: -1 :)
C>>>Исключения в С++ — это фундаментальная фича, которая не может быть реализована без поддержки компилятора и рантайма. Go check — это просто сахар.
E>>Исключения могут быть реализованы даже на Си, все остальное — это удобный сахар от компилятора и рантайма
C>Исключения не могут быть реализованы в С++ остальными средствами языка. Поэтому они не являются сахаром, в отличие от check/handle.
Ты неоднократно заливал мне что делал это самолично
Автор: CreatorCray
Дата: 27.11.18
подменяя стандартный рантайм.
Re[9]: Грядет Go++ ?
От: Cyberax Марс  
Дата: 10.12.18 19:50
Оценка: -1
Здравствуйте, eskimo82, Вы писали:

E>Ты неоднократно заливал мне что делал это самолично
Автор: CreatorCray
Дата: 27.11.18
подменяя стандартный рантайм.

Ну так, значит, несложно показать, как именно сделать исключения средствами С++.
Sapienti sat!
Re[10]: Грядет Go++ ?
От: eskimo82  
Дата: 10.12.18 20:08
Оценка: -1 :)
E>>Ты неоднократно заливал мне что делал это самолично
Автор: CreatorCray
Дата: 27.11.18
подменяя стандартный рантайм.

C>Ну так, значит, несложно показать, как именно сделать исключения средствами С++.
По ссылке выше чуть далее все расписано.
Re[11]: Грядет Go++ ?
От: CreatorCray  
Дата: 10.12.18 20:16
Оценка: -1 :)
Здравствуйте, eskimo82, Вы писали:

E>>>Ты неоднократно заливал мне что делал это самолично
Автор: CreatorCray
Дата: 27.11.18
подменяя стандартный рантайм.

C>>Ну так, значит, несложно показать, как именно сделать исключения средствами С++.
E>По ссылке выше чуть далее все расписано.
Ты ж даже не понял что там написано. Впрочем я не удивлён.
Там не про "сделать исключения средствами С++" а про "написать support routines для поддержки обработки исключений на платформе, для которой не было уже готового runtime"
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[12]: Грядет Go++ ?
От: eskimo82  
Дата: 10.12.18 20:24
Оценка:
E>>По ссылке выше чуть далее все расписано.
CC>Ты ж даже не понял что там написано. Впрочем я не удивлён.
Еще бы ты не был бы удивлен. Попробуй наконец научится читать.

CC>Там не про "сделать исключения средствами С++" а про "написать support routines для поддержки обработки исключений на платформе, для которой не было уже готового runtime"

Не все ли равно откуда они будут дергаться — из хвостиков try/catch/throw или напрямую. Особой разницы нет.
Re[13]: Грядет Go++ ?
От: CreatorCray  
Дата: 10.12.18 20:57
Оценка: +2 -1
Здравствуйте, eskimo82, Вы писали:

E>Не все ли равно откуда они будут дергаться — из хвостиков try/catch/throw или напрямую. Особой разницы нет.

Там принципиальная разница: реализация runtime library хелперов никак не поможет если компилятор не построит таблиц для вызова деструкторов для всех фреймов — ты просто не будешь знать что вызывать.
Можно конечно реализовать это всё врукопашную, вместо компилятора, но ты просто умрёшь уставшим, банально от объёма boilerplates.

Уж проще будет положить на исключения болт и писать в стиле error = Foo (...); if (error) ...
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[3]: Грядет Go++ ?
От: Cyberax Марс  
Дата: 10.12.18 21:20
Оценка:
Здравствуйте, eskimo82, Вы писали:

GIV>>Не знаю какого цвета у тебя глаза и на чем ты стоишь но на C++ это не похоже. Просто сахар для проверок. Эти check/handle по сути тот же if но специализированный.

E>Да ну. Ты и в правду сравниваеш концепции только по отличиям синтаксиса ?
Концепции совершенно разные.

E>
E>func main() {
E>    handle err {
E>        log.Fatal(err)
E>    }

E>    hex := check ioutil.ReadAll(os.Stdin)
E>    data := check parseHexdump(string(hex))
E>    os.Stdout.Write(data)
E>}
E>

Это всего лишь сахар для:
func main() {
    hex, err := check ioutil.ReadAll(os.Stdin)
        if err != nil { log.Fatal(err); return; }
    data, err := check parseHexdump(string(hex))
        if err != nil { log.Fatal(err); return; }
    os.Stdout.Write(data)
}
[code]

Боле того, исключения в Go есть - они называются "паниками" и работают как в C++.
[code]
func main() {
   defer func() {
      err := recover()
      if err != nil {
          println("Catching exception", err)
      }
   }()

   panic("Exception")
}
Sapienti sat!
Re[4]: Грядет Go++ ?
От: ononim  
Дата: 11.12.18 19:47
Оценка:
ну значит не С++, а QBasic
Как много веселых ребят, и все делают велосипед...
Re[14]: Грядет Go++ ?
От: eskimo82  
Дата: 12.12.18 22:34
Оценка:
E>>Не все ли равно откуда они будут дергаться — из хвостиков try/catch/throw или напрямую. Особой разницы нет.
CC>Там принципиальная разница: реализация runtime library хелперов никак не поможет если компилятор не построит таблиц для вызова деструкторов для всех фреймов — ты просто не будешь знать что вызывать.
Это все тот же сахар, причем как побочный эффект от контроля времени жизни в scope. Кстати этот контроль вполне реализуем автоматически на Си в некоторых компиляторах.

CC>Можно конечно реализовать это всё врукопашную, вместо компилятора, но ты просто умрёшь уставшим, банально от объёма boilerplates.

Это спокойно реализовывается на чистом Си, проблема действительно в том, что можно посинеть при написании прикладного кода, но ограничений в принципе никаких нет.

CC>Уж проще будет положить на исключения болт и писать в стиле error = Foo (...); if (error) ...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.