о программировании

Feb 11, 2011 15:30

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

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

it

Leave a comment

gasparian February 11 2011, 14:32:53 UTC
> не задается вопросом - а как я могу красиво вернуть сразу _несколько_

а $result = $this->validate( $data );

где $data передается по ссылке, не вариант?

Reply

nm_work February 11 2011, 17:05:16 UTC
я бы постарался этого бы не делать - потому что ты тоже создаешь side effect - меняешь данные, которые тебе передали.

т.е. 3 раза подряд вызвать эту функцию и получить одинаковые результаты - не получится.

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

Reply

nm_work February 11 2011, 17:16:50 UTC
т.е. я считаю передачу данных в функцию по reference костылем, который вынужденно используют, так как VM не может минимизировать копирование данных при возврате их в отдельном аргументе. т.е. это вопрос, который лечится внутри VM и не должен контролироваться программистом :)

Reply

gasparian February 11 2011, 20:45:24 UTC
> так как VM не может минимизировать копирование данных при возврате их в отдельном аргументе

на самом деле я довольно долго и нудно отстаивал свою точку зрения на счет НЕ реализации "передачи по ссылке" аргументов при удаленном вызове (подобие RPC для собственного маршалинга), но всегда наталкивался на непонимание со стороны C++ -истов.

а на счет минимизации при копировании, то задача, по крайней мере для C++, решается упаковкой tuple-объекта в оболочку из смарт-поинтера с референс-каунтером.

Reply

nm_work February 15 2011, 14:34:33 UTC
> а на счет минимизации при копировании, то задача, по крайней мере для C++, решается упаковкой tuple-объекта в оболочку из смарт-поинтера с референс-каунтером.

нууу, ты по любому меняешь первоначальный объект, не так-ли? речь идет о том, чтоб максимально НЕ копировать данные, пока это не надо.

кстати erlang пошел дальше - данные всегда копируются, кроме binary. и ничего, жить можно :) в последнее время вроде lists тоже оптимизируют, но все равно :)
правда у них есть один плюс - при рекурсивном вызове себя, если все правильно сделано - данные вообще не копируются, так как вызов происходит внутри этого-же stack frame, без создания нового :)

Reply


Leave a comment

Up