문제

게으른 평가 대신 기본적으로 엄격한 평가를 사용하는 Haskell 컴파일러를 찾고 있습니다. 나는 단지 ocaml을 사용하지만 Haskell의 구문은 훨씬 낫다 Ocaml보다 (그리고 Haskell은 순수하며 유형 클래스와 같은 멋진 기능이 있습니다).

나는 오히려 끊임없이 끊임없이 넣지 않을 것입니다 !모래 $!내 프로그램 전체에 s. 스위치가있는 컴파일러 또는 엄격한 주석에 넣을 수있는 전처리가 정말 좋을 것입니다. 무한한 목록과 같은 것을 원할 경우를 대비하여 특정 장소에서 게으른 평가를 사용할 수있는 방법이 있었다면 도움이 될 것입니다 (아마도 결코 그렇지 않을 것입니다).

게으른 평가가 더 좋다는 것을 확신시키지 마십시오. 실제로 성능이 필요합니다. IIRC, Simon Peyton Jones는 게으른 평가가 실제로 필요하지 않다고 말했습니다. 대부분 언어를 불순하게 만들지 못하게하는 것이 었습니다.

도움이 되었습니까?

해결책

엄격한 평가를 사용하는 Haskell 컴파일러가있는 경우 Haskell을 컴파일하지 않습니다. 게으름 비 강력성은 Haskell 사양의 일부입니다!

그러나 대안이 있습니다.

  • DDC Haskell의 나머지 부분을 모두 유지하면서 파괴적인 업데이트와 같은 것들을 지원하는 명시 적으로 게으른 Haskell 변형을 만드는 시도입니다. 한 가지 문제가 있습니다. 컴파일러는 현재 α- 단계에만 있지만 적어도 사용할 수있는 것 같습니다.

  • 다른 사람들이했던 것처럼 전처리자를 만듭니다.

  • Haskell“올바른 방법”을 사용하는 법을 배우십시오. 테스트 케이스를 공개적으로 공개 할 수있는 것으로 단순화 할 수 있다면에 게시 할 수 있습니다. Haskell-Café 메일 링리스트, 사람들이 비 강력성의 영향에 관한 이러한 종류의 질문에 매우 도움이되는 곳.

다른 팁

나는 내 프로그램 전체에 끊임없이 끊임없이! s와 $! s를 넣지 않을 것입니다.

당신은 잘못하고 있습니다. 만약 당신이 당신이 Haskell을 프로그래밍하는 방법이라면 :) 당신은 단순히 이것을 할 필요가 없습니다. GHC를 사용하고 -O2를 사용하고 적절한 경우 엄격한 데이터 유형을 사용하고 적절한 경우 Lazy를 사용하십시오. 게으름이 문제가 될 것이라고 가정하지 마십시오. 많은 문제에 대한 해결책입니다.

과거에 Haskell을 엄격히 평가하려는 두 가지 시도가있었습니다.

그러나 둘 다 Haskell의 비 강력한 의미론을 고수하는 데 중점을 두었지만 실제로 의미론을 바꾸기보다는 대부분 강력한 평가 전략을 사용했으며 실제로는 빛을 보지 못했습니다.

편집 : Strict-Plugin에 대한 Martijn의 제안은 실제로 원하는 것을 수행하고 저자는 여전히 Haskell 커뮤니티에서 활동하고 있기 때문에 귀하의 목적에 이상적입니다.

나도 네 아픔을 느낀다. 일상적인 프로그래밍에서 가장 큰 피타는!@#$%^& (우주 누출.

그러나 그것이 도움이되면 시간이 지남에 따라 이것을 다루는 방법에 대해 배우고 (어려운 방법) 더 나아집니다. 그러나 나는 여전히 Andy Gill이 그의 모든 문제를 해결하기 위해 그의 마법의 공간 누출 프로파일 러와 함께 나오기를 기다리고 있습니다. (마지막 ICFP에서 그가이 멋진 아이디어를 구현하겠다는 약속으로 꿈꾸었던 그의 손에 대한 논평을하고 있습니다.)

나는 게으른 평가가 세상에서 가장 좋은 것임을 당신에게 확신 시키려고 노력하지는 않지만, 그것에 대해 좋은 점이 있습니다. 3.5MB 정도의 메모리를 사용하는 동안 기가 바이트의 데이터에서 행복하게 실행되는 다양한 조합 제 (2MB 이상이 GHC 런타임)를 통해 Lazy Lazy가 나열하는 스트림 처리 프로그램이 있습니다. 그리고 작년에 저에게 지적한 것보다 더 똑똑한 사람은 전형적인 Haskell 프로그래머로서 당신이 게으른 평가에 얼마나 의존하는지 정말 놀랄 것입니다.

그러나 우리가 정말로 필요로하는 것은 현실 세계에서 게으른 평가를 다루는 데 정말 좋은 책입니다 (이것은 학문적 세계와 크게 다르지 않습니다. 단순히 논문을 출판하지 않고 고객이 우리를 따라 오는 것을 제외하고는 실제로. 나이프와 관련된 대부분의 문제를 제대로 다루고 더 중요한 것은 우리에게 무엇을 폭발시킬 것이 무엇인지, 그렇지 않은지에 대한 직관적 인 감각을 제공합니다.

나는 이것이 새로운 것이라고 생각하지 않습니다. 나는 다른 언어와 건축도 이것을 통해 이루어 졌다고 확신합니다. 최초의 프로그래머는 어떻게 하드웨어 스택과 그 모든 것을 처리 했습니까? 잘 안 돼요.

나는 얀-윌렘 마 에산이라고 생각합니다 pH 컴파일러 IS/엄격했습니다. 다음으로 가장 가까운 것은 GHC 5에 대한 Robert Ennal의 투기 평가 포크입니다. 그 중 하나가 여전히 현재/유용한/등에 있는지 모르겠습니다.

NFDATA 및 RNF Everywhere를 사용하는 것은 이미 평가 된 큰 구조를 반복적으로 통과하는 것을 의미하기 때문에 해결책이 아닙니다.

Ben Lippmeier의 박사 학위 논문 (DDC에 관한)의 입문 장은 내가 본 Haskell에 대한 최고의 비판에 관한 것입니다. 게으름, 파괴적인 업데이트, Monad Transformers 등의 문제에 대해 설명합니다. DDC는 게으름을 가지고 있지만 명시 적으로 요청해야합니다. 그리고 DDC의 유형 및 효과 시스템에 의해 추적되고 관리되는 효과로 간주됩니다.

최근 에이 분야에서 일부 작업을 보았습니다.

https://ghc.haskell.org/trac/ghc/wiki/strictpragma

SPJ의 GHC 상태 업데이트에서 다음과 같은 소식을들을 수 있습니다.

http://youtu.be/ex79k4lvjno?t=9M33S(링크는 9:33에 관련 작품에서 시작됩니다)

게으른 평가 대신 기본적으로 엄격한 평가를 사용하는 Haskell 컴파일러를 찾고 있습니다.

이러한 컴파일러는 Haskell 컴파일러가 아닙니다. 만약 너라면 진짜 원하는 것을 고려할 수 있습니다 {-# LANGUAGE Strict #-} 파일에 Pragmas. 이것은 컴파일러의 마지막 3 번의 릴리스 인 GHC 8.0.2, 8.2.2 및 8.4.1에서 작동합니다.

특정 장소에서 게으른 평가를 사용하는 방법이 있었다면 도움이 될 것입니다.

그러한 방법이 없습니다. 대신, 게으른 언어로 의도 한대로 GHC를 사용하십시오. 코드, 프로필 및 기능적 데이터 구조를 올바르게 생각하는 법을 배우는 것은 모든 곳에서 엄격한 Pragmas를 적용하는 것보다 훨씬 유용합니다. GHC에는 이미 엄격한 분석기가 있습니다.

(아마도 절대하지 않을 것입니다).

그것이 바로 LLVM-HS의 저자입니다 생각 그들이 게으른 사람보다는 엄격한 상태 모나드를 사용하기로 선택했을 때. 대신, 예상치 못한 버그가 길을 따라 갔다. 게으름과 재귀는 함께 진행됩니다.

게으른 평가가 더 좋다는 것을 확신시키지 마십시오. 실제로 성능이 필요합니다.

나는 이것이 기존 코드를 동시에 깨뜨리고 기존 리소스를 쓸모 없게 만드는 동시에 Haskell 코드의 성능을 높이 지 않을 때 실제로 원하는 것입니다. 이것이 프로그램을 작성하려는 방법이라면 OCAML 또는 Scala를 사용하여 Haskell 커뮤니티를 내버려 두십시오.

IIRC, Simon Peyton Jones는 게으른 평가가 실제로 필요하지 않다고 말했습니다. 대부분 언어를 불순하게 만들지 못하게하는 것이 었습니다.

그것은 사실이 아닙니다. Haskell의 실제 역사에 대한 자세한 내용을 읽을 수 있습니다. 여기

도 있습니다 Seqaid, 게으른 스트릭 스펙트럼의 중간을 목표로합니다.

SEQAID는 역동적 인 엄격함 (및 병렬 처리) 제어를 위해 Haskell 프로젝트의 비 침습적 자동 근무를 제공하는 GHC 플러그인입니다. 여기에는 곧 최소한의 협조를 사용하여 자동화 된 공간 누출 완화에 대한 최적화가 포함됩니다.

당신은 엄격한 평가의 가치에 대해 당신의 마음을 분명히 만들었지 만, 나는 당신이 Haskell을 사용하는 지점을 놓치고 있다고 생각합니다. Haskell의 게으른 평가를 통해 컴파일러/통역사가 훨씬 유연한 최적화 전략을 사용할 수 있습니다. 자신의 엄격함을 강요하면 Optimizer가 무시됩니다. 결국, 과도한 엄격한 평가를 사용하는 것은 자동 최적화만큼 효율적이지 않습니다. 게으른 평가없이 GHCI의 일련의 숫자에 대한 접이식 합계를 시도하십시오. 그 차이를 매우 명확하게 볼 수 있습니다.이 경우 게으른 평가는 항상 더 빠릅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top