{"title":"取缔幽灵:避免无中生有的结果","authors":"H. Boehm, Brian Demsky","doi":"10.1145/2618128.2618134","DOIUrl":null,"url":null,"abstract":"It is very difficult to define a programming language memory model for shared variables that both • allows programmers to take full advantage of weakly-ordered memory operations, but still • correctly disallows so-called \"out-of-thin-air\" results, i.e. results that can be justified only via reasoning that is in some sense circular. Real programming language implementations do not produce out-of-thin-air results. Architectural specifications successfully disallow them. Nonetheless, the difficulty of disallowing them in language specifications causes real, and serious, problems. In the absence of such a specification, essentially all precise reasoning about non-trivial programs becomes impractical. This remains a critical open problem in the specifications of Java, C, and C++, among others. We argue that there are plausible and relatively straight-forward solutions, but their performance impact requires further study. In the long run, they are likely to require strengthening of some hardware guarantees, so that they translate properly to guarantees at the programming language source level.","PeriodicalId":181419,"journal":{"name":"Proceedings of the workshop on Memory Systems Performance and Correctness","volume":"3 1","pages":"0"},"PeriodicalIF":0.0000,"publicationDate":"2014-06-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"95","resultStr":"{\"title\":\"Outlawing ghosts: avoiding out-of-thin-air results\",\"authors\":\"H. Boehm, Brian Demsky\",\"doi\":\"10.1145/2618128.2618134\",\"DOIUrl\":null,\"url\":null,\"abstract\":\"It is very difficult to define a programming language memory model for shared variables that both • allows programmers to take full advantage of weakly-ordered memory operations, but still • correctly disallows so-called \\\"out-of-thin-air\\\" results, i.e. results that can be justified only via reasoning that is in some sense circular. Real programming language implementations do not produce out-of-thin-air results. Architectural specifications successfully disallow them. Nonetheless, the difficulty of disallowing them in language specifications causes real, and serious, problems. In the absence of such a specification, essentially all precise reasoning about non-trivial programs becomes impractical. This remains a critical open problem in the specifications of Java, C, and C++, among others. We argue that there are plausible and relatively straight-forward solutions, but their performance impact requires further study. In the long run, they are likely to require strengthening of some hardware guarantees, so that they translate properly to guarantees at the programming language source level.\",\"PeriodicalId\":181419,\"journal\":{\"name\":\"Proceedings of the workshop on Memory Systems Performance and Correctness\",\"volume\":\"3 1\",\"pages\":\"0\"},\"PeriodicalIF\":0.0000,\"publicationDate\":\"2014-06-13\",\"publicationTypes\":\"Journal Article\",\"fieldsOfStudy\":null,\"isOpenAccess\":false,\"openAccessPdf\":\"\",\"citationCount\":\"95\",\"resultStr\":null,\"platform\":\"Semanticscholar\",\"paperid\":null,\"PeriodicalName\":\"Proceedings of the workshop on Memory Systems Performance and Correctness\",\"FirstCategoryId\":\"1085\",\"ListUrlMain\":\"https://doi.org/10.1145/2618128.2618134\",\"RegionNum\":0,\"RegionCategory\":null,\"ArticlePicture\":[],\"TitleCN\":null,\"AbstractTextCN\":null,\"PMCID\":null,\"EPubDate\":\"\",\"PubModel\":\"\",\"JCR\":\"\",\"JCRName\":\"\",\"Score\":null,\"Total\":0}","platform":"Semanticscholar","paperid":null,"PeriodicalName":"Proceedings of the workshop on Memory Systems Performance and Correctness","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/10.1145/2618128.2618134","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
It is very difficult to define a programming language memory model for shared variables that both • allows programmers to take full advantage of weakly-ordered memory operations, but still • correctly disallows so-called "out-of-thin-air" results, i.e. results that can be justified only via reasoning that is in some sense circular. Real programming language implementations do not produce out-of-thin-air results. Architectural specifications successfully disallow them. Nonetheless, the difficulty of disallowing them in language specifications causes real, and serious, problems. In the absence of such a specification, essentially all precise reasoning about non-trivial programs becomes impractical. This remains a critical open problem in the specifications of Java, C, and C++, among others. We argue that there are plausible and relatively straight-forward solutions, but their performance impact requires further study. In the long run, they are likely to require strengthening of some hardware guarantees, so that they translate properly to guarantees at the programming language source level.