문제

내 언어의 병렬지도 연산자를 정의하는 데 관심이 있습니다. 표현식이 주어진 새 목록으로 목록을 변환합니다. 발전기와 유사한 구문이 있습니다. C# 및 Python의 생성기와 달리 컴파일러가 원하는 경우 (예 : 유휴 코어가 있고 목록이 실제로 큽니다) 잠재적으로 병렬로 평가 될 수 있습니다. 호출 될 것입니다 witheach 그것을 구별하기 위해 foreach 순차적으로 실행됩니다.

예를 들어 고려하십시오 :

var f = function(int x) : int { return x * 2; }
var my_list = 0..1000000;
var my_mapped_list = witheach (i in mylist) yield f(i);

내 질문은 부작용을 입을 수있는 프로그래머에게는 너무 직관적이지 않을 것입니다. f? 물론, 나는 문서에서 이것을하지 말라고 말하지만 대부분의 프로그래머는 언어 문서를 읽지 않습니다. :-)

더 큰 질문은 현대 프로그래머가 암시 적 병렬 목록 처리 시맨틱에 적응할 수 있습니까?

도움이 되었습니까?

해결책

당신은 대부분의 사용자가 문서를 읽지 않을 것이라는 점에서 옳습니다. witheach 블록 (특히 이름과 구문으로 foreach). 사용자를 신뢰하거나 해당 블록의 동시 안전에 대한 정적 분석을 수행해야합니다. 당신이 나중에 선택했다면, 당신은 witheach - 자동으로 병렬화합니다 foreach 가능할 때.

사용자가 잠재적으로 위험하기로 선택할 책임이 있는지 여부에 관해서는 안전한 것을 앞쪽으로 알고있는 한 "예"를 베팅 할 것입니다. 많은 언어가 매일이 선택을하도록 강요합니다 (포인터, 수동 메모리 관리, 공유 메모리 동시성). 당신은 당신의 구문을 덜 모호하게 만들고 싶을 수도 있습니다 (즉, 그것을 부릅니다. parallelforeach), 사람들이 자신이 무엇을 가입하고 있는지 알도록합니다.

다른 팁

당신은 같은 것을 의미합니다 오후?

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