The OpenNET Project / Index page

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



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

Оглавление

Выпуск языка программирования Rust 1.40, opennews (??), 23-Дек-19, (0) [смотреть все]

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


39. "Выпуск языка программирования Rust 1.40"  –3 +/
Сообщение от Аноним (5), 23-Дек-19, 13:28 
Перечисли будь добр не проблемы C++ потому что это и фига языка одновременно, а именно то шо хруст решает
Ответить | Правка | Наверх | Cообщить модератору

41. "Выпуск языка программирования Rust 1.40"  –2 +/
Сообщение от Аноним (5), 23-Дек-19, 13:29 
Совместимость с С та еще фига в кармане)
Ответить | Правка | Наверх | Cообщить модератору

45. "Выпуск языка программирования Rust 1.40"  –2 +/
Сообщение от Аноним (5), 23-Дек-19, 13:38 
Вся суть C++ это борьба с тем уродством который называют няшным Си, тут тебе и указатели, и строки-массивы, и сегфолты, и ацкий синтаксис со звездочками, и упоротые макросы и стопитсот другого гемора
Ответить | Правка | Наверх | Cообщить модератору

49. "Выпуск языка программирования Rust 1.40"  –4 +/
Сообщение от Аноним (5), 23-Дек-19, 13:41 
Чего стоит альтернативный синтаксис указателя vasyan[0] вместо *vasyan, итого массив как бы тупо указатель, но передается в другой указатель как не указатель, можно невозбранно херачить *vasyan=vasyan[0], при том что правильно было бы **vasyan=vasyan[0] и такого сладкого хлеба в Си и следовательно в плюсах хватит каждому братишке
Ответить | Правка | Наверх | Cообщить модератору

203. "Выпуск языка программирования Rust 1.40"  +3 +/
Сообщение от Anonim (??), 23-Дек-19, 16:46 
Сам хоть понял че написал?)) сразу видно что ты не разбираешься в Си, более того, банально путаешь такие понятия как массив и указатель. И самое печальное, что вас таких умников дохера и больше!
Ответить | Правка | Наверх | Cообщить модератору

207. "Выпуск языка программирования Rust 1.40"  –1 +/
Сообщение от Аноним (5), 23-Дек-19, 16:59 
Ну давай расскажи чем vasyan[1] отличается от *vasyan++ или почему для "массива" не нужен оператор адреса *vasyan=mas работает как же так, если только mas не адрес на первый элемент участка памяти в котором лежат данные? Ты же гуру все знаешь, обьясни по пацански
Ответить | Правка | Наверх | Cообщить модератору

239. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 23-Дек-19, 18:05 
Не путай тёплое с мягким!
Сперва ответь себе на следующие вопросы, что такое в языке Си:
1) объект
2) указатель
3) массив
А затем спроси себя, чем отличаются эти понятия:
1) указатель и адрес
2) массив и имя массива
Ты ведь понимаешь, что это разные понятия?
Читая твои предложения, складывается стойкое очущение что нет!
Ответить | Правка | Наверх | Cообщить модератору

242. "Выпуск языка программирования Rust 1.40"  –1 +/
Сообщение от Аноним (5), 23-Дек-19, 18:24 
K&R не читал да? Риччи сам пишет шо массив есть альтернативная форма записи указателей или ты самый умный?
Ответить | Правка | Наверх | Cообщить модератору

271. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 23-Дек-19, 19:51 
Не надо врать и вводить в заблуждение других!
Идите и сами для начала прочитайте эту книгу в оригинале - такого бреда там нет!
Если я не прав, давай сюда номер страницы где это сказано?
Ответить | Правка | Наверх | Cообщить модератору

276. "Выпуск языка программирования Rust 1.40"  –1 +/
Сообщение от Аноним (5), 23-Дек-19, 20:10 
Глава 5.3 Указатели и массивы

Начиная с...

Между индексированием и арифметикой с указателями существует очень тесная связь. По определению
значение переменной или выражения типа массив есть адрес нулевого элемента массива. После
присваивания

Может наконецто дойдет

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

278. "Выпуск языка программирования Rust 1.40"  –1 +/
Сообщение от Аноним (5), 23-Дек-19, 20:14 
А что у нас может хранить адрес? Напомни будь добр
Ответить | Правка | Наверх | Cообщить модератору

353. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 24-Дек-19, 10:46 
А вы странный:)))
Теперь сравните это с тем бредом, что вы написали выше:
>>>Риччи сам пишет шо массив есть альтернативная форма записи указателей<<<

Если вы не в состоянии увидеть разницу - то увы, я тут ничего не могу поделать:(

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

380. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 24-Дек-19, 18:55 
Васян ты питоном упоролся или в терминологии полный ноль?
Ответить | Правка | К родителю #353 | Наверх | Cообщить модератору

250. "Выпуск языка программирования Rust 1.40"  –1 +/
Сообщение от Аноним (5), 23-Дек-19, 18:47 
Объект в Си? Ну разве что файл как единица трансляции, больше никаких объектов в нем нет
Ответить | Правка | К родителю #239 | Наверх | Cообщить модератору

272. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 23-Дек-19, 19:54 
object is a region of data storage in the execution environment.
Ответить | Правка | Наверх | Cообщить модератору

277. "Выпуск языка программирования Rust 1.40"  –1 +/
Сообщение от Аноним (5), 23-Дек-19, 20:12 
В таком понимании в Си объектов нет
Ответить | Правка | Наверх | Cообщить модератору

279. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 23-Дек-19, 20:21 
Идите и читайте стандарт языка си, хотя об этом также сказано и в K&R
Ответить | Правка | Наверх | Cообщить модератору

284. "Выпуск языка программирования Rust 1.40"  –1 +/
Сообщение от Аноним (5), 23-Дек-19, 20:38 
Приведи главу, а не разглогольствуй
Ответить | Правка | К родителю #279 | Наверх | Cообщить модератору

354. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 24-Дек-19, 10:59 
В книге есть такая вещь, которая называется Index.
Пожалуйста, сделайте самому себе одолжение и научитесь им пользоваться - уверяю вас, это очень полезно.
Ответить | Правка | К родителю #284 | Наверх | Cообщить модератору

381. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 24-Дек-19, 18:56 
Че сам не научишься и требуешь пруф?
Ответить | Правка | К родителю #354 | Наверх | Cообщить модератору

383. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 24-Дек-19, 19:00 
Пруф за пруф
Ответить | Правка | К родителю #354 | Наверх | Cообщить модератору

423. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от freehckemail (ok), 25-Дек-19, 04:13 
> Пруф за пруф

Хех, а я помню этот момент, так что намекну, где искать, и где товарищ лукавит.

Такое определение объекта и правда было дано в стандарте/драфте ISO/IEC емнип 2005го что ли года. Тогда пошла серия шуточек из разряда "смотрите, в С тоже есть объекты". Но они в общем-то были тухлыми, поскольку все понимали перегруженность термина object, и воспринимать его буквально было уделом людей в общем-то недалёких.

Что собственно понятно, потому что у K&R понятие объекта тоже было. Но не в таком виде. У них было что-то вроде "именованной области памяти". Вот собственно тут и есть лукавство, ибо товарищ заявляет, что "это ещё у K&R было". И скорее всего именно по этой причине он никогда не предоставит пруф.

Но в общем и целом, тут всё равно надо понимать, что слово object -- оно буквально должно пониматься как объект, вещь, сущность, штука. Так что да, когда человек говорит об "объекте в языке Си", в котором обычно этот термин в повседневной работе с ним не употребляется от слова совсем, тыкая собеседника в его якобы "некомпетентность", а сам аппелирует при этом к стандарту ISO -- то надо этого буквоеда ссаными тряпками хлестать, пока у него катарсис не случится.

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

442. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 25-Дек-19, 08:21 
>>>Такое определение объекта и правда было дано в стандарте/драфте ISO/IEC емнип 2005го что ли года. <<<

Определение понятия объект, именно в таком виде, дано ещё в самом первом стандарта языка С языка (ISOC90).
Так что не нужно писать, того в чём вы не разбираетесь!
Запомните, если в какой-либо книге сказано одно, а в стандарте говорится другое - то любой профессионал вам скажет, что нужно верить тому, что написано в стандарте, а не в книге!

Так что, можете все ваши пожелания в мой адрес, успешно адресовать самому себе и балбесам вроде вас!

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

444. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от freehckemail (ok), 25-Дек-19, 09:00 
> Так что не нужно писать, того в чём вы не разбираетесь!
> Так что, можете все ваши пожелания в мой адрес, успешно адресовать самому себе и балбесам вроде вас!

О, какие мы горячие. Надо же.

> Определение понятия объект, именно в таком виде, дано ещё в самом первом стандарта языка С языка (ISOC90).

Я конечно мог попутать год стандарта, поскольку эти писульки в основном предназначены для разработчиков компиляторов сей, и посему в чтение оных я никогда особо не вдавался. Но я не мог попутать определения, данного K&R. И я готов предоставить пруф хоть сейчас, поскольку уж что-что, а исходный вариант K&R мы найдём весьма легко, в отличие от драфта C90.

Вот K&R, пожалуйста, найди там данное тобой определение: http://www2.cs.uregina.ca/~hilder/cs833/Other Reference Materials/The C Programming Language.pdf
Ты не сможешь этого сделать. А вот я своё -- легко найду. Потому что я-то не балабол, и за слова пруфлинком отвечу.

> Запомните, если в какой-либо книге сказано одно, а в стандарте говорится другое - то любой профессионал вам скажет, что нужно верить тому, что написано в стандарте, а не в книге!

Ага, вот то-то ребята в институте Макса Планка который год уже сидят и находят противоречия в стандарте, да никак вылизать до конца его не могут. То-то у нас такая тьма неопределённого поведения.

Я вот что тебе скажу по этому поводу: вы, буквоеды драфтовые -- не специалисты ни разу; любой хакер знает, что верить надо исходнику либо тесту. Потому что реализация всегда впереди стандарта.

Мог бы молча проглотить и убраться подальше. А теперь обтекай, ламер.

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

448. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 25-Дек-19, 09:20 
>>>эти писульки в основном предназначены для разработчиков компиляторов сей, и посему в чтение оных я никогда особо не вдавался.<<<

Тогда нам не о чем дальше разговаривать!

P\S: Продолжайте и дальше ссылаться на K&R словно это библия какая-то - я не против:)))

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

449. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от freehckemail (ok), 25-Дек-19, 09:21 
> Тогда нам не о чем дальше разговаривать!

Вот и молодец. Правильное, разумное решение.

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

450. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 25-Дек-19, 09:42 
>>>поскольку уж что-что, а исходный вариант K&R мы найдём весьма легко, в отличие от драфта C90.<<<

Ну и совсем напоследок: вот держи для саморазвития, любитель пруфа:))
http://read.pudn.com/downloads133/doc/565041/ANSI_ISO%2...

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

452. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от freehckemail (ok), 25-Дек-19, 09:49 
>>>>поскольку уж что-что, а исходный вариант K&R мы найдём весьма легко, в отличие от драфта C90.<<<
> Ну и совсем напоследок: вот держи для саморазвития, любитель пруфа:))
> http://read.pudn.com/downloads133/doc/565041/ANSI_ISO%2...

Клёво, спасибо! Извинения приняты, Иван.

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

463. "Выпуск языка программирования Rust 1.40"  –1 +/
Сообщение от Аноним (5), 26-Дек-19, 00:41 
Если есть понятие объекта как ты утверждаешь, должен быть и класс? Где классы?
Ответить | Правка | К родителю #442 | Наверх | Cообщить модератору

281. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 23-Дек-19, 20:25 
Вы ведь должны понимать, что одно и тоже понятие, необязатально везде и всегда, будет обозначать тоже самое!
Ответить | Правка | Наверх | Cообщить модератору

285. "Выпуск языка программирования Rust 1.40"  –1 +/
Сообщение от Аноним (5), 23-Дек-19, 20:40 
Можешь в конкретику? образы это удел питона
Ответить | Правка | К родителю #281 | Наверх | Cообщить модератору

208. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 23-Дек-19, 17:01 
И главное, приоткрой занавес тайны почему индекс первого элемента массива равен нулю? поржу хоть
Ответить | Правка | К родителю #203 | Наверх | Cообщить модератору

320. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (320), 23-Дек-19, 23:32 
Ловите паскалиста реликтового !
Ответить | Правка | Наверх | Cообщить модератору

341. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonymqwe (?), 24-Дек-19, 06:43 
Pascal как язык программирования, более продуман по сравнению с С. Он не стал столь массовым только из-за хайпа UNIX.
Ответить | Правка | Наверх | Cообщить модератору

327. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним84701 (ok), 24-Дек-19, 01:04 
> И главное, приоткрой занавес тайны почему индекс первого элемента массива равен нулю?
> поржу хоть

---
> A postfix expression followed by an expression in square brackets [] is a subscripted
> designation of an element of an array object. The definition of the subscript operator []
> is that E1[E2] is identical to (*((E1)+(E2))).

Оно?

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

382. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 24-Дек-19, 18:59 
Ну да индекс это смещение указателя относительно начала участка памяти
Ответить | Правка | Наверх | Cообщить модератору

401. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним84701 (ok), 24-Дек-19, 20:07 
> Ну да индекс это смещение указателя относительно начала участка памяти

Ну дык - из этого определения следуют очень интересные "возможности", которые (имхо) намного нагляднее примера  "*foo vs. foo[0]" демонстрируют "синтактический сахаризм" (или скорее -- наследие ограничений древних компиляторов):


#include <stdio.h>                                                                      
int main(void) {
    int bar[6];
    4[bar] = 10;
    char* foo[2] = {"hello","hello"};                                                    
    1[foo] = "world";                                                                    
                                                                                        
     int y = 2334;                                                                        
     int *x = &y;                                                                        
     0[x] = 1337;    
                                                                    
     puts(*foo);                                                                          
     puts(1[foo]);                                                                        
     printf("%d\n",0[x]);                  
     return 0;                                                                            
}

% gcc -Wall -Wextra hw.c && ./a.out
hello
world
1337 10


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

215. "Выпуск языка программирования Rust 1.40"  –1 +/
Сообщение от Аноним (5), 23-Дек-19, 17:25 
Ладно спойлер, а то эксперт загрузился, ноль в качестве индекса на первый элемент обозначает нулевое смещение с начала участка памяти на которую он указывает, компилятор просто преобразовывает vasyan[0] как *vasyan, так работает адресная арифметика
Ответить | Правка | К родителю #203 | Наверх | Cообщить модератору

216. "Выпуск языка программирования Rust 1.40"  –1 +/
Сообщение от Аноним (5), 23-Дек-19, 17:28 
Массив это просто синтаксический сахар над указателями, с некоторыми фичами, но это больше про многомерные массивы, такими как выделение памяти под индекс с указателями, к которым хрен доберешься из языка, такая условность
Ответить | Правка | К родителю #203 | Наверх | Cообщить модератору

328. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от anon2 (?), 24-Дек-19, 01:58 
> Чего стоит альтернативный синтаксис указателя vasyan[0] вместо *vasyan, итого массив как
> бы тупо указатель, но передается в другой указатель как не указатель,
> можно невозбранно херачить *vasyan=vasyan[0], при том что правильно было бы **vasyan=vasyan[0]

Вы не понимаете основ.

Все просто: любой указатель указывает на массив. Но в большинстве случаев это массив из одного элемента.
Поэтому для доступа к первому элементу массива придумали специальный синтаксис со звёздочкой.
А ещё указатель можно сдвинуть, поэтому *(arr+x) эквивалентен arr[x].
Поэтому и индекс первого элемента 0.

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

345. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 24-Дек-19, 08:25 
Ну вот ещё один:(((
Причина всех этих, казалось бы на первый взгляд странностей в том, что в языке Си, по банальной причине неэффективности, отсутствует возможность работать с массивом целиком!
Ответить | Правка | Наверх | Cообщить модератору

357. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Урри (?), 24-Дек-19, 13:28 
Что значит отсутствует? Тут их целых две сразу.
Ответить | Правка | Наверх | Cообщить модератору

363. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 24-Дек-19, 13:41 
Давайте, удивите меня очередной порцией бреда:)
Прошу в студию ваши две возможности!
Ответить | Правка | Наверх | Cообщить модератору

366. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 24-Дек-19, 13:52 
Вы не можете работать с массивом целиком, означает: что вы не можете скопировать массив просто написав a1 = a2. Следовательно, также Вы не можете передать массив целиком в функцию в качестве аргумента; вы также не можете вернуть массив целиком из функции, просто потому что это неэффективно каждый раз копировать массив целиком!
Ответить | Правка | К родителю #357 | Наверх | Cообщить модератору

399. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 24-Дек-19, 20:03 
А ты не думал почему так? Может быть потому что имя массива это указатель который передается? А?
Ответить | Правка | Наверх | Cообщить модератору

443. "Выпуск языка программирования Rust 1.40"  +1 +/
Сообщение от Anonim (??), 25-Дек-19, 08:30 
Чувак, без обид, но ты просто безнадёжен:))
Ответить | Правка | Наверх | Cообщить модератору

369. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Anonim (??), 24-Дек-19, 14:02 
Однако, Например в том же языке Rust такая возможность есть, хотя опять же вы должны понимать что это неэффективно.
Ответить | Правка | К родителю #357 | Наверх | Cообщить модератору

400. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 24-Дек-19, 20:05 
Там много чего ненужного есть и шо? Копировать массивы в функцию/метод считай создавать новый массив, память жрет, софтина тормозит
Ответить | Правка | Наверх | Cообщить модератору

386. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 24-Дек-19, 19:15 
ЩИТО?
Ответить | Правка | К родителю #345 | Наверх | Cообщить модератору

384. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 24-Дек-19, 19:11 
Массив это как бы по определению участок последовательно размещеннных ячеек памяти, таким образом даже тип int, можно представить как массив из 4 байт и невозбранно записать туда четыре char

int i=0;
char *s=(char*)&i;
*s='a',*(s+1)='n',*(s+2)='a',*(s+3)='l';
for(int i=0;i<4;i++){
    cout << *(s+i);
}

Таким образом мы получили массив char из 4 элементов, а вообще массив это просто сырая память которая и не в курсе шо она int, char и тд

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

385. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 24-Дек-19, 19:13 
Ну да, я про это и говорил нулевое смещение относительно начала, только мне ли ты ответил?
Ответить | Правка | К родителю #328 | Наверх | Cообщить модератору

370. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от freehckemail (ok), 24-Дек-19, 14:04 
> Чего стоит альтернативный синтаксис указателя vasyan[0] вместо *vasyan, итого массив как
> бы тупо указатель, но передается в другой указатель как не указатель,
> можно невозбранно херачить *vasyan=vasyan[0], при том что правильно было бы **vasyan=vasyan[0]
> и такого сладкого хлеба в Си и следовательно в плюсах хватит
> каждому братишке

Ну это... Вы по-видимому не понимаете основ сишного синтаксиса. Когда объявляется массив vasyan -- этот символ как раз указатель, раскрывается при использовании как раз в адрес. *vasyan -- это как раз взятие первого элемента по адресу vasyan. vasyan[i] -- это эквивалент *(vasyan+i). Следовательно vasyan[0] -- это и есть *vasyan. А вот **vasyan -- это уже *(*vasyan). То есть сначала надо взять первый элемент по адресу vasyan, трактовать его как адрес и взять уже значение по этому адресу. И это, как видите, ни разу не vasyan[0], который в сущности есть *vasyan.

И таки да, поскольку такие вещи, как оказалось, молодому программисту для понимания слишком сложны -- как раз и создаются новые языки типа Rust или Go. Вам дай в руки чистый C, так вы ж с ним наворотите невесть чего. Поэтому новые языки -- как раз для вас и писаны. Изучайте. =)

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

387. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 24-Дек-19, 19:18 
Смеешься чтоли? Я же написал что синтаксис массива сахар над указателями
Ответить | Правка | Наверх | Cообщить модератору

403. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от freehckemail (ok), 24-Дек-19, 22:31 
> Смеешься чтоли? Я же написал что синтаксис массива сахар над указателями

Разумеется сахар. И что? Ведь ты также написал, что

> правильно было бы **vasyan=vasyan[0]

А это прямо говорит о непонимании арифметики указателей. С чего вдруг "правильно было бы"? Правила раскрытия этих конструкций не позволяют такой трактовки -- и точка.

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

413. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 25-Дек-19, 02:15 
Уверен? А спорим, что данное утверждение имеет правду только в случае многомерного массива, когда создается индекс с указателями на участок памяти, я об этом писал, если ты не видишь смотри лучше,  случае одномерного массива используется обычный указатель *vasyan, в двумерном **vasyan, потому что он содержит адрес первого указателя индекса, который в свою очередь ссылается на участок памяти
Ответить | Правка | Наверх | Cообщить модератору

419. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от freehckemail (ok), 25-Дек-19, 03:19 
> Уверен? А спорим, что данное утверждение имеет правду только в случае многомерного
> массива, когда создается индекс с указателями на участок памяти, я об
> этом писал, если ты не видишь смотри лучше,  случае одномерного
> массива используется обычный указатель *vasyan, в двумерном **vasyan, потому что он
> содержит адрес первого указателя индекса, который в свою очередь ссылается на
> участок памяти

Чувак, да в одном твоём сообщении больше символов, нежели нужно для банальной проверки твоего утверждения. Почему тебе не лень написать сообщение, но лень написать меньшее количество символов для его проверки? Хочешь я напишу? Это займёт от силы минуту. =/

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

424. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от j3t (?), 25-Дек-19, 04:16 
В студию!
Ответить | Правка | Наверх | Cообщить модератору

425. "Выпуск языка программирования Rust 1.40"  +1 +/
Сообщение от freehckemail (ok), 25-Дек-19, 04:32 
> В студию!

И кто меня за язык тянул... Всегда ведь, всегда найдётся кто-нибудь, кто поймает на слове... И слово придётся держать... =/


freehck@home:~$ cat test.c
#include <stdio.h>
typedef unsigned long ul;
int main(void) {
  ul arr[2][2] = {{1,2},{3,4}};
  printf("%lu %lu %lu %lu %lu\n", (ul)arr, (ul)*arr, (ul)arr[0], **arr, arr[0][0]);
  return 0;
}
freehck@home:~$ gcc -Wall -Wextra test.c
freehck@home:~$ ./a.out
140732652187392 140732652187392 140732652187392 1 1

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

459. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от anon2 (?), 25-Дек-19, 22:44 
> Уверен? А спорим, что данное утверждение имеет правду только в случае многомерного
> массива, когда создается индекс с указателями на участок памяти, я об
> этом писал, если ты не видишь смотри лучше,  случае одномерного
> массива используется обычный указатель *vasyan, в двумерном **vasyan, потому что он
> содержит адрес первого указателя индекса, который в свою очередь ссылается на
> участок памяти

Позвольте вмешаться :)
О каком "индексе с указателями" идёт речь?
В объявлении int arr[N][M]; нет никаких указателей.
Объявляется массив из N массивов (а не N указателей на массивы).
И занимает он память в N*M интов.

А вот как определяется массив из указателей:
    int x[2] = {1,2};
    int y[2] = {3,4};
    int (*a[2])[2] = {&x,&y}; // можно и {x,y}, но будут предупреждения компилятора
    int *b[2] = {x,y};        // можно и {&x,&y}, но будут предупреждения компилятора

ну и доступ к элементам
a[0][0][0] // 1
или
***a // 1   ведь * - это "сахар" над [0] :)))

b[0][0] // 1
или
**b // 1

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

407. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от anon2 (?), 24-Дек-19, 23:24 
> Смеешься чтоли? Я же написал что синтаксис массива сахар над указателями

Нее, "синтаксис массива сахар над указателями" - это ошибочное утверждение, в корне неверное и искажающее всю суть языка С :)

Всё с точностью наоборот :)
Как я сказал, указатель - это массив (например из одного элемента).
Обратное утверждение, что массив - это указатель, не имеет смысла.

Массив первичен, а указатель - лишь средство передачи ссылки на массив (технически, адреса массива, который совпадает с адресом первого элемента массива).

Т.е. '*' - это "сахар" для массива, для взятия первого элемента, чтобы писать не arr[0], а *arr.

А потом ещё определили и арифметику над указателями (ещё один "сахар"):
- прибавление N к указателю даст ссылку на под-массив, начинающийся с N-ого элемента от начала исходного массива.

А ведь в некоторых языках, например в Pascal, арифметика над указателями не определена.

Кстати, начните с изучения Pascal, а уже потом беритесь за более сложные вещи, такие как C.

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

416. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 25-Дек-19, 02:24 
Массив это не более чем сырая память, можно массив int mas[10], внезапно сделать типа char, просто обращаясь к нему как char* x=(char*)mas, и получим массив из 40 символов

Насчет обратных утверждений массив это вполне себе память, переменная тоже память, попробуем найти разницу между массивом и переменной, возьмем int x=0 и обратимся к ней как char* s=(char*)&x и внезапно переменная становится массивом

Синтаксический сахар это обращения к значению как имя[index]

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

458. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от anon2 (?), 25-Дек-19, 21:28 
>> Массив это не более чем сырая память, можно массив int mas[10], внезапно сделать типа char, просто обращаясь к нему как char* x=(char*)mas, и получим массив из 40 символов

С точки зрения компилятора массив это не просто сырая память, а набор элементов определённого типа. И кастинг "char* x=(char*)mas" нарушает strict aliasing rules и как следствие может приводить к UB (но для char * вроде пока? есть исключение из правил). Но не суть.

>> Насчет обратных утверждений массив это вполне себе память, переменная тоже память, попробуем найти разницу между массивом и переменной, возьмем int x=0 и обратимся к ней как char* s=(char*)&x и внезапно переменная становится массивом

Ага. Оператор & создаёт ссылку на массив. Хотя опять нарушение strict aliasing из-за кастинга к char*. Только не обращайтесь к переменной x через указатель s - получите UB.

>> Синтаксический сахар это обращения к значению как имя[index]

Не-а.
Это _базовая_ операция обращения к элементу массива - даже в Java такая есть.
А "сахар" - это *ptr (эквивалент ptr[0]) или ptr-> (эквивалент ptr[0].) - этого в Java нет.
И арифметика указателей тоже "сахар" - и этого ни в Pascal ни в Java нет.
Поинтер в C - это алиас массива.

И это особенность C по сравнению, скажем с Java, где всё кроме примитивных типов - объект, а ссылка на объект вроде как и поинтер (может быть null), но с этим поинтером нельзя работать как с массивом.


А еще только C++-сники, в массе своей не знающие C, пишут * возле типа, что не правильно :)
Пример:
    int x;
    int(*a) = &x;   // - объявление поинтера,
    (int*)b = &x;   // - не компилируется :) Ибо (int*) b не есть l-value.
    (int*)(a = &x); // - наверно так? Но это не объявление поинтера.
    *(int*)a = x;   // - а можно ещё так. Но это тоже не объявление поинтера.
    (int*)(c) = &x; // - и так тоже не компилируется.

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

460. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 25-Дек-19, 23:46 
Ничего такой кастинг не нарушается, значит когда память аллоцируешь и приводишь ее к нужному тебе типу с помощью указателя так это видите ли нормально, а когда массив плохо? Для указателя абсолютно фиолетово с каким типом работать, привет void*, насчет расставления звездочек оно имеет значение в константных указателях, ну и в указателях на указатель указателем погоняющим, в простых без разницы

Вся соль в том, что из таких багофич C/C++ состоит чуть менее чем полностью

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

477. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от anon2 (?), 26-Дек-19, 17:01 
> Ничего такой кастинг не нарушается, значит когда память аллоцируешь и приводишь ее
> к нужному тебе типу с помощью указателя так это видите ли
> нормально, а когда массив плохо?

Когда память аллоцируешь, у malloc есть специальный атрибут __attribute__((malloc)), который подсказывает компилятору, что возвращаемую память можно кастить к любому типу и проблем со strict aliasing не будет.

Массив или другой объект это не важно. Важен тип объекта.

> Для указателя абсолютно фиолетово с каким
> типом работать,

Ага, только вдруг с новым компилятором ломатся код, работающий годами.
А читать про strict aliasing вам лень.
Ну вот хотя бы 3-я ссылка в гугле: https://habr.com/ru/post/114117/

> привет void*,

А для void*, как и для char* сделали исключение :)


Интересный пример про string aliasing (из https://stackoverflow.com/questions/2958633/gcc-strict-alias...):

unsigned long a;
a = 5;
*(unsigned short *)&a = 4;

- компилятор может выкинуть последнее присвоение, т.к. ему понятно, что указатель unsigned short * ну никак не может указывать на переменную a, ведь её тип - unsigned long.


> насчет расставления звездочек оно имеет значение в
> константных указателях, ну и в указателях на указатель указателем погоняющим, в
> простых без разницы

ну это про стилистику, как отличить программиста на C от программиста на C++ :)

> Вся соль в том, что из таких багофич C/C++ состоит чуть менее
> чем полностью

Полностью согласен.

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

492. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 26-Дек-19, 19:55 
Через void* любой тип можно кастовать в любой тип вполне легально, так как void* не проверят тип на который ссылается

Насчет С и С++, я искреннее рад шо си в крестах из года в год все меньше

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

124. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (21), 23-Дек-19, 14:52 
https://www.reddit.com/r/rust/comments/dzyceo/what_advantage.../
вот весьма политкорректная подборка, советую почитать
Ответить | Правка | К родителю #39 | Наверх | Cообщить модератору

218. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 23-Дек-19, 17:30 
Посмотрел главные доводы, он просто лучше... Серьезно? Вот так просто, капец, он безопаснее, он эффективнее, где когда применялся, откуда инфа, чисто теоретически Haskell лучше C++, но это же не так
Ответить | Правка | Наверх | Cообщить модератору

375. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (21), 24-Дек-19, 18:14 
На реддите люди достаточно компетентные пишут. В т.ч. авторы самого языка rust, а также популярных crate-ов. Им можно верить, хотя бы на столько чтобы попробовать самому)
Ответить | Правка | Наверх | Cообщить модератору

418. "Выпуск языка программирования Rust 1.40"  +/
Сообщение от Аноним (5), 25-Дек-19, 02:35 
Авторы самого языка ясен пень будут петь песни какой он огого, ну и фанатики как и всего нового тоже есть
Ответить | Правка | Наверх | Cообщить модератору

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

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




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

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