?

Log in

No account? Create an account
kouzdra [entries|archive|friends|userinfo]
kouzdra

[ website | www.kouzdra.org ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Хаскельное-2 [Dec. 19th, 2015|08:56 pm]
kouzdra
К: http://kouzdra.livejournal.com/2808666.html

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

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

Comments:
[User Picture]From: alll
2015-12-19 06:21 pm (UTC)
Этого даже C и ассемблер не даёт. Причём проблемы может создать переносимость даже не на другой компилятор, а на другой процессор. Причём проблемы могут возникнуть не только с производительностью, а вообще с багами - скажем перенос программ с однопроцессорной архитектуры на многопроцессорную внезапно требует использования memory barrier.
(Reply) (Thread)
[User Picture]From: kouzdra
2015-12-19 06:25 pm (UTC)
Проблемы с багами - это то что называется undefined (простейшая - порядок вычисления подвыражений). Но оно по крайней мере специфицировано в языке.

Хотя от этого щас стараются уходить (и жабе и хаскеле undefined поведения практически нет - зато в ghc есть вот такие плюшки)

Edited at 2015-12-19 06:27 pm (UTC)
(Reply) (Parent) (Thread)
From: alll
2015-12-19 07:05 pm (UTC)
> Но оно по крайней мере специфицировано в языке.

Далеко не во всяком языке специфицируют что-то, относящееся к memory barrier. До совсем недавнего времени в спецификациях С++ например даже про многопоточность вообще не было, не говоря уже о таких тонкостях.
(Reply) (Parent) (Thread)
[User Picture]From: nicka_startcev
2015-12-19 11:47 pm (UTC)
какая еще многопоточность?
есть еще, например, куча работящего кода, написанного на диалекте борланд-с++3.1, который даже при смене опций оптимизатора разваливается в тыкву, ибо задержки летят к чертям. про смену компилятора уж не говорю, там полноценный реинжениринг с воскресением зомбей из разработиков, почивших в дурке. в общем, та еще археология с отдачей технических долгов.
(Reply) (Parent) (Thread)
From: alll
2015-12-19 07:12 pm (UTC)
> undefined (простейшая - порядок вычисления подвыражений). Но оно по крайней мере специфицировано в языке.

Отличная, кстати, тема из разряда "предсказуемость и управляемость" языка.
Пока не выучишь все 100500 случаев undefined behaviour - к продакшн коду не подходи. Серьёзная заявка на захват мира. :)
(Reply) (Parent) (Thread)
From: aso
2015-12-19 07:26 pm (UTC)
В Си, к примеру, undefined определены в спецификации языка - и, в общем-то, легко избегаются.
И в основном относятся к самомодифицирующимся выражениям.
Жаждущим большой безопасности - Welcome to Ada.
(Reply) (Parent) (Thread) (Expand)
From: (Anonymous)
2015-12-19 09:01 pm (UTC)
>в общем-то, легко избегаются.

Ну да, хрен-то там был. Сишечка идеальный образец языка, к которому приложился комитет. Стандартный продакшон код полностью обмазан UB и implementation defined - начиная со сдвигов знаковых, указателей на char не для строк и прочая.
(Reply) (Parent) (Thread) (Expand)
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
[User Picture]From: kvqa
2015-12-19 09:13 pm (UTC)
Избегаются, щас.
Сраное переполнение сраного инта - undefined.
(Reply) (Parent) (Thread) (Expand)
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
[User Picture]From: rdia
2015-12-19 10:53 pm (UTC)
Язык Ада!
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: nicka_startcev
2015-12-19 11:49 pm (UTC)
там еще радости с диалектами и с оптимизаторами-задержками. в общем, банальный техдолг (хуяк-хуяк фпродакшн, а глюки править будут потомки)
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: network_service
2015-12-19 07:41 pm (UTC)
Понавыдумывали 100500 языков и мучаются. Хотя для всех случаев жизни хватило бы штук пяти с лихвой. И всем жилось бы легче. )
(Reply) (Thread)
[User Picture]From: slobin
2015-12-20 02:02 am (UTC)
Кажется, я об этом написал восемь лет назад.

... Rechtzeitig oder wenig später ...

(Reply) (Thread)
From: tristes_tigres
2015-12-20 11:31 am (UTC)
К сожалению, в Хаскеле ещё сломаны вычисления с плавающей точкой.
(Reply) (Thread)
From: 14op
2015-12-20 12:52 pm (UTC)
Там же всю жизнь использовалась gmp, что в ней можно было поломать?
(Reply) (Parent) (Thread)
From: tristes_tigres
2015-12-20 01:01 pm (UTC)
https://ghc.haskell.org/trac/ghc/ticket/8702
Об этом сообщили не меньше шести лет назад, не исправлено до сих пор. Причём это сломано на уровне спецификации языка, потому что сигнатура floor (RealFrac a, Integral b) => a -> b не даёт возможности обрабатывать nan согласно стандарту.

Ну и вообще, Haskell думает, что арифметические операции с плавающей точкой pure.


(Reply) (Parent) (Thread)