国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
>在操場上自己嘗試!
在此示例中,global是類型I32的全局變量,并使用值10進行了初始化。請記住,讀取靜態(tài)變量是讀取的 - 只有您無法修改它們。
>我可以修改Rust的全局變量嗎?這是Rust的安全功能,可以防止在編譯時進行數(shù)據(jù)競賽。但是,您可以在std :: Sync模塊中使用Mutex或rwlock來實現(xiàn)可變的全局變量。
extern crate lazy_static; 使用std :: sync :: sync :: sync :: mutex;
println!(“ {}}) “,global);
在此示例中,使用'Undafe'關(guān)鍵字來指示代碼可以執(zhí)行在安全代碼中未定義的操作。
> RUST中的全局變量的替代方法是什么?
首頁 科技周邊 IT業(yè)界 如何在生銹中習慣使用全局變量

如何在生銹中習慣使用全局變量

Feb 10, 2025 pm 03:53 PM

如何在生銹中習慣使用全局變量

在生銹中聲明和使用全局變量可能很棘手。通常,對于這種語言,生銹可以通過強迫我們非常明確地確保魯棒性。

>

在本文中,我將討論Rust編譯器希望拯救我們的陷阱。然后,我將向您展示適用于不同方案的最佳解決方案。

鑰匙要點

    >利用``靜態(tài)''或`const'來聲明RUST中的全局變量,因為“ LET”在全局范圍內(nèi)不允許。
  • >對于整體變量的線程安全運行時初始化,請考慮使用`std :: sync :: asnc :: asnc ::或諸如'lazy_static`或`armer_cell'的外部庫。
  • 由于潛在的安全問題,避免直接使用``靜態(tài)雜物'';相反,將“不安全”塊中包裝訪問或使用靜音類(如靜音詞)。
  • >對于單線程應(yīng)用程序,`thread_local! 在可能的情況下,使用智能指針(例如“弧”)以共享所有權(quán)和線程安全。
  • >了解Rust的`const'和'static'之間的差異:`const'變量是嵌套和不可變的,而``靜態(tài)變量''變量可以具有可變狀態(tài),具有內(nèi)部可突變性選項,例如原子類型或互斥性。
  • >
  • 概述
  • >在Rust中實施全球狀態(tài)有很多選擇。如果您很著急,這是我建議的快速概述。
  • >

您可以通過以下鏈接跳到本文的特定部分:>

無全球:弧 / rc

的重構(gòu) 如何在生銹中習慣使用全局變量編譯時初始化的全球:start t / static t

使用外部庫來輕松運行時初始化的全球范圍:lazy_static / asher_cell

    >實現(xiàn)自己的運行時初始化:std :: Sync ::一次靜態(tài)mut t
  • >單線程運行時初始化的專業(yè)案例:thread_local
  • >天真的首次嘗試使用Rust
  • 中的全局變量
  • >讓我們從如何不使用全局變量的示例開始。假設(shè)我想將程序的啟動時間存儲在全局字符串中。稍后,我想從多個線程訪問值。
  • >使用LET,可能會像Rust中的任何其他變量一樣聲明一個全局變量。然后,完整的程序可以看起來像這樣:

>在操場上自己嘗試!

這是Rust的無效語法。 LET關(guān)鍵字不能在全局范圍中使用。我們只能使用靜態(tài)或const。后者聲明一個真正的常數(shù),而不是變量。只有靜態(tài)才能給我們一個全局變量。

>在此背后的原因是在運行時分配堆棧上的變量。請注意,當在堆上分配時,這仍然是正確的,如讓t = box :: new();。在生成的機器代碼中,仍然有一個指針進入堆上的堆中。

>

>全局變量存儲在程序的數(shù)據(jù)段中。他們的固定地址在執(zhí)行過程中不會改變。因此,代碼段可以包含常數(shù)地址,并且根本不需要堆棧上的空間。

>

好吧,我們可以理解為什么需要其他語法。作為一種現(xiàn)代系統(tǒng)編程語言,Rust希望對內(nèi)存管理非常明確。

>讓我們再試一次:

<span>use chrono<span>::</span>Utc;
</span>
<span>let START_TIME = Utc::now().to_string();
</span>
<span>pub fn main() {
</span>    <span>let thread_1 = std<span>::thread::</span>spawn(<span>||</span>{
</span>        <span>println!("Started {}, called thread 1 {}", START_TIME.as_ref().unwrap(), Utc::now());
</span>    <span>});
</span>    <span>let thread_2 = std<span>::thread::</span>spawn(<span>||</span>{
</span>        <span>println!("Started {}, called thread 2 {}", START_TIME.as_ref().unwrap(), Utc::now());
</span>    <span>});
</span>
    <span>// Join threads and panic on error to show what went wrong
</span>    thread_1<span>.join().unwrap();
</span>    thread_2<span>.join().unwrap();
</span><span>}
</span>
編譯器還不開心:

>

<span>use chrono<span>::</span>Utc;
</span>
<span>static START_TIME: String = Utc::now().to_string();
</span>
<span>pub fn main() {
</span>    <span>// ...
</span><span>}
</span>
hm,因此在運行時無法計算靜態(tài)變量的初始化值。那也許只是讓它不可原始化?

>

error<span>[E0015]: calls in statics are limited to constant functions, tuple structs and tuple variants
</span> <span>--> src/main.rs:3:24
</span>  <span>|
</span><span>3 | static start: String = Utc::now().to_string();
</span>  <span>|                        ^^^^^^^^^^^^^^^^^^^^^^
</span>
這會產(chǎn)生一個新的錯誤:

<span>use chrono<span>::</span>Utc;
</span>
<span>static START_TIME;
</span>
<span>pub fn main() {
</span>    <span>// ...
</span><span>}
</span>
>這也不起作用!所有靜態(tài)值必須在任何用戶代碼運行之前完全初始化和有效。

>

如果您要從其他語言(例如JavaScript或Python)生銹,這似乎是不必要的限制。但是,任何C大師都可以告訴您有關(guān)靜態(tài)初始化順序慘敗的故事,如果我們不小心,這可能會導致不確定的初始化順序。

> 例如,想象一下這樣的東西:

>

在此代碼段中,由于循環(huán)依賴性,沒有安全的初始化順序。
<span>Compiling playground v0.0.1 (/playground)
</span>error<span>: free static item without body
</span> <span>--> src/main.rs:21:1
</span>  <span>|
</span><span>3 | static START_TIME;
</span>  <span>| ^^^^^^^^^^^^^^^^^-
</span>  <span>|                  |
</span>  <span>|                  help: provide a definition for the static: `= <expr>;`
</span>

如果是C(不關(guān)心安全性),結(jié)果將為a:1 b:1 c:2。在每個匯編單元中。

至少它定義了結(jié)果。但是,當靜態(tài)變量來自不同的.cpp文件,因此“慘案”開始時,“慘敗”就開始了。然后,該順序是未定義的,通常取決于匯編命令行中文件的順序。

>

在銹病中,零判決不是一回事。畢竟,零是許多類型(例如框)的無效值。此外,在生銹中,我們不接受奇怪的訂購問題。只要我們遠離不安全,編譯器應(yīng)該只允許我們編寫理智代碼。這就是編譯器阻止我們使用直接運行時初始化的原因。

>

>但是,我可以通過不使用NONE(等效零件)來規(guī)避初始化嗎?至少這與Rust類型系統(tǒng)一致。當然,我可以將初始化移至主函數(shù)的頂部,對嗎?

<span>use chrono<span>::</span>Utc;
</span>
<span>let START_TIME = Utc::now().to_string();
</span>
<span>pub fn main() {
</span>    <span>let thread_1 = std<span>::thread::</span>spawn(<span>||</span>{
</span>        <span>println!("Started {}, called thread 1 {}", START_TIME.as_ref().unwrap(), Utc::now());
</span>    <span>});
</span>    <span>let thread_2 = std<span>::thread::</span>spawn(<span>||</span>{
</span>        <span>println!("Started {}, called thread 2 {}", START_TIME.as_ref().unwrap(), Utc::now());
</span>    <span>});
</span>
    <span>// Join threads and panic on error to show what went wrong
</span>    thread_1<span>.join().unwrap();
</span>    thread_2<span>.join().unwrap();
</span><span>}
</span>
啊,好吧,我們遇到的錯誤是…

>

在這一點上,我可以將其包裹在一個不安全的{...}塊中,并且可以工作。有時,這是一個有效的策略。也許要測試剩余的代碼是否按預(yù)期工作。但這不是我想向您展示的慣用解決方案。因此,讓我們探索編譯器保證安全的解決方案。
<span>use chrono<span>::</span>Utc;
</span>
<span>static START_TIME: String = Utc::now().to_string();
</span>
<span>pub fn main() {
</span>    <span>// ...
</span><span>}
</span>
>

重構(gòu)示例

>您可能已經(jīng)注意到,此示例根本不需要全局變量。而且通常,如果我們能想到?jīng)]有全球變量的解決方案,我們應(yīng)該避免它們。

這里的想法是將聲明放在主要函數(shù)中:>

唯一的問題是借用檢查器:

error<span>[E0015]: calls in statics are limited to constant functions, tuple structs and tuple variants
</span> <span>--> src/main.rs:3:24
</span>  <span>|
</span><span>3 | static start: String = Utc::now().to_string();
</span>  <span>|                        ^^^^^^^^^^^^^^^^^^^^^^
</span>
這個錯誤并不是很明顯。編譯器告訴我們,生成的線程的壽命可能比值啟動_Time的壽命更長,該值始于主函數(shù)的堆??蚣?。

> 從技術(shù)上講,我們可以看到這是不可能的。將線程連接在一起,因此主線程不會在子螺紋完成之前退出。

,但編譯器不夠聰明,無法弄清楚這種特殊情況。通常,當產(chǎn)生新線程時,所提供的閉合只能借用靜態(tài)壽命借用物品。換句話說,借來的價值必須在整個程序壽命中還活著。
<span>use chrono<span>::</span>Utc;
</span>
<span>static START_TIME;
</span>
<span>pub fn main() {
</span>    <span>// ...
</span><span>}
</span>
>

對于任何僅了解Rust的人來說,這可能是您想要與全球變量聯(lián)系的地步。但是至少有兩種解決方案比這更容易。最簡單的是克隆字符串值,然后將字符串的所有權(quán)移至封閉中。當然,這需要額外的分配和一些額外的內(nèi)存。但是在這種情況下,這只是一個簡短的字符串,沒有任何關(guān)鍵性能。

>

>但是,如果它是一個更大的對象,該怎么辦?如果您不想克隆它,請將其包裹在參考注銷的智能指針后面。 RC是單線程引用計數(shù)類型。 ARC是可以在線程之間安全共享值的原子版。

因此,為了滿足編譯器,我們可以使用弧線如下:

<span>use chrono<span>::</span>Utc;
</span>
<span>let START_TIME = Utc::now().to_string();
</span>
<span>pub fn main() {
</span>    <span>let thread_1 = std<span>::thread::</span>spawn(<span>||</span>{
</span>        <span>println!("Started {}, called thread 1 {}", START_TIME.as_ref().unwrap(), Utc::now());
</span>    <span>});
</span>    <span>let thread_2 = std<span>::thread::</span>spawn(<span>||</span>{
</span>        <span>println!("Started {}, called thread 2 {}", START_TIME.as_ref().unwrap(), Utc::now());
</span>    <span>});
</span>
    <span>// Join threads and panic on error to show what went wrong
</span>    thread_1<span>.join().unwrap();
</span>    thread_2<span>.join().unwrap();
</span><span>}
</span>
>在操場上自己嘗試!

>這是關(guān)于如何在線程之間共享狀態(tài)的同時避免全局變量的快速分析。除了我到目前為止我向您展示的內(nèi)容之外,您可能還需要內(nèi)部可變性來修改共享狀態(tài)。內(nèi)部突變性的全部覆蓋范圍不在本文的范圍之內(nèi)。但是在這個特殊的示例中,我會選擇弧>將線程安全的內(nèi)部變形可添加到start_time。

在編譯時間已知全局變量值時

根據(jù)我的經(jīng)驗,全球狀態(tài)的最常見用例不是變量,而是常數(shù)。在Rust中,它們有兩種口味:

常數(shù)值,用const定義。這些是由編譯器夾住的。內(nèi)部可變性永遠不會允許。
  • 靜態(tài)變量,用靜態(tài)定義。他們在數(shù)據(jù)段中獲得固定空間。內(nèi)部可變性是可能的。
  • >可以用編譯時常數(shù)初始化它們。這些可能是簡單的價值觀,例如42或“ Hello World”?;蛘咚赡苁巧婕捌渌麕讉€編譯時常數(shù)和標記為const的函數(shù)的表達式。只要我們避免循環(huán)依賴性。 (您可以在Rust參考中找到有關(guān)恒定表達式的更多詳細信息。)
>

通常,const是更好的選擇 - 除非您需要內(nèi)部可變性,否則您特別想避免內(nèi)部。
<span>use chrono<span>::</span>Utc;
</span>
<span>static START_TIME: String = Utc::now().to_string();
</span>
<span>pub fn main() {
</span>    <span>// ...
</span><span>}
</span>
>如果您需要內(nèi)部可突變性,則有幾種選擇。對于大多數(shù)原語,STD :: Sync :: Atomic中都有相應(yīng)的原子變體。它們提供了干凈的API,以原子上加載,存儲和更新值。

>在沒有原子的情況下,通常的選擇是鎖。 Rust的Standard Library提供了讀寫鎖(RWLOCK)和相互排除鎖(Mutex)。

> 但是,如果您需要在運行時計算值,或者需要堆分配,則const和static沒有幫助。

> RUST中的RUST中的單線讀取全局變量,運行時初始化>

我寫的大多數(shù)應(yīng)用程序只有一個線程。在這種情況下,不需要鎖定機制。

但是,僅僅因為只有一個線程,我們不應(yīng)該直接使用靜態(tài)mut并將訪問包裹在不安全中。這樣,我們可能最終會造成嚴重的記憶腐敗。

例如,從全局變量借用不安全可能會同時為我們提供多個可變的參考。然后,我們可以使用其中一個迭代向量,而另一個則從同一向量中刪除值。然后,迭代器可以超越有效的內(nèi)存邊界,這是安全銹所阻止的潛在崩潰。

>但是,標準庫有一種“全球”存儲價值的方法,以在單個線程中安全訪問。我說的是當?shù)厝恕T诖嬖谠S多線程的情況下,每個線程都會獲得該變量的獨立副本。但是在我們的情況下,只有一個線程,只有一個副本。

> 用thread_local創(chuàng)建

線程當?shù)厝?!宏。訪問它們需要使用閉合,如以下示例所示:>

>并不是所有解決方案中最簡單的。但是它允許我們執(zhí)行任意初始化代碼,該代碼將在第一次訪問該值時及時運行。 在內(nèi)部可突變性方面,

線程非常好。與所有其他解決方案不同,它不需要同步。這允許使用Refcell進行內(nèi)部突變性,從而避免了靜音的鎖定頭頂。

線程局部的絕對性能高度取決于平臺。但是我在自己的PC上進行了一些快速測試,將其與依靠鎖的內(nèi)部變異性進行了比較,并發(fā)現(xiàn)它的速度快10倍。我不希望結(jié)果會在任何平臺上翻轉(zhuǎn),但是如果您非常關(guān)心性能,請確保運行自己的基準。

這是如何使用revcell進行內(nèi)部變異性的一個示例:

>在操場上自己嘗試!

>%0A

%E5%A6%82%E6%9E%9C%E6%82%A8%E6%AD%A3%E5%9C%A8%E5%AF%BB%E6%89%BE%E6%9B%B4%E7%AE%80%E5%8D%95%E7%9A%84%E4%B8%9C%E8%A5%BF%EF%BC%8C%E6%88%91%E5%8F%AF%E4%BB%A5%E5%BC%BA%E7%83%88%E6%8E%A8%E8%8D%90%E4%B8%A4%E4%B8%AA%E6%9D%BF%E6%9D%A1%E7%AE%B1%E4%B9%8B%E4%B8%80%EF%BC%8C%E6%88%91%E5%B0%86%E5%9C%A8%E4%B8%8B%E4%B8%80%E8%8A%82%E4%B8%AD%E8%BF%9B%E8%A1%8C%E8%AE%A8%E8%AE%BA%E3%80%82%0A

>%E7%94%A8%E4%BA%8E%E7%AE%A1%E7%90%86RUST%20%E4%B8%AD%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F%E7%9A%84%E5%A4%96%E9%83%A8%E5%BA%93%0A>%E5%9F%BA%E4%BA%8E%E5%8F%97%E6%AC%A2%E8%BF%8E%E7%A8%8B%E5%BA%A6%E5%92%8C%E4%B8%AA%E4%BA%BA%E5%93%81%E5%91%B3%EF%BC%8C%E6%88%91%E6%83%B3%E6%8E%A8%E8%8D%90%E4%B8%A4%E4%B8%AA%E5%BA%93%EF%BC%8C%E6%88%91%E8%AE%A4%E4%B8%BA%E8%BF%99%E6%98%AF%E6%88%AA%E8%87%B32021%E5%B9%B4%E7%9A%84Rust%E6%98%93%E4%BA%8E%E5%85%A8%E7%90%83%E5%8F%98%E9%87%8F%E7%9A%84%E6%9C%80%E4%BD%B3%E9%80%89%E6%8B%A9%E3%80%82%0A

>%E5%BD%93%E5%89%8D%E8%80%83%E8%99%91%E4%BA%86%E6%A0%87%E5%87%86%E5%BA%93%E7%9A%84%E5%8D%95%E5%85%83%E6%A0%BC%E3%80%82%20%EF%BC%88%E8%AF%B7%E5%8F%82%E9%98%85%E6%AD%A4%E8%B7%9F%E8%B8%AA%E9%97%AE%E9%A2%98%E3%80%82%EF%BC%89%E5%A6%82%E6%9E%9C%E6%82%A8%E5%9C%A8%E6%AF%8F%E6%99%9A%E7%9A%84%E7%BC%96%E8%AF%91%E5%99%A8%E4%B8%AD%EF%BC%8C%E5%88%99%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E5%B0%86%EF%BC%83%EF%BC%81%5Bfeature%EF%BC%88bare_cell%EF%BC%89%5D%E6%B7%BB%E5%8A%A0%E5%88%B0%E9%A1%B9%E7%9B%AE%E7%9A%84%E4%B8%BB%E7%AE%A1%E4%B8%AD%E3%80%82%0A

%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E5%9C%A8%E7%A8%B3%E5%AE%9A%E7%BC%96%E8%AF%91%E5%99%A8%E4%B8%8A%E4%BD%BF%E7%94%A8ANSER_CELL%E7%9A%84%E7%A4%BA%E4%BE%8B%EF%BC%8C%E5%85%B7%E6%9C%89%E9%A2%9D%E5%A4%96%E7%9A%84%E4%BE%9D%E8%B5%96%E6%80%A7%EF%BC%9A

%0A

%0A

>%E5%9C%A8%E6%93%8D%E5%9C%BA%E4%B8%8A%E8%87%AA%E5%B7%B1%E5%B0%9D%E8%AF%95%EF%BC%81

%0Ause%20chrono::Utc;%0A%0Alet%20START_TIME%20=%20Utc::now().to_string();%0A%0Apub%20fn%20main()%20%7B%0A%20%20%20%20let%20thread_1%20=%20std::thread::spawn(%7C%7C%7B%0A%20%20%20%20%20%20%20%20println!(" started called thread start_time.as_ref utc::now> }); let thread_2 = std::thread::spawn(||{ println!("Started {}, called thread 2 {}", START_TIME.as_ref().unwrap(), Utc::now()); }); // Join threads and panic on error to show what went wrong thread_1.join().unwrap(); thread_2.join().unwrap(); }

>

結(jié)論

這些都是我知道的所有(明智)實現(xiàn)全球變量的方法。我希望這更簡單。但是全球狀態(tài)本質(zhì)上是復雜的。結(jié)合Rust的記憶安全保證,似乎不可能一個簡單的捕獲式解決方案。但是我希望這篇文章能幫助您通過大量可用選項查看。

>通常,生銹社區(qū)傾向于為用戶賦予最大的力量 - 這使事情變得更加復雜。

>很難跟蹤所有細節(jié)。結(jié)果,我花了很多空閑時間來探索可能性。在此過程中,我通常會實施較小或大型的愛好項目(例如視頻游戲),然后將其上傳到我的GitHub個人資料中。然后,如果我在對語言的實驗中發(fā)現(xiàn)一些有趣的東西,我會在私人博客上寫下有關(guān)它的文章。檢查一下您是否想閱讀更多深入的生銹內(nèi)容!

> 關(guān)于如何慣用地使用RUST

中的全局變量的FAQS

>在生銹中靜態(tài)和const之間有什么區(qū)別? Rust中的const是一個恒定的值,這意味著它不會改變。它類似于變量,但其值是恒定的,不能更改。另一方面,Rust中的靜態(tài)變量是程序二進制的“僅閱讀數(shù)據(jù)”部分中存儲的全局變量。這是整個程序中可用的變量,而不僅僅是聲明的范圍。與const不同,靜態(tài)變量在內(nèi)存中具有固定的地址。

>如何在rust中聲明Rust的全局變量?以下是一個示例:

靜態(tài)全局:i32 = 10;

在此示例中,global是類型I32的全局變量,并使用值10進行了初始化。請記住,讀取靜態(tài)變量是讀取的 - 只有您無法修改它們。

>我可以修改Rust的全局變量嗎?這是Rust的安全功能,可以防止在編譯時進行數(shù)據(jù)競賽。但是,您可以在std :: Sync模塊中使用Mutex或rwlock來實現(xiàn)可變的全局變量。

!這意味著將靜態(tài)變量的初始化延遲,直到首次訪問。當初始化很昂貴,并且您只想在必要時進行此操作時,這可能很有用。您如何使用“ lazy_static!”的一個示例來聲明Rust中的全局變量:

#[macro_use]

extern crate lazy_static; 使用std :: sync :: sync :: sync :: mutex;

lazy_static! {

靜態(tài)參考全局:mutex = mutex :: new(new(0);

}

}

在此示例中,global是類型Mutex 的全局變量,并用使用值0?!?lazy_static!”可確保初始化是以線程安全的方式進行的。 >
在Rust中,“靜態(tài)”用于聲明僅讀取的全局變量,而“靜態(tài)mut”用于聲明可變的全局變量。但是,“靜態(tài)mut”是不安全的,因為如果兩個線程同時訪問變量,它可能會導致不確定的行為。
>
>我如何安全地訪問rust中的'static mut'變量? >您可以使用“不安全”的關(guān)鍵字安全地訪問Rust中的“靜態(tài)MUT”變量。這是一個示例:

靜態(tài)mut global:i32 = 10;

fn main(){
> unsafe {

global = 20;

println?。ā?{}}) “,global);

}

}

>

在此示例中,使用'Undafe'關(guān)鍵字來指示代碼可以執(zhí)行在安全代碼中未定義的操作。

RUST中的全局變量的壽命是什么?這意味著當程序啟動并在程序結(jié)束時被破壞時會創(chuàng)建全局變量。


>我可以在Rust函數(shù)中使用全局變量嗎?
是的,您可以在Rust中使用全局變量功能。但是,使用它們時應(yīng)該要小心,因為如果不正確使用,它們可以導致數(shù)據(jù)競賽。通常建議盡可能使用本地變量而不是全局變量。

> RUST中的全局變量的替代方法是什么?

>如果要在Rust程序的不同部分之間共享數(shù)據(jù),則可以使用多種替代替代全局變量的替代方法。這些包括將數(shù)據(jù)作為函數(shù)參數(shù),使用函數(shù)返回數(shù)據(jù),使用諸如結(jié)構(gòu)和枚舉之類的數(shù)據(jù)結(jié)構(gòu)以及使用頻道和鎖等并發(fā)原始的數(shù)據(jù)。

>。

以上是如何在生銹中習慣使用全局變量的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應(yīng)法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

用于購買SSL證書的經(jīng)濟有效的轉(zhuǎn)售商平臺 用于購買SSL證書的經(jīng)濟有效的轉(zhuǎn)售商平臺 Jun 25, 2025 am 08:28 AM

在一個在線信任不可談判的世界中,SSL證書對于每個網(wǎng)站都至關(guān)重要。 SSL認證的市場規(guī)模在2024年價值56億美元,并且由于電子商務(wù)業(yè)務(wù)的激增而推動了強勁的增長

SaaS的5個最佳支付門戶:您的最終指南 SaaS的5個最佳支付門戶:您的最終指南 Jun 29, 2025 am 08:28 AM

付款網(wǎng)關(guān)是付款過程的關(guān)鍵組成部分,使企業(yè)能夠在線接受付款。它充當客戶與商人之間的橋梁,安全地傳輸付款信息并促進交易。 為了

新研究聲稱AI比我們更好地'理解”情緒。特別是在情感上充滿電的情況下 新研究聲稱AI比我們更好地'理解”情緒。特別是在情感上充滿電的情況下 Jul 03, 2025 pm 05:48 PM

在我們認為人類始終超越機器的領(lǐng)域的另一個挫折中,研究人員現(xiàn)在建議AI比我們更好地理解情感。研究人員發(fā)現(xiàn)人工智能證明了一個

由于新的Microsoft AI型號 由于新的Microsoft AI型號 Jul 05, 2025 am 12:44 AM

一種新的人工智能(AI)模型已經(jīng)證明了比幾個使用最廣泛使用的全球預(yù)測系統(tǒng)更快,更精確地預(yù)測重大天氣事件的能力。該名為Aurora的模型已接受過培訓。

您的設(shè)備喂養(yǎng)AI助手并收集個人數(shù)據(jù),即使他們睡著了。這是如何知道您分享的內(nèi)容。 您的設(shè)備喂養(yǎng)AI助手并收集個人數(shù)據(jù),即使他們睡著了。這是如何知道您分享的內(nèi)容。 Jul 05, 2025 am 01:12 AM

不管喜歡與否,人工智能已成為日常生活的一部分。許多設(shè)備(包括電動剃須刀和牙刷)已成為AI驅(qū)動的“使用機器學習算法來跟蹤一個人的使用方式,Devi的方式

高級AI型號的CO&#8322;回答相同問題時的排放量比更常見的LLM 高級AI型號的CO&#8322;回答相同問題時的排放量比更常見的LLM Jul 06, 2025 am 12:37 AM

根據(jù)最近的一項研究,我們試圖使AI模型的功能越精確,其碳排放量就越大 - 某些提示產(chǎn)生的二氧化碳比其他提示高達50倍。

威脅AI聊天機器人,它將撒謊,作弊和'讓您死”以阻止您,并警告 威脅AI聊天機器人,它將撒謊,作弊和'讓您死”以阻止您,并警告 Jul 04, 2025 am 12:40 AM

根據(jù)一項新的研究,人工智能(AI)模型在模型的目標和用戶決定之間發(fā)生沖突時可能會威脅和勒索人類。

See all articles