LINUX.ORG.RU

Массивы в Лиспе


0

0

Совсем глупый вопрос: массив (который создается make-array) передается как в Си, по ссылке, или же нет? Аналогичный вопрос по строкам. Просто хочу быть уверен, что передача массива в ф-ию не приведет к большим издержкам производительности.

anonymous

Ответ на: комментарий от anonymous

Да и вообще как в большинстве языков. Я вот сходу не припомню языка, в котором массивы передаются по копии.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

> Я вот сходу не припомню языка, в котором массивы передаются по копии.

Пых.

anonymous
()
Ответ на: комментарий от dilmah

> и как в перле В Perl нужно руками эту ссылку создавать, иначе все переданные массивы и хеши будут "сплющены" (flattened) в общий массив @_.

anonymous
()
Ответ на: комментарий от eugine_kosenko

Ну, при желании, наступить на грабли можно везде :)

void gimmethecopy(vector copy);

Kpoxman ★★
()
Ответ на: комментарий от Rikz

ИМХО, лукавство.

Джава избавилась от указателей на уровне синтаксиса, и это, по мнению некоторых, является достижением абстракции. Нигде в литературе по Джаве вы не встретите слова "указатель" в данном смысле.

Когда мы говорим, что что-то передается по значению, по ссылке или по указателю, мы имеем в виду это "что-то", то есть сам объект. А не указатель. Если следовать логике этой статьи, то в языке C++ все передается по значению. А если мы где-то поставили & или *, то мы всего лишь передаем указатель по значению.

Вернемся к Джаве. Все мы понимаем, что внутри там есть указатели. Но с точки зрения языка - это просто объекты, значения которых передаются по ссылке.

Kpoxman ★★
()
Ответ на: комментарий от Kpoxman

Есть указатели, а есть ссылки. Если к объекту мы можем прибавить n и сместиться на n объектов в массиве, значит мы имеем арифметику указателей и объект - указатель. Если мы этого делать не можем, значит мы имеем дело с ссылками. Поэтому в джаве внутри именно ссылки, т.к. язык не предусматривает арифметику указателей.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

>Если к объекту мы можем прибавить n и сместиться на n объектов в массиве, значит мы имеем арифметику указателей и объект - указатель. Если мы этого делать не можем, значит мы имеем дело с ссылками.

В терминологии С++ однако ссылка всегда указывает на один и тот же объект, всегда инициализируется при объявлении и не может быть null.

Absurd ★★★
()
Ответ на: комментарий от Absurd

> В терминологии С++ однако ссылка всегда указывает на один и тот же объект

некорректно. Если ссылка это аргумент функции, то может на разные объекты указывать.

dilmah ★★★★★
()
Ответ на: комментарий от Absurd

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

Legioner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.