Date: 2016-08-11 01:40 pm (UTC)
From: [identity profile] mikeiva.livejournal.com
Вот из-за того, что в C и его логических продолжениях возможна подобная фигня, они мне и не нравятся.

(и неочевидной читаемости традиционного для него кода тоже - со всеми этими указателями на места, где лежат указатели на места, где лежат фактические параметры и т.п. - ну или хотя бы той картинки программистского юмора про = вместо ==, которую сегодня все репостят в фэйсбуке).

Date: 2016-08-11 01:44 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Не, ну указатели куда понятнее, чем "Передача параметров по ссылке и по значению" из учебника по Pascal.

Подобная фигня возможна только в низкоуровневых языках, но в более высокоуровневых свои погремушки.

Date: 2016-08-11 01:49 pm (UTC)
From: [identity profile] mikeiva.livejournal.com
Не знаю, мне кажется, паскалевская запись абсолютно прозрачна. Стоит var в описании параметра функции - будет у тебя после функции измененное внутри значение. А типичное msdn-овское описание требует получаса приседаний в попытках понять, как, что и куда надо пихать. Ну, у меня, во всяком случае.

Date: 2016-08-11 01:55 pm (UTC)
vladimir000: (Default)
From: [personal profile] vladimir000
А почему на таком уровне нельзя считать, что вместо "var" в объявлении функции стоит *, а при вызове - & ?

Более глубоких наворотов в стандартном паскале вроде бы не ыбо?

Или проблема как раз в том, что в Си можно много чего нетривиального соорудить, средвста языка позволяют а не дают по рукам?

Date: 2016-08-11 02:09 pm (UTC)
From: [identity profile] mikeiva.livejournal.com
>А почему на таком уровне нельзя считать, что вместо "var" в объявлении функции стоит *, а при вызове - & ?

Я имел в виду ситуацию, когда зачем-то передают не ссылку на место хранения данных, а ссылку на ссылку. Сходу, правда, не вспомнил, где именно мне такое попадалось.

>Или проблема как раз в том, что в Си можно много чего нетривиального соорудить, средвста языка позволяют а не дают по рукам?

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

Date: 2016-08-11 02:18 pm (UTC)
vladimir000: (Default)
From: [personal profile] vladimir000
> Я имел в виду ситуацию, когда зачем-то передают не ссылку на место хранения данных, а ссылку на ссылку. Сходу, правда, не вспомнил, где именно мне такое попадалось.

Регулярно приходится и сталкиваться, и самому применять. Ситуация вложенных структур данных и вообще луковичной логики. Например, в оптимизатор передается структура, задающая параметры его работы включая какую, собственно, функцию оптимизировать. Соответственно, аргументом этой функции будет указатель на еще одну структуру данных (в простейшем случае - массив).

Или вариант когда надо получить отсортированный по какому-то критерию список объектов, которые нельзя физически реаллокировать (скажем, слишком большие), и каждый содержит какие-то массивы.

В обоих случаях перехлж на плюсы и объекты проблему маскирует, но не решает.

> Да, мне кажется, что это проблема. Вероятность того, что кто-то сделает слабочитаемым код с помощью какого-нибудь выпендрежа, без которого можно было обойтись, гораздо больше, чем того, что без подобных фокусов будет ну прямо не жить.

Я думаю, что для большинства применений утверждение если и не 100% справедливо, то близко к этому:) Но есть отдельные направления, где без таких возможностей тяжело, и где программисты обычно обладают квалификацией и самодисциплиной:)

Может быть скажу ересь, но в отличии от ситуации 20-ти летней давности и С, и С++ - нишевые языки, в большинстве случаев вместо них стоит использовать языки более высокого уровня.

Date: 2016-08-11 03:09 pm (UTC)
vladimir000: (Default)
From: [personal profile] vladimir000
А, и кстати. "слабочитаемый код" - это одно явление, "код, позволяющий легко и незаметно для себя получить ошибку/неопределенное поведение" - другое, а "код, не обладающий первыми двумя недостатками, но выглядящий непонятно программисту, не знакомому с принятыми при написании конвенциями" - вообще третее.

Date: 2016-08-11 09:22 pm (UTC)
From: [identity profile] mikeiva.livejournal.com
>Я думаю, что для большинства применений утверждение если и не 100% справедливо, то близко к этому:) Но есть отдельные направления, где без таких возможностей тяжело, и где программисты обычно обладают квалификацией и самодисциплиной:)

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

Date: 2016-08-11 09:38 pm (UTC)
vladimir000: (Default)
From: [personal profile] vladimir000
Дурак и известно что сломать может;)

Date: 2016-08-11 02:32 pm (UTC)
yurikhan: (default)
From: [personal profile] yurikhan

Ссылку на ссылку передают сплошь и рядом, когда нужно вернуть ссылку из функции, а непосредственно возвращаемое значение почему-либо уже занято.

HRESULT QueryInterface(/*in*/ IUnknown* this_, /*in*/ UUID* riid, /*out*/ void** ppvObject);

Profile

beldmit: (Default)
Dmitry Belyavskiy

December 2025

S M T W T F S
 123456
78910111213
14151617181920
2122 2324252627
28 29 3031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 4th, 2026 07:36 pm
Powered by Dreamwidth Studios