ufm: (Default)
[personal profile] ufm
Все эти ваши монады-шмонады, функторы-шмункторы, безопасная работа с памятью и прочая ересь - ето, конечно хорошо. Но покажите мне язык программирования, в котором вот это, можно написать по человечески, через транзакцию.

(no subject)

Date: 2022-04-13 10:47 (UTC)
From: [personal profile] chabapok
> Это всё равно "закат солнца вручную".

а что именно ненравится? Напишите хотябы псевдокод как вы хотите, чтобы оно выглядело. Ну вроде у интелов была транзакционная память intel tsx, но в каком состоянии ее поддержка - я без понятия.

> когда функции get_ это не совсем get и имеют еще некоторое количество сайд эффектов

Тогда желательно не называть ее get, потому что гет предполагается без сайд эффектов.

И в современном программировании предпочтительней использовать для такого неизменяемые переменные. Єто более идеоматично, и тогда код мог бы выглядеть как-то так: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=e0576b2ee1c4160a06e2af08dbd11e40


Соответственно, когда вы перегружаете a,b,c - это не вполне нормальный подход, отсюда и костыльность решения.


(no subject)

Date: 2022-04-13 10:04 (UTC)
archie_kot: (Default)
From: [personal profile] archie_kot
C++ std::swap(a,b)

(no subject)

Date: 2022-04-13 10:05 (UTC)
archie_kot: (Default)
From: [personal profile] archie_kot
а, не, это я шота не отдуплил че оно делает

(no subject)

Date: 2022-04-13 13:12 (UTC)
vit_r: default (Default)
From: [personal profile] vit_r
Ошибки, которые не выявляются на этапе компиляции, в функциональных языках ошибками не являются. (^_-)

(no subject)

Date: 2022-04-13 13:40 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Немножко наоборот.

Ошибка в коде должна выявляться на этапе компиляции. (Не не ошибка в данных; там нужна монада.)

(no subject)

Date: 2022-04-13 13:48 (UTC)
vit_r: default (Default)
From: [personal profile] vit_r
Ошибка не обладает свободой воли. Она никому ничего не должна.

Истинное положение вещей проявляется, когда словесные конструкции строятся не только грамматически, но и контекстно грамотно.

И необработка ошибки в данных -- это тоже ошибка в коде.

(no subject)

Date: 2022-04-13 13:58 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Необработка - само собой.

Кстати, хорошая идейка; спасибо. Подумаю, что вообще можно в этом смысле поделать.

(no subject)

Date: 2022-04-13 14:08 (UTC)
vit_r: default (Default)
From: [personal profile] vit_r
Применяемые инструменты определяют весь процесс производства. В этом смысле, то, что нужно делать, делать не разрешат.

(no subject)

Date: 2022-04-13 15:10 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Хм. Я думал, человек выбирает инструмент по задаче.

(no subject)

Date: 2022-04-13 15:23 (UTC)
vit_r: default (Default)
From: [personal profile] vit_r
Если задача сколотить деревянный ящик и есть гвозди, то человек выбирает молоток.

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

(no subject)

Date: 2022-04-14 08:25 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Ха. Я полгода назад изготовлял четыре больших ящика, для килнов разного размера. Гвозди-то у меня были, но я купил шурупы. Потому что еще же разбирать надо было, без потрясений чтоб.

(no subject)

Date: 2022-04-13 13:38 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Тут не монада нужна, а аппликативный функтор. Фигн делов, два байта переслать. Учитесь, товарищ, функциональному программированию.

(no subject)

Date: 2022-04-14 07:22 (UTC)
ypq: (Default)
From: [personal profile] ypq
а зачем вот эта вот вся свистопляска с old_x = x, а потом x = old_x, если что-то пошло не так? а почему не сделать new_x, err = GetXYZ() и просто не трогать x, если что-то не то?