Грядет Go++ ?
От: eskimo82  
Дата: 08.12.18 04:34
Оценка:
Красноглазые пионеры прыгали, бегали и стояли на ушах с этим Go, затем прошли "грабли" точно такие же как и в случае с Си, и в итоге приходят к аналогичным С++ концепциям.
Кто бы мог подумать

https://go.googlesource.com/proposal/+/master/design/go2draft-error-handling-overview.md
Re: Грядет Go++ ?
От: GarryIV  
Дата: 08.12.18 05:10
Оценка:
Здравствуйте, eskimo82, Вы писали:

E>Красноглазые пионеры прыгали, бегали и стояли на ушах с этим Go, затем прошли "грабли" точно такие же как и в случае с Си, и в итоге приходят к аналогичным С++ концепциям.

E>Кто бы мог подумать

E>https://go.googlesource.com/proposal/+/master/design/go2draft-error-handling-overview.md


Не знаю какого цвета у тебя глаза и на чем ты стоишь но на C++ это не похоже. Просто сахар для проверок. Эти check/handle по сути тот же if но специализированный.
WBR, Igor Evgrafov
Re: Грядет Go++ ?
От: Cyberax Марс  
Дата: 08.12.18 06:32
Оценка:
Здравствуйте, eskimo82, Вы писали:

E>Красноглазые пионеры прыгали, бегали и стояли на ушах с этим Go, затем прошли "грабли" точно такие же как и в случае с Си, и в итоге приходят к аналогичным С++ концепциям.

Неверно. Это С++ становится Go: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0709r0.pdf
Sapienti sat!
Re[2]: Грядет Go++ ?
От: eskimo82  
Дата: 08.12.18 12:22
Оценка:
GIV>Не знаю какого цвета у тебя глаза и на чем ты стоишь но на C++ это не похоже. Просто сахар для проверок. Эти check/handle по сути тот же if но специализированный.
Да ну. Ты и в правду сравниваеш концепции только по отличиям синтаксиса ?

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

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


void fun() {
    try {
        hex = ReadAll(stdin);
        data = parseHexDump(string(hex));
        cout << data << endl;
    }
    catch(error& e) {
        cerr << "fatal " << e.what() << endl;
    }
}
Re[2]: Грядет Go++ ?
От: eskimo82  
Дата: 08.12.18 12:26
Оценка: -3
C>Неверно. Это С++ становится Go: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0709r0.pdf
Ну микрософты за всю свою историю еще ничего продуманого не предлагали и не делали, одни только костыли для костылей.
Re[3]: Грядет Go++ ?
От: Слава  
Дата: 08.12.18 15:31
Оценка: +1 :)
Здравствуйте, eskimo82, Вы писали:

C>>Неверно. Это С++ становится Go: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0709r0.pdf

E>Ну микрософты за всю свою историю еще ничего продуманого не предлагали и не делали, одни только костыли для костылей.

Напоминаю про существование Microsoft Research и haskell. А также про огромнейший зоопарк железа, где винда работает и не требует настройки. В отличие от.
Re[4]: Грядет Go++ ?
От: σ  
Дата: 08.12.18 17:17
Оценка:
C>>>Неверно. Это С++ становится Go: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0709r0.pdf
E>>Ну микрософты за всю свою историю еще ничего продуманого не предлагали и не делали, одни только костыли для костылей.

С>А также про огромнейший зоопарк железа, где винда работает и не требует настройки.


Всё это железо сковали в Майкрософт и написали к нему драйвера?
Re[5]: Грядет Go++ ?
От: Слава  
Дата: 08.12.18 18:53
Оценка: +2
Здравствуйте, σ, Вы писали:

σ>Всё это железо сковали в Майкрософт и написали к нему драйвера?


Кривое железо и кривенькие драйвера сковали не в MS. А винда тем не менее на всём этом работала.

PS: Железо у MS, мыши и клавиатуры всегда были наивысшего качества.
Re[3]: Грядет Go++ ?
От: m2l  
Дата: 08.12.18 20:11
Оценка:
Здравствуйте, eskimo82, Вы писали:

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

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

А теперь убери из кода на go check — что изменилось?
Или сделай несколько вложенных вызовов — как далеко исключение прокинется в примере на go?

check/handle это синтаксический сахар кодов ошибок, исключения — немного другая штука.

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

Re[4]: Грядет Go++ ?
От: eskimo82  
Дата: 09.12.18 00:24
Оценка:
m2l>А теперь убери из кода на go check — что изменилось?
Зачем ? Я могу и try/catch из C++ кода убрать, только это будет уже совсем другое.

check/handle это синтаксический сахар кодов ошибок

try/catch — это синтаксический сахар исключений... Нет ?
Отредактировано 09.12.2018 0:26 eskimo82 . Предыдущая версия .
Re[5]: Грядет Go++ ?
От: σ  
Дата: 09.12.18 02:39
Оценка: -1
E>

check/handle это синтаксический сахар кодов ошибок

E>try/catch — это синтаксический сахар исключений... Нет ?
Нет.
Re[5]: Грядет Go++ ?
От: Cyberax Марс  
Дата: 09.12.18 06:28
Оценка:
Здравствуйте, eskimo82, Вы писали:

m2l>>А теперь убери из кода на go check — что изменилось?

E>Зачем ? Я могу и try/catch из C++ кода убрать, только это будет уже совсем другое.
Нет. В Go это просто синтаксический сахар для if err ! = nil { return err; }. Причём обратно совместимый.

E>try/catch — это синтаксический сахар исключений... Нет ?

Исключения в С++ — это фундаментальная фича, которая не может быть реализована без поддержки компилятора и рантайма. Go check — это просто сахар.
Sapienti sat!
Re[5]: Грядет Go++ ?
От: m2l  
Дата: 09.12.18 09:12
Оценка: -1
Здравствуйте, eskimo82, Вы писали:

E>try/catch — это синтаксический сахар исключений... Нет ?


Ликбез. Синтаксический сахар — альтернативный способ записи уже имеющейся в языке синтаксической конструкции (более краткий, удобный, и т.д.)
То, что handle/check синтаксический сахар в go тебе продемонстрировали сообщением выше, приведя эквивалентный код без них.

Покажи нам, пожалуйста, для каких конструкций C++ является синтаксическим сахаром try/catch?
Re[6]: Грядет Go++ ?
От: eskimo82  
Дата: 09.12.18 18:49
Оценка:
E>>try/catch — это синтаксический сахар исключений... Нет ?
C>Исключения в С++ — это фундаментальная фича, которая не может быть реализована без поддержки компилятора и рантайма. Go check — это просто сахар.
Исключения могут быть реализованы даже на Си, все остальное — это удобный сахар от компилятора и рантайма
Re[6]: Грядет Go++ ?
От: eskimo82  
Дата: 09.12.18 18:56
Оценка: -1
E>>try/catch — это синтаксический сахар исключений... Нет ?
σ>Нет.
Тем не менее — да.
Re[6]: Грядет Go++ ?
От: eskimo82  
Дата: 09.12.18 19:06
Оценка: -2
m2l>Ликбез. Синтаксический сахар — альтернативный способ записи уже имеющейся в языке синтаксической конструкции (более краткий, удобный, и т.д.)
m2l>То, что handle/check синтаксический сахар в go тебе продемонстрировали сообщением выше, приведя эквивалентный код без них.

m2l>Покажи нам, пожалуйста, для каких конструкций C++ является синтаксическим сахаром try/catch?

Ликбез: Например для sjlj (setjmp/longjmp)
Re[7]: Грядет Go++ ?
От: m2l  
Дата: 09.12.18 21:27
Оценка: +1 -1
Здравствуйте, eskimo82, Вы писали:

m2l>>Покажи нам, пожалуйста, для каких конструкций C++ является синтаксическим сахаром try/catch?

E>Ликбез: Например для sjlj (setjmp/longjmp)

У-у как грубо... Навскидку: извраты с setjmp/longjmp не позволят вызвать деструкторы, необходимые для сохранения RAII при выходе из областей видимости внутри try...
Так что за синтаксический сахар в С++ они не засчитываются.
Re: Грядет Go++ ?
От: m2l  
Дата: 09.12.18 21:30
Оценка: -1 :)
Здравствуйте, eskimo82, Вы писали:

E>Красноглазые пионеры прыгали, бегали и стояли на ушах с этим Go, затем прошли "грабли" точно такие же как и в случае с Си, и в итоге приходят к аналогичным С++ концепциям.

Да! С++ божественный язык, грабель нет, концепции идеальны!

В go до исключений правда ещё на доросли (см. выше) — но так ему и не 35 лет ещё, со временем может и дойдут.
Re[8]: Грядет Go++ ?
От: eskimo82  
Дата: 09.12.18 22:56
Оценка: -1 :))
m2l>У-у как грубо... Навскидку: извраты с setjmp/longjmp не позволят вызвать деструкторы, необходимые для сохранения RAII при выходе из областей видимости внутри try...
m2l>Так что за синтаксический сахар в С++ они не засчитываются.
Возможность атоматически вызывать деструкторы при выходе за scope является другим сахаром.
Re[7]: Грядет Go++ ?
От: Cyberax Марс  
Дата: 10.12.18 03:09
Оценка: +2 -1 :)
Здравствуйте, eskimo82, Вы писали:

C>>Исключения в С++ — это фундаментальная фича, которая не может быть реализована без поддержки компилятора и рантайма. Go check — это просто сахар.

E>Исключения могут быть реализованы даже на Си, все остальное — это удобный сахар от компилятора и рантайма
Исключения не могут быть реализованы в С++ остальными средствами языка. Поэтому они не являются сахаром, в отличие от check/handle.
Sapienti sat!
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...
Пока на собственное сообщение не было ответов, его можно удалить.