metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-02-06 02:33 pm
Entry tags:

Функциональщина в бухгалтерии

Самоочевидно ли то, что с помощью filter/map/fold можно реализовать бухгалтерскую отчетность более простым и очевидным образом, чем с помощью select .. where .. group by?

Нет, наверно я хотел задать не этот вопрос. Правильный вопрос: сколько в час денег попросит человек, способный за неделю-две разобраться в вышеописанном вопросе?

[identity profile] plumqqz.livejournal.com 2013-02-06 12:04 pm (UTC)(link)
Самоочевидно ли то
Мне лично самоочевидно, что очень вероятны проблемы с балансом. Кроме того, еще более вероятны проблемы с производительностью. Ну и, скорее всего, вероятны проблемы с типами (в функциональщине вообще есть тип с фиксированной точностью?)

[identity profile] metaclass.livejournal.com 2013-02-06 12:11 pm (UTC)(link)
Да, Decimal (в жабовой и дотнетовой функциональщине - точно есть).
Баланс в условиях двойной записи нарушить можно только явными багами в расчетах :)
А с производительностью все очень просто: первоначальная выборка производится в СУБД, средствами SQL, а окончательная генерация отчета по невменяемым правилам - функциональщиной. Ну и SQL тоже функциональщина генерирует, если по хорошему.

[identity profile] plumqqz.livejournal.com 2013-02-06 12:20 pm (UTC)(link)
А с производительностью все очень просто: первоначальная выборка производится в СУБД, средствами SQL
Ах это...

[identity profile] metaclass.livejournal.com 2013-02-06 12:22 pm (UTC)(link)
Нема дурных фетчить 1005000 проводок, даже если считалка отчетов рядом с СУБД запущена :)

[identity profile] plumqqz.livejournal.com 2013-02-06 12:27 pm (UTC)(link)
Ну да, да - СУБД вам и изоляцию сделает, чтобы все аккуратненько было, и отфильтрует - схеширует, и вот уж тогда поверх наложицо ФП, придавая окончательный шарм всей конструкции.
Особенно сильно ей рады будут невиновные и непричастные. Приходишь - и вместо привычного говоноооп говнофп.
Отличная идея, по-моему.

[identity profile] metaclass.livejournal.com 2013-02-06 12:29 pm (UTC)(link)
Разного рода сложносочиненная постобработка на ФП выглядит гораздо гуманнее, чем на SQL.
Хотя бы потому, что структур данных, доступных там, сильно больше, чем одних реляционных множеств кортежей на все про все.

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-06 12:32 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2013-02-07 04:10 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-06 12:35 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2013-02-06 12:38 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-06 12:44 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2013-02-06 12:47 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-06 12:50 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2013-02-06 13:00 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-06 13:04 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2013-02-06 13:13 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-06 13:16 (UTC) - Expand

(no subject)

[identity profile] thedeemon.livejournal.com - 2013-02-06 18:59 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-07 08:27 (UTC) - Expand

(no subject)

[identity profile] geniepro.livejournal.com - 2013-02-07 06:39 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-07 07:34 (UTC) - Expand

(no subject)

[identity profile] vinslivins.livejournal.com - 2013-02-07 09:05 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-07 09:09 (UTC) - Expand

(no subject)

[identity profile] vinslivins.livejournal.com - 2013-02-07 09:18 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-07 09:24 (UTC) - Expand

(no subject)

[identity profile] vinslivins.livejournal.com - 2013-02-07 09:27 (UTC) - Expand

(no subject)

[identity profile] vinslivins.livejournal.com - 2013-02-07 09:26 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-07 09:28 (UTC) - Expand

(no subject)

[identity profile] vinslivins.livejournal.com - 2013-02-07 09:32 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-07 09:38 (UTC) - Expand

[identity profile] dmzlj.livejournal.com 2013-02-06 12:11 pm (UTC)(link)
это как раз просто --- можно хранить всё в бигинте (в т.ч. с произвольной точностью) и определить необходимые функции конверсии/отображения.

а джойнить данные будет неприятно

[identity profile] metaclass.livejournal.com 2013-02-06 12:13 pm (UTC)(link)
Да везде есть decimal (который 64-128 бит целого числа+десятичный scale).

[identity profile] plumqqz.livejournal.com 2013-02-06 12:19 pm (UTC)(link)
Бигинта мало.

[identity profile] dmzlj.livejournal.com 2013-02-06 12:23 pm (UTC)(link)
точно мало?

Prelude> product [1..1000]
402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000


ну, целочисленная арифметика с произвольной точностью везде есть


[identity profile] metaclass.livejournal.com 2013-02-06 12:24 pm (UTC)(link)
у них бигинт это 64 бита :)

[identity profile] plumqqz.livejournal.com 2013-02-06 12:28 pm (UTC)(link)
У них где надо numeric.

(no subject)

[identity profile] metaclass.livejournal.com - 2013-02-06 12:33 (UTC) - Expand

[identity profile] plumqqz.livejournal.com 2013-02-06 12:28 pm (UTC)(link)
И что, не очень сильно тормозит?

[identity profile] dmzlj.livejournal.com 2013-02-06 12:30 pm (UTC)(link)
как везде. а что, РСУБД волшебным образом умеют быстро работать с данными, которые в машинное слово на целевой платформе не влезают?

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

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-06 12:33 (UTC) - Expand

(no subject)

[identity profile] nealar.livejournal.com - 2013-02-06 17:33 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-07 04:13 (UTC) - Expand

[identity profile] potan.livejournal.com 2013-02-06 03:17 pm (UTC)(link)
На то есть list comprehension. Если о производительности не сильно заботиться.

[identity profile] metaclass.livejournal.com 2013-02-06 03:21 pm (UTC)(link)
Смотря какой join. Если, как у меня - "подписи из справочника", то можно загрузить справочник в мап и доставать из него для каждой записи основной таблицы.
Полноценное декартово произведение не так часто нужно.

[identity profile] si14.livejournal.com 2013-02-07 11:05 am (UTC)(link)
Люди рекомендуют datalog движок из datomic'а, кстати. Он не только с datomic'ом работает, но и с произвольными коллекциями в памяти.

[identity profile] stdray.livejournal.com 2013-02-06 12:12 pm (UTC)(link)
В конце концов, filter/map/fold большей частью будут отображены на select .. where .. group by. А доступные примитивные типы данных зависят от конкретного языка (платформы), но как правило все тоже самое.

[identity profile] plumqqz.livejournal.com 2013-02-06 12:22 pm (UTC)(link)
Ну да, я уже понял - чтобы, значить, умение даром не пропадало.

[identity profile] avnik.livejournal.com 2013-02-06 12:19 pm (UTC)(link)
Да
При этом будет нельзя сложить например рубли с долларами.(ну и вообще теплое с мягким)

[identity profile] plumqqz.livejournal.com 2013-02-06 12:24 pm (UTC)(link)
Э-э-э... а что, собственно, "да"?
Что касается проблемы сложения рублей с долларами, то, честно говоря, я не могу назвать ее, так сказать, наболевшей.

[identity profile] avnik.livejournal.com 2013-02-06 01:11 pm (UTC)(link)
да == "типы есть"
А если и нет, то можно написать, один раз.

Кто-то ([livejournal.com profile] sorhed?) рассказывал как биржевой софт писали на хаскеле именно по этой причине, он гарантировал несмешение валют, которые формально все decimal но при этом разные.

[identity profile] plumqqz.livejournal.com 2013-02-06 01:12 pm (UTC)(link)
Я не знаю, что там с биржевым софтом, я знаю, что проблемы с неправильных сложенией рублей с долларами весьма редки, а вот с неправильным сложением рублей с рублями сплошь и рядом.

(no subject)

[identity profile] sorhed.livejournal.com - 2013-02-06 13:35 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-02-06 13:36 (UTC) - Expand

[identity profile] jdevelop.livejournal.com 2013-02-06 02:16 pm (UTC)(link)
биржевой софт - на хаскеле?


это неправда, это не может быть правдой.

(no subject)

[identity profile] vshabanov.livejournal.com - 2013-02-06 17:29 (UTC) - Expand

(no subject)

[identity profile] jdevelop.livejournal.com - 2013-02-06 17:36 (UTC) - Expand

(no subject)

[identity profile] vshabanov.livejournal.com - 2013-02-06 18:11 (UTC) - Expand

(no subject)

[identity profile] jdevelop.livejournal.com - 2013-02-06 18:17 (UTC) - Expand

(no subject)

[identity profile] jdevelop.livejournal.com - 2013-02-06 18:18 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2013-02-07 04:03 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2013-02-07 04:00 (UTC) - Expand

(no subject)

[identity profile] jdevelop.livejournal.com - 2013-02-07 04:41 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2013-02-07 05:26 (UTC) - Expand

(no subject)

[identity profile] jdevelop.livejournal.com - 2013-02-07 13:28 (UTC) - Expand

(no subject)

[identity profile] blackyblack.livejournal.com - 2013-02-07 05:29 (UTC) - Expand

(no subject)

[identity profile] swizard.livejournal.com - 2013-02-07 10:27 (UTC) - Expand

[identity profile] theiced.livejournal.com 2013-02-07 03:50 am (UTC)(link)
вот. крокодил в очередной раз показал себя тупым мудаком перепутав "функциональщину" и "типизацию".

более того, код писанный в функциональном стиле в общем случае работает быстрее и обычно работает с иммутабельными данными - то есть никаких "проблем с балансом" быть не может принципиально.

иди секурити аудит проводи, говнище.