LINUX.ORG.RU
Ответ на: комментарий от Debasher

Вспомнил про патч ведра для поддержки малвари ;).

yurikoles ★★★
()
Ответ на: комментарий от sf

тут уже не очень понятно что происходит
Засчитано!
спасибо

Debasher ★★★★★
()
Ответ на: комментарий от DarkEld3r

нужен неочевидный пример

Оно ведь может из сторонней (а то и сишной) либы прийти.

ну, это как раз таки очевидно :)

Debasher ★★★★★
()
import Data.IORef
import System.IO.Unsafe

ref :: IORef a
ref = unsafePerformIO $ newIORef undefined

main :: IO ()
main = do
    writeIORef ref (1 :: Int)
    v1 <- readIORef ref :: IO Int
    print v1
    v2 <- readIORef ref :: IO (Int, Char)
    print v2
KblCb ★★★★★
()

Может. Haskell реализует именно эту половину Common Lisp.

anonymous
()

Ты думаешь у тебя получается сферический код в вакууме? Хотя если это Хаскель…

anonymous
()

Без использования всяких unsafe по идее не может. Разве что стек переполнится, правда не знаю, как это в хаскеле реализовать.

Legioner ★★★★★
()
Ответ на: комментарий от SyntaxError

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

Legioner ★★★★★
()

Может, но надо уметь его делать

qnikst ★★★★★
()
Ответ на: комментарий от sf

ты оба моих примера привел, не честно так

qnikst ★★★★★
()
Ответ на: комментарий от Legioner

Где ты увидел кучу? В данном примере происходит передача параметров через стек, чем стек и забивается. Ну и ленивых вычислений в упор не вижу тоже.

SyntaxError
()
Ответ на: комментарий от newquestion

А разве на стек выделяется не отдельная память?

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

SyntaxError
()
Ответ на: комментарий от SyntaxError

Почитай, как хаскель работает. Там всё ленивое.

Legioner ★★★★★
()
Ответ на: комментарий от newquestion

Это баг GHC. Скорее всего исправлен этим коммитом:

http://git.haskell.org/ghc.git/commitdiff/3bebf3c2d92e6defc6d17ffa237cc4a9cad...

Код должен генерить haskell-исключение, которое можно споймать. В ghc-7.10.2 работает так:

$ ghc -e 'let f x = f x - 1 in f 5'

GHC stack-space overflow: current limit is 33624 bytes.
Use the `-K<size>' option to increase it.

$ ghc -XScopedTypeVariables -e 'let f x = f x - 1 in Control.Exception.evaluate (show $ f 5) `Control.Exception.catch` (\(e :: Control.Exception.SomeException) -> print ("exception:", e) >> return "I sort of Failed")'

("exception:",stack overflow)
"I sort of Failed"
sf ★★★
()
Ответ на: комментарий от monk

Foreign.* — это unsafe?

Конечно.

А Typeable?

Не знаю, что это такое.

Legioner ★★★★★
()
Ответ на: комментарий от monk

Safe расширение GHC ограничивает механизмы, которыми можно в рантайме сломать типы:

https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/safe-haskell....

https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/safe-haskell....

In the safe language dialect we restrict the following features:

ForeignFunctionInterface — This is mostly safe, but foreign import declarations that import a function with a non-IO type are disallowed. All FFI imports must reside in the IO Monad.

RULES — As they can change the behaviour of trusted code in unanticipated ways, violating semantic consistency, they are restricted in function. Specifically any RULES defined in a module M compiled with -XSafe are dropped. RULES defined in trustworthy modules that M imports are still valid and will fire as usual.

OverlappingInstances — This extension can be used to violate semantic consistency, because malicious code could redefine a type instance (by containing a more specific instance definition) in a way that changes the behaviour of code importing the untrusted module. The extension is not disabled for a module M compiled with -XSafe but restricted. While M can define overlapping instance declarations, they can only overlap other instance declaration defined in M. If in a module N that imports M, at a call site that uses a type-class function there is a choice of which instance to use (i.e. an overlap) and the most specific instances is from M, then all the other choices must also be from M. If not, a compilation error will occur. A simple way to think of this is a same origin policy for overlapping instances defined in Safe compiled modules.

Data.Typeable — We restrict Typeable instances to only derived ones (offered by GHC through the -XDeriveDataTypeable extension). Hand crafted instances of the Typeable type class are not allowed in Safe Haskell as this can easily be abused to unsafely coerce between types.

sf ★★★
()
Ответ на: комментарий от sf

Safe расширение GHC

Спасибо. Я верно понимаю, что при использовании Safe не должно быть возможности получить Segfault?

monk ★★★★★
() автор топика
Ответ на: комментарий от monk

При использовани только Safe модулей - да.

sf ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.