Здравствуйте, eskimo82, Вы писали:
m2l>>У-у как грубо... Навскидку: извраты с setjmp/longjmp не позволят вызвать деструкторы, необходимые для сохранения RAII при выходе из областей видимости внутри try...
m2l>>Так что за синтаксический сахар в С++ они не засчитываются.
E>Возможность атоматически вызывать деструкторы при выходе за scope является другим сахаром.
...прыгали, бегали и стояли на ушах...
Но написать код демонстрирующий, что try/catch это синтаксический сахар — ты не можешь
C>>>Исключения в С++ — это фундаментальная фича, которая не может быть реализована без поддержки компилятора и рантайма. Go check — это просто сахар.
E>>Исключения могут быть реализованы даже на Си, все остальное — это удобный сахар от компилятора и рантайма
C>Исключения не могут быть реализованы в С++ остальными средствами языка. Поэтому они не являются сахаром, в отличие от check/handle.
Ты неоднократно заливал мне что
делал это самоличноАвтор: CreatorCray
Дата: 27.11.18
подменяя стандартный рантайм.
Здравствуйте, eskimo82, Вы писали:
E>Ты неоднократно заливал мне что делал это самоличноАвтор: CreatorCray
Дата: 27.11.18
подменяя стандартный рантайм.
Ну так, значит, несложно показать, как именно сделать исключения средствами С++.
E>>Ты неоднократно заливал мне что делал это самоличноАвтор: CreatorCray
Дата: 27.11.18
подменяя стандартный рантайм.
C>Ну так, значит, несложно показать, как именно сделать исключения средствами С++.
По ссылке выше чуть далее все расписано.
Здравствуйте, eskimo82, Вы писали:
E>>>Ты неоднократно заливал мне что делал это самоличноАвтор: CreatorCray
Дата: 27.11.18
подменяя стандартный рантайм.
C>>Ну так, значит, несложно показать, как именно сделать исключения средствами С++.
E>По ссылке выше чуть далее все расписано.
Ты ж даже не понял что там написано. Впрочем я не удивлён.
Там не про "сделать исключения средствами С++" а про "написать support routines для поддержки обработки исключений на платформе, для которой не было уже готового runtime"
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
E>>По ссылке выше чуть далее все расписано.
CC>Ты ж даже не понял что там написано. Впрочем я не удивлён.
Еще бы ты не был бы удивлен. Попробуй наконец научится читать.
CC>Там не про "сделать исключения средствами С++" а про "написать support routines для поддержки обработки исключений на платформе, для которой не было уже готового runtime"
Не все ли равно откуда они будут дергаться — из хвостиков try/catch/throw или напрямую. Особой разницы нет.
Здравствуйте, eskimo82, Вы писали:
E>Не все ли равно откуда они будут дергаться — из хвостиков try/catch/throw или напрямую. Особой разницы нет.
Там принципиальная разница: реализация runtime library хелперов никак не поможет если компилятор не построит таблиц для вызова деструкторов для всех фреймов — ты просто не будешь знать что вызывать.
Можно конечно реализовать это всё врукопашную, вместо компилятора, но ты просто умрёшь уставшим, банально от объёма boilerplates.
Уж проще будет положить на исключения болт и писать в стиле error = Foo (...); if (error) ...
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Здравствуйте, 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")
}
E>>Не все ли равно откуда они будут дергаться — из хвостиков try/catch/throw или напрямую. Особой разницы нет.
CC>Там принципиальная разница: реализация runtime library хелперов никак не поможет если компилятор не построит таблиц для вызова деструкторов для всех фреймов — ты просто не будешь знать что вызывать.
Это все тот же сахар, причем как побочный эффект от контроля времени жизни в scope. Кстати этот контроль вполне реализуем автоматически на Си в некоторых компиляторах.
CC>Можно конечно реализовать это всё врукопашную, вместо компилятора, но ты просто умрёшь уставшим, банально от объёма boilerplates.
Это спокойно реализовывается на чистом Си, проблема действительно в том, что можно посинеть при написании прикладного кода, но ограничений в принципе никаких нет.
CC>Уж проще будет положить на исключения болт и писать в стиле error = Foo (...); if (error) ...