0

제 언어에 대한 병렬지도 연산자를 정의하는 데 관심이 있습니다. 표현식이 주어지면 목록을 새로운 목록으로 변환합니다. 생성기와 비슷한 구문을 갖습니다. C#과 Python의 생성기와 달리, 컴파일러가 원하는 경우 (예 : 유휴 코어가 있고 목록이 실제로 크면) 병렬로 평가 될 가능성이 있습니다. 순차적으로 실행되는 foreach과 구별하려면 witheach이라고합니다. 예를 들어병렬지도 (생성자) 연산자

고려 :

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에 부작용을 넣을 수 있습니다 프로그래머 너무 직관적 될 것입니다? 물론이 문서에서는이 작업을 수행하지 않겠지 만 대부분의 프로그래머는 언어 문서를 읽지 않습니다. :-)

나는 현대인 프로그래머가 암시 적 병렬 목록 처리 구문에 적응할 수 있습니까? 아니면 더 명확하게해야 할 필요가 있습니까?

+0

"좀 더 명시적인 것이 필요합니까?"- 예, "witheach"라고하지 말고 "WARNING_DO_NOT_SIDE_EFFECT_HERE_PARALLEL_MAP". – Svante

+0

나는 이것이 뺨에 조금 돌았다는 것을 짐작하고 있냐? – cdiggins

답변

2

대부분의 사용자는 설명서를 읽지 않으므로 블록에 스레드가 아닌 코드 (특히 foreach과 비슷 함)가 삽입됩니다. 사용자를 신뢰하거나 해당 블록의 동시 안전성에 대한 정적 분석을 수행해야합니다. 나중에 선택하면 witheach으로 귀찮게하지 않아도됩니다. 가능한 경우 자동으로 foreach을 병렬 처리합니다.

잠재적 인 위험을 감수 할 준비가되어 있는지 여부에 관해서는, 사람들이 안전하다는 것을 알고있는 한 "예"라고 내기를합니다. 많은 언어가 매일이 선택을하도록 강요합니다 (포인터, 수동 메모리 관리, 공유 메모리 동시성). 사람들이 자신이 서명 한 내용을 알 수 있도록 구문을 덜 모호하게 만들 수 있습니다 (예 : parallelforeach).

+0

이들은 위대한 포인트입니다. – cdiggins

1

pmap과 같은 의미입니까?

+0

네, 실제로 Java-ish 구문을 사용하는 것과 똑같습니다. – cdiggins