The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Бета-выпуск языка программирования Rust 1.0, opennews (??), 04-Апр-15, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


30. "Бета-выпуск языка программирования Rust 1.0"  +7 +/
Сообщение от Аноним (-), 04-Апр-15, 15:39 
Ну давай разберем по порядку тобой написанное.
> Им видите-ли сложно offset по указателю посчитать, все время бедняжки за границу выходят.

Ошибки делают абсолютно все. Если ты думаешь, что ты их не делаешь, то у тебя проблемы. Это хорошо, когда язык защищает от части ошибок.
> А еще после того как покакают в штан^W в память, забывают подтеретьс^W очистить ее.

В С++ так не делают. См. RAII.
> Вот и нужна этим детям мамочк^W GC

В расте нет GC. Там используется тот же самый RAII.


Ответить | Правка | К родителю #26 | Наверх | Cообщить модератору

33. "Бета-выпуск языка программирования Rust 1.0"  –1 +/
Сообщение от Аноним (-), 04-Апр-15, 15:48 
> В С++ так не делают. См. RAII.

Т.е. в декструкторе не надо delete вызывать? А если я пишу на С++ без классов, но использую перегрузку функций (потому и С++, а не Си).

Ну и потом... если я создал объект класса динамически через "new", то кто за меня delete вызовет? Пушкин? Или может Google?

Ответить | Правка | Наверх | Cообщить модератору

35. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от XXasd (?), 04-Апр-15, 16:08 
Известно кто -- shared_ptr .. Если только нет циклических ссылок :-)
Ответить | Правка | Наверх | Cообщить модератору

36. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от Аноним (-), 04-Апр-15, 16:12 
> Т.е. в декструкторе не надо delete вызывать?

Нет. Деструкторы unique_ptr, shared_ptr, string и контейнеров уже написаны и сами вызовутся из деструктора твоего класса.
Иногда нужно освобождать какие-то другие ресурсы. Но один раз написать это в специально предназначенной для этого функции – это не то же самое, что писать delete по всему коду для каждого объекта. Вероятность ошибки сводится к минимуму, и найти такую ошибку проще.

> А если я пишу на С++ без классов, но использую перегрузку функций (потому и С++, а
> не Си).

Нельзя считать недостатком языка то, что ты по известным тебе одному причинам не пользуешься его возможностями. И нет, "С++ без классов" - это не С++.

> Ну и потом... если я создал объект класса динамически через "new", то
> кто за меня delete вызовет?

См. выше про unique_ptr, shared_ptr, string и контейнеры. Кроме того, начиная с С++14 ты _вообще_ не создаешь объекты через new, т.к. там появилась функция make_unique.

Ответить | Правка | К родителю #33 | Наверх | Cообщить модератору

38. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от Аноним (-), 04-Апр-15, 16:27 
> Нет. Деструкторы unique_ptr, shared_ptr, string и контейнеров уже написаны и сами вызовутся из деструктора твоего класса

Это всё шаблоны-обертки из boost`а (перекочевавшие в стандарт), в операторе присваивания которого просто счетчик указателей инкрементируется и декрементируется в деструкторе. Под капотом все тот же new/delete.

Ответить | Правка | Наверх | Cообщить модератору

40. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от Аноним (-), 04-Апр-15, 16:37 
Я знаю, лол. И что с того? Пользователям языка больше не нужно руками работать с памятью.
Ответить | Правка | Наверх | Cообщить модератору

44. "Бета-выпуск языка программирования Rust 1.0"  –1 +/
Сообщение от Аноним (-), 04-Апр-15, 17:11 
> Я знаю, лол. И что с того? Пользователям языка больше не нужно руками работать с памятью.

В С++ можно так писать что не нужно руками работать. Читать надо умные книги, эффективные техники программирования на С++ уже сто лет как известны нам, но похоже не вам.

Ответить | Правка | Наверх | Cообщить модератору

46. "Бета-выпуск языка программирования Rust 1.0"  –2 +/
Сообщение от Аноним (-), 04-Апр-15, 17:17 
o_O
Ответить | Правка | Наверх | Cообщить модератору

117. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от клоун (?), 06-Апр-15, 17:57 
Просвети.

Есть класс Геометрические фигуры, от него унаследованы классы Круг, Треугольник, Квадрат.

Создаём L1 из геометрических фигур.

Нужно:
1. реализовать единый метод Нарисовать() без хранения переменной типа геометрической фигуры внутри класса
2. реализовать корректное освобождение памяти при вызове delete

Ответить | Правка | К родителю #44 | Наверх | Cообщить модератору

119. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от iZEN (ok), 06-Апр-15, 19:35 
> Просвети.
> Есть класс Геометрические фигуры, от него унаследованы классы Круг, Треугольник, Квадрат.

Ещё для разнообразия: Точка, Окружность, Эллипс, Многоугольник.

Ответить | Правка | Наверх | Cообщить модератору

129. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от клоун (?), 06-Апр-15, 23:32 
Это не шутка. Меня в какое-то время надоело бодаться с ООП, которое якобы что-то там должно упрощать, но вместо этого задалбывает синтаксисом сильнее, чем облегчает работу. В итоге я вернулся к функциональному программированию с С++'овым синтаксисом.

Тут чувак корчит из себя эксперта, может он знает решение.

По факту получается, что невозможно реализовать Нарисовать() не храня тип фигуры. А хранение типа фигуры ставит крест на всяком наследовании, ибо нахрена козе баян и ручное жонглирование классами, когда можно тупо создать файл НарисоватьФигуру.cpp и запихать в него всё рисование, а в НарисоватьФигуру.h уйдут все макроопределения. В ООП то же самое будет разбросано (как после взрыва) по десятку файлов в каждом из которых по 2-5 строчек кода.

И зачем мне деструктор класса, если я должен сам хранить какого он типа и преобразовывать тип к правильному лишь чтобы вызвался правильный деструктор, когда я могу сразу запихать всё это в switch.

Хранить тип Строка в классе лишь чтобы не забыть в конце освободить память - я амнезией не страдаю. А там где страдаю (как в примере выше), там мне ООП ничем не помогает.

Как был код команда-условие-переход, таковым он и остался. А всякие MMX, лямбда-функции, квантовые вычисления, ООП (в большинстве случаев) и пр. - попытки поиграть в игру "сломай мозг" и не более того.

Ответить | Правка | Наверх | Cообщить модератору

131. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от ........................ (?), 07-Апр-15, 00:52 
> И зачем мне деструктор класса, если я должен сам хранить какого он
> типа и преобразовывать тип к правильному лишь чтобы вызвался правильный деструктор,
> когда я могу сразу запихать всё это в switch.

http://cpp-reference.ru/articles/virtual-destructor/

Ответить | Правка | Наверх | Cообщить модератору

137. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от клоун (?), 07-Апр-15, 11:51 
Когда речь о переменных, это работает, т.к. компилятор отслеживает человеческую глупость. Когда речь об L1 - нет, т.к. никакой дополнительной информации о типе класса при выделении памяти компилятор не добавляет и следовательно тип класса при удалении не знает.
Ответить | Правка | Наверх | Cообщить модератору

139. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от ........................ (?), 07-Апр-15, 15:14 
> никакой дополнительной информации о типе класса
> при выделении памяти компилятор не добавляет
> и следовательно тип класса при удалении не знает.

http://www.ycshao.com/?p=338

Effective C++ item 7: Declare destructors virtual in polymorphic base classes

Reference: “Effective C++” Third Edition by Scott Meyers.

Ответить | Правка | К родителю #137 | Наверх | Cообщить модератору

48. "Бета-выпуск языка программирования Rust 1.0"  +1 +/
Сообщение от Аноним (-), 04-Апр-15, 17:20 
Понимаешь в чем прелесть С++ - эти шаблоны опциональны и по сути своей реализации являются просто wrapper'ом надо new/delete. Хочешь - руками работай с памятью, не хочешь - юзай shared_ptr. Более того любой С++ программист знакомый с С++ больше года и знающий что можно перегружать operator=, легко сам такой shared_ptr напишет.
Ответить | Правка | К родителю #40 | Наверх | Cообщить модератору

55. "Бета-выпуск языка программирования Rust 1.0"  +1 +/
Сообщение от Аноним (-), 04-Апр-15, 17:49 
Во-первых, у меня уже сомнения в том, что ты напишешь полноценный shared_ptr, и даже в том, что ты нормально знаешь его устройство. Но речь не о том.
Напомню, речь шла о том, что якобы в С++ надо писать delete, а неосиляторы забывают. Потом я сказал, что хорошие погромисты в хороших программах на С++ не пишут delete вообще. Что ты хотел сказать своим комментарием применительно к исходному топику?
Ответить | Правка | Наверх | Cообщить модератору

61. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от Аноним (-), 04-Апр-15, 18:12 
> Во-первых, у меня уже сомнения в том, что ты напишешь полноценный shared_ptr,
> и даже в том, что ты нормально знаешь его устройство. Но
> речь не о том.
> Напомню, речь шла о том, что якобы в С++ надо писать delete,
> а неосиляторы забывают. Потом я сказал, что хорошие погромисты в хороших
> программах на С++ не пишут delete вообще. Что ты хотел сказать
> своим комментарием применительно к исходному топику?

Раньше я как-то писал, а теперь разучился что ли? Ты ведь полюбому и сам знаешь принцип работы shared_ptr, так сказать, на моллекулярном уровне, и явно понимаешь, что я лишь написал самый базовый принцип его работы основанный на инкрементированнии счетчика и присвании указателя в перегруженном operator=? А потом я ниже тебе ответил, что И РАНЬШЕ не надо было руками работать с памятью, а достаточно было лишь один раз реализовать свой собственный аналог shared_ptr (ну не было тогда boost). То, что за тебя кто-то в бусте обернул new/delete в шаблон, не означает что ручное управление памятью куда-то делось, он просто скрыто под одеялом.

Ответить | Правка | Наверх | Cообщить модератору

57. "Бета-выпуск языка программирования Rust 1.0"  +1 +/
Сообщение от Аноним (-), 04-Апр-15, 18:03 
Я это собственно к тому, что и раньше не надо было руками работать - написал один раз класс-шаблон со приватным членом-счетчиком ссылок и инкрементируешь его в operator=. Это техника известна хер знает сколько лет и, как я выше уже писал, любой С++ программист ее всегда применял. Но для всяких недопрограммистов на Rust и особенно на Go, это видимо какая-то инопланетная магия. Так что твоё "теперь не надо руками работать" - мимо, никогда не надо было, если один раз сделать. Такими тенденциями как в Go и Rust через лет 5 ручное управление памятью станет в разряд эдакого супер-пупер-хардко-профи скиллом, хотя это ваще тривиальнейшая вещь, которой нас еще в школе обучали.
Ответить | Правка | К родителю #48 | Наверх | Cообщить модератору

59. "Бета-выпуск языка программирования Rust 1.0"  +1 +/
Сообщение от Аноним (-), 04-Апр-15, 18:08 
Сам чего-то придумал – сам поговорил. Ок.
Ответить | Правка | Наверх | Cообщить модератору

73. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от Orduemail (ok), 04-Апр-15, 23:19 
Так я не понял -- что тебе надо от языка? Работа с памятью напрямую, или возможность избежать работы с памятью напрямую при помощи всяких костылей?
Ответить | Правка | К родителю #57 | Наверх | Cообщить модератору

123. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от Аноним (-), 06-Апр-15, 21:06 
> Так я не понял -- что тебе надо от языка? Работа с
> памятью напрямую, или возможность избежать работы с памятью напрямую при помощи
> всяких костылей?

И то и другое. Хорошо когда инструмент гибкий.


Ответить | Правка | Наверх | Cообщить модератору

126. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от Orduemail (ok), 06-Апр-15, 21:58 
>> Так я не понял -- что тебе надо от языка? Работа с
>> памятью напрямую, или возможность избежать работы с памятью напрямую при помощи
>> всяких костылей?
> И то и другое. Хорошо когда инструмент гибкий.

Тогда твоим выбором должен быть rust.

Ответить | Правка | Наверх | Cообщить модератору

148. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от Аноним (-), 08-Апр-15, 21:48 
> Тогда твоим выбором должен быть rust.

Странно, мой выбор ни у кого не занимал.

Ответить | Правка | Наверх | Cообщить модератору

151. "Бета-выпуск языка программирования Rust 1.0"  +/
Сообщение от Orduemail (ok), 08-Апр-15, 22:34 
>> Тогда твоим выбором должен быть rust.
> Странно, мой выбор ни у кого не занимал.

Что в этом странного? Обычно занимает?

Ответить | Правка | К родителю #148 | Наверх | Cообщить модератору

79. "Бета-выпуск языка программирования Rust 1.0"  –1 +/
Сообщение от Krozemail (??), 05-Апр-15, 01:01 
> Т.е. в декструкторе не надо delete вызывать?

Послушай, ну, если ты настолько суров, что даже в деструкторе не вызываешь delete, то попрограммируй пока на Бейсике.

Ответить | Правка | К родителю #33 | Наверх | Cообщить модератору

85. "Бета-выпуск языка программирования Rust 1.0"  +2 +/
Сообщение от Аноним (-), 05-Апр-15, 06:52 
Пожалуйста, позвольте мне не вызывать в деструкторе delete, если конструктор у меня ничего в кучу не аллоцирует. Можно?
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру