2024-11-13

Tcl 9 always thread-enabled

Tcl 9.0 的其中一個改變,就是移除了 --disable-threads 編譯選項,所以從 9.0.0 開始都會是 thread-enabled。不過也因為如此,如果你使用下列的方式檢查:

expr {[info exists ::tcl_platform(threaded)] && $::tcl_platform(threaded)}

在 Tcl 9 會得到答案為 0,因為 ::tcl_platform(threaded) 在 Tcl 9 中並不存在。

所以我改寫如下:

#
# Check support thread or not
#
proc is_threaded {} {
  # Tcl 9 always thread-enabled
  if {[package vcompare [info patchlevel] "9.0"] < 0} {
    return [expr {[info exists ::tcl_platform(threaded)] && $::tcl_platform(threaded)}]
  } else {
    return 1
  }
}

目前暫時先這樣,如果有更好的寫法我再更改寫法。
2024/11/16 更新寫法,嘗試使用 package vcompare 來比對版本號。

沒有留言: