Swift 5將強制執行內存獨占訪問

Swift 5將帶來改進的Swift程序內存安全性,在程序的其他部分修改變量時,不允許通過其他變量名來訪問這些變量。這個變更對現有應用程序的行為和Swift編譯器本身都有重要影響。

Swift 5將帶來改進的Swift程序內存安全性,在程序的其他部分修改變量時,不允許通過其他變量名來訪問這些變量。這個變更對現有應用程序的行為和Swift編譯器本身都有重要影響。

在多種情況下會發生獨占內存訪問問題。編譯器可以靜態地捕獲大部分問題,剩下的只能在運行時處理。只能在運行時處理的問題包括具有轉義閉包、類類型屬性、靜態屬性和全局變量的排他性違規。

為了更好地說明這個問題,我們可以考慮一個相當普遍的情況:修改一個函數的inout變量,這個函數執行了一個閉包,這個閉包使用同一作用域內的兩個不同的名稱訪問上述的變量:

func modifyTwice(_ value: inout Int, by modifier: (inout Int) -\u0026gt; ()) {  modifier(\u0026amp;value)  modifier(\u0026amp;value)}func testCount() {  var count = 1  modifyTwice(\u0026amp;count) { $0 += count }  print(count)}

在這個例子中,因為使用count同時作為modifyTwice和modifier的inout參數,所以出現了問題。我們不清楚print語句應該打印出什么內容。第一次count變量遞增,它的值遞增到2。但是,當執行第二次加法時,要添加到$0的count值是多少?這可能取決于很多因素,因為內存操作不一定是瞬時的。更糟糕的是,編譯器可能會引入優化,進一步使這種情況復雜化。

這個問題不僅與通過不同變量名同時修改內存的不可預測性有關,也與編譯器的復雜性有關。

這可能會導致意外和混亂的結果。它還導致編譯器和標準庫的實現具有很大的保守性,它們通常必須確保程序的基本可靠性(沒有崩潰或未定義的行為),即使是在不尋常的情況下。

所有這些意味著如果發現獨占訪問沖突,使用Swift 5編譯器編譯的應用程序將在運行時崩潰。這個行為以前在Swift 4編譯器調試模式下可用,因此,僅在運行時模式下測試過的程序在使用Swift 5編譯時有崩潰的風險。

Swift 4編譯器可用,因此僅在運行時模式下測試的程序在使用Swift 5編譯時可能會崩潰。

修復訪問獨占違規的一般方法是復制數據。在我們的示例中,這將歸結為:

func modifyTwice(_ value: inout Int, by modifier: (inout Int) -\u0026gt; ()) {  modifier(\u0026amp;value)  modifier(\u0026amp;value)}func testCount() {  var count = 1  let increment = count  modifyTwice(\u0026amp;count) { $0 += increment }  print(count)}

實際上,訪問獨占違規檢查可能會被禁用,但強烈建議不要這樣做:

雖然禁用運行時檢查可能可以解決性能問題,但這并不意味著獨占違規是安全的。如果沒有啟用強制執行,程序員必須遵守獨占規則。

查看英文原文:
https://www.infoq.com/news/2019/02/swift-5-exclusive-memory-access

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275891.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275891.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275891.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GitHub 支持上傳視頻文件啦!

大家好,我是若川。今天周六,分享一篇熱點新聞。文章較短,預計5分鐘可看完。近日 Github 宣布支持了視頻上傳功能,意味著,大家在提 issue 時可以攜帶視頻了,這極大地提高了開發者和維護者的效率,…

ui設計 網絡錯誤_UI設計人員常犯的10個錯誤

ui設計 網絡錯誤重點 (Top highlight)1.不考慮范圍 (1. Disregarding scope)It’s not uncommon for designers to introduce features that will overcomplicate the development process while bringing no additional value to the application. Focusing on the business o…

灰色的生命

也許幸福從來沒有在我身邊也許是已經在我身邊但我抓不住,摸不著 你的出現讓我驚奇為我灰色的生命添上了從沒見過的色彩我不相信這一切都是我的 不相信總是害怕相信了之后卻要面對殘酷的現實 但為何你讓我相信所有抓住了希望卻又轉過身沒有離去但讓一切停止望著你不想說…

小程序 node.js mysql_基于Node.js+MySQL開發的開源微信小程序B2C商城(頁面高仿網易嚴選)...

高仿網易嚴選的微信小程序商城(微信小程序客戶端)界面高仿網易嚴選商城(主要是2016年wap版)測試數據采集自網易嚴選商城功能和數據庫參考ecshop服務端api基于Node.jsThinkJSMySQL計劃添加基于Vue.js的后臺管理系統、PC版、Wap版項目截圖功能列表首頁分類…

前端菜鳥筆記 Day-5 CSS 高級

文章大綱來源:【Day 5】CSS 高級 CSS 選擇器CSS 拓展CSS 單位CSS 參考手冊CSS 選擇器 內容引用:CSS 選擇器 元素選擇器 html { ... } 復制代碼選擇器分組 h2, p { ... } 復制代碼類選擇器 .important { ... } p.warning { ... } .important.warning { .…

推薦幾個干貨超多助你成長的前端大佬

不得不說,如今比前些年學習資料多很多了。現在的前端公眾號也挺多的,這里推薦幾個前端大佬運營的公眾號,都是聚焦前端垂直領域的優質公眾號,關注這些公眾號至少可以:1、了解現在前端技術發展情況和未來發展趨勢&#x…

背景圖片_背景

背景圖片A designer’s journey is one that’s littered with many portfolios. Many of which have been reduced to a mere 404 error page, an abandoned link or another archive in the folders. Recently, while updating my portfolio, all the forgotten versions tha…

解決《Mobile繪制背景圖片》中的問題

與PC平臺的開發相比,Mobile的開發麻煩了許多,至少這是我的感覺 。 謝謝--“ Fly Pig(^^)” 的文章《Mobile開發(繪制背景圖片) 》 http://www.cnblogs.com/Bright-Liang/archive/2009/06/11/1501309.html 不過對于我這種低手來說&…

mysql 5.6.31 winx64_詳解介紹MySQL5.6.31winx64.zip安裝配置的圖文教程

這篇文章主要介紹了MySQL5.6.31 winx64.zip 安裝配置教程詳解,非常不錯,具有參考借鑒價值,需要的朋友可以參考下#1. 下載##2.解壓到本地 修改必要配置my*.ini#3.mysql installadmin模式啟動cmdcd mysql目錄/bin執行安裝: mysqld -install啟動…

如何使用Gitbook創建html技術文檔

故事背景:很多時候對外發布的產品需要一份html格式的文檔 首先要了解的是 word直接轉成html是不現實的,需要通過md文件來轉換。 我們本節課討論的Gitbook即是在MD基礎上進行操作的。 所以任務一:安裝typora軟件,用于編輯md文件&am…

徒手擼了個markdown筆記平臺

大家好,我是若川。今天分享一篇markdown筆記平臺的項目文章。點擊下方卡片關注我、加個星標,或者查看源碼等系列文章。學習源碼整體架構系列、年度總結、JS基礎系列一、前言作為開發者,我覺的用markdown寫文檔是一件很酷的事情。在之前&#…

This week I’ve been forging background illustrations for my website, epdillon.com (launching soon). I’ve been using Adobe Illustrator to do all the major casting, dabbling in Figma only to temper the colours. Fresh from the design furnace, my hands are a…

【轉】Vector與ArrayList區別

在寫java的時候,基本上都喜歡用arraylist,甚至我都不知道有個vector的存在。查了一下發現又是線程安全問題。。。咋個線程安全天天圍著我轉呢。。。多得阿里巴巴,讓我開始認識java的所謂線程安全問題。 the following is from:htt…

pyqt控件顯示重疊_Python編程:一個不錯的基于PyQt的Led控件顯示庫,建議收藏學習...

1、控件說明在Github上,偶然發現了一個基于PyQt5的第三方Led指示燈控件庫,使用起來非常方便,控件外觀也比較漂亮,更難能可貴的是作者源代碼寫得比較簡潔,僅僅才約200行左右,可以作為一個在PyQt中寫自定義控…

編寫高質量可維護的代碼:優雅命名

大家好,我是若川。今天分享一篇關于如何命名更優雅的文章。點擊下方卡片關注我、加個星標,或者查看源碼等系列文章。學習源碼整體架構系列、年度總結、JS基礎系列本文首發于政采云前端團隊博客:編寫高質量可維護的代碼:優雅命名ht…

繼春晚不宕機后,百度云這次拿下攜程大單

今年春晚,百度和央視聯手發放高達9億現金紅包的消息,想必讓不少人替百度捏了把汗。根據統計,春晚期間,全球觀眾參與百度App紅包互動次數累計達到208億次,日活從1.6億沖上3億關口,這么大的瞬時流量沖擊是百度…

mysql int 11 java_mysql中int(11)列的大小(以字節為單位)是多少?

正如其他人所說,列可以存儲的最小/最大值以及以字節為單位的存儲量僅由類型而不是長度定義 .很多這些答案都說 (11) 部分僅影響顯示寬度,這不完全正確,但主要是 .int(2) 與 no zerofill specified 的定義將:仍然接受 100 的值輸出…

powerpoint技巧_幾乎每個PowerPoint都爛雞蛋

powerpoint技巧Almost 20 years ago — 2001! — Seth Godin wrote an ebook called Really Bad Powerpoint (and how to avoid it). In that book he detailed all of the things that tend to go wrong in slide presentations.差不多20年前-2001年! —塞斯戈丁(S…

認識mysql總結_從根上理解Mysql - 讀后個人總結1-搜云庫

初識 MySQL通信介紹MySQL 也是典型的 C / S 模型,分為客戶端及服務端,服務端一般部署在遠端服務器中,也可以部署至本地,然后客戶端跟服務端通信則可以使用依賴網絡的 TCP 長連接或 Unix-like 的系統下可以使用 Socket文件的形式通…

白帽子技術分析會話劫持實戰講解

前言通常,大家所說的hack,都是針對一臺主機,在獲得管理員權限后,就很是得意;其實,真正的hacker是占領整個內部網絡。針對內部網絡的hack方法比較多,但比較有效的方法非ARP欺騙、DNS欺騙莫屬了。…