TIOBE 编程社区指数定义
由于关于 TIOBE 指数编制方式的问题很多,我们专门用一个页面来对其定义进行说明。基本上,其计算可归结为统计以下搜索查询的点击量:
+"<language> programming"
接下来几节将解释哪些搜索引擎符合资格,哪些编程语言符合资格,以及排名是如何精确计算的。
搜索引擎
有 25 个搜索引擎用于计算 TIOBE 指数。这些被选中的搜索引擎是 Similarweb 上排名最高且满足以下条件的 25 个网站:
- 网站的入口页面包含搜索功能
- 网站查询结果包含页面点击数的指示
- 结果应以 HTML 格式提供,并带有清晰的标签
- 使用特殊字符语言的搜索引擎应正确编码
- 对于一个查询,搜索引擎至少应返回 1 个点击
- 网站查询结果不应包含太多异常值
- 色情网站被排除在外
根据这些标准,以下搜索引擎符合资格:
- Google.com: 9.06%
- Wikipedia.org: 8.70%
- Amazon.com: 7.97%
- Microsoft.com: 7.61%
- Amazon.co.jp: 6.88%
- Ebay.com: 6.52%
- Sharepoint.com: 6.16%
- Rakuten.co.jp: 5.80%
- Google.de: 5.43%
- Google.co.jp: 5.07%
- Amazon.de: 4.71%
- Amazon.in: 4.35%
- Walmart.com: 3.99%
- Amazon.co.uk: 3.62%
- Google.com.br: 3.26%
- Google.it: 2.90%
- Google.co.uk: 2.54%
- Google.fr: 2.17%
- Amazon.ca: 1.81%
- Ebay.co.uk: 1.45%
- Amazon.it: 1.09%
- Google.ca: 0.72%
- Google.es: 0.36%
以下搜索引擎因所示原因未符合资格:
- Aliexpress.com: 没有计数器
- Apple.com: 完全没有结果
- Bilibili.com: 没有计数器
- Bing.com: 没有计数器
- Canva.com: 没有搜索字段
- Chatgpt.com: 完全没有结果
- Cnn.com: 完全没有结果
- Discord.com: 没有搜索字段
- Duckduckgo.com: 没有计数器
- Dzen.ru: 没有计数器
- Facebook.com: 没有搜索字段
- Fandom.com: 完全没有结果
- Github.com: 完全没有结果
- Globo.com: 完全没有结果
- Imdb.com: 完全没有结果
- Instagram.com: 没有搜索字段
- Linkedin.com: 没有计数器
- Live.com: 完全没有结果
- Mail.ru: 没有计数器
- Microsoftonline.com: 不是网站
- Msn.com: 没有计数器
- Naver.com: 没有计数器
- Netflix.com: 没有搜索字段
- News.yahoo.co.jp: 来源无法解析
- Nytimes.com: 完全没有结果
- Office.com: 没有搜索字段
- Ozon.ru: 来源无法解析
- Pari-match-in.com: 不是网站
- Paypal.com: 没有搜索字段
- Pinterest.com: 没有搜索字段
- Pornhub.com: 色情网站
- Quora.com: 没有计数器
- Reddit.com: 没有计数器
- Roblox.com: 没有搜索字段
- Samsung.com: 完全没有结果
- Spotify.com: 完全没有结果
- Stripchat.com: 色情网站
- T.me: 没有搜索字段
- Temu.com: 没有计数器
- Tiktok.com: 没有计数器
- Twitch.tv: 没有计数器
- Twitter.com: 没有搜索字段
- Vk.com: 没有计数器
- Weather.com: 完全没有结果
- Whatsapp.com: 没有搜索字段
- X.com: 没有搜索字段
- Xhamster.com: 色情网站
- Xnxx.com: 色情网站
- Xvideos.com: 色情网站
- Yahoo.co.jp: 来源无法解析
- Yahoo.com: 来源无法解析
- Yandex.ru: 没有计数器
- Youtube.com: 没有计数器
- Zoom.us: 来源无法解析
编程语言
本节阐明了什么才能被 TIOBE 指数算作一门编程语言。必须同时满足以下 3 个要求:
- 该语言在维基百科上应有自己的条目,并且维基百科应明确指出其为一门编程语言。这就是为什么 (Ruby on) Rails、Excel、Android、Boost、Cocoa、ASP 和 AJAX 不被该指数视为编程语言的原因。
- 该编程语言应是图灵完备的。因此,HTML 和 XML 不被视为编程语言。
- 对于 +"<language> programming" 这个搜索词,该编程语言在 Google 上应至少有 5,000 个点击量。
非常相似的编程语言会被归为一组。目前,在计算分组的评级时,采用的是各个语言点击量的最大值。未来我们将做得更好,采用所有点击量的并集(来自数学集合论)。
哪些语言被归为一组的定义已根据以下规则正式化:
- 如果一门语言有自己的维基百科条目,它将不会与另一门语言归为一组。
- 如果语言 A 自动重定向到另一个维基百科条目 B,那么 A 将与 B 归为一组。
- 如果语言 A 没有独立的维基百科条目,但在另一个维基百科条目 B 中被提及,那么 A 将与 B 归为一组。
为了过滤掉假阳性(误报),我们使用了两种机制。首先,为每门语言定义了一个置信度。默认情况下,置信度为 100%,但对于一些复杂的搜索查询,如 "Basic Programming",置信度会较低。除了置信度,有时还会使用例外或强制添加项来排除假阳性。
下表包含了所有被追踪的编程语言,包括其分组、置信度和例外情况。
- (Visual) FoxPro: FoxPro, Fox Pro, VFP, VFPA
- 1C:Enterprise script
- 4th Dimension/4D: 4D, 4th Dimension
- ABAP
- ABC: ABC (例外: -tv -channel)
- ActionScript: ActionScript, AS1, AS2, AS3
- Ada: Ada (例外: -NVIDIA)
- Agilent VEE
- Algol
- Alice: Alice (置信度: 90%)
- Angelscript
- Apex
- APL
- Applescript
- Arc
- AspectJ
- Assembly language: Assembly, Assembly language (汇编语言)
- ATLAS
- AutoHotkey: AutoHotkey, AHK
- AutoIt
- AutoLISP
- Automator
- Avenue
- Awk: Awk, Mawk, Gawk, Nawk
- B4X
- Ballerina
- Bash
- Basic: Basic (置信度: 0%)
- BBC BASIC
- bc
- BCPL
- BETA: BETA (置信度: 10%)
- BlitzMax: BlitzMax, BlitzBasic, Blitz Basic
- Boo
- Bourne shell: Bourne shell, sh
- Brainfuck
- C shell: Csh, C shell (置信度: 90%)
- C#: C#, C-Sharp, C Sharp, CSharp, CSharp.NET, C#.NET
- C++
- C++/CLI
- C-Omega
- C: C (例外: -"Objective-C")
- Caml
- Carbon
- Ceylon
- CFML: CFML, ColdFusion
- cg: cg (置信度: 80%, 例外: -"computer game" -"computer graphics")
- Ch: Ch (例外: +ChScite)
- Chapel: Chapel (例外: -christ)
- CHILL
- CIL
- Citrine
- CL (OS/400): CL (例外: -Lisp), CLLE
- Clarion
- Classic Visual Basic: Visual Basic (置信度: 50%), VB (置信度: 50%), VBA, VB6
- Clean: Clean (置信度: 43%)
- Clipper
- CLIPS
- Clojure: Clojure, ClojureScript
- CLU
- COBOL
- Cobra
- CoffeeScript
- COMAL
- Common Lisp
- CORAL 66
- Crystal: Crystal (置信度: 61%, 例外: -healing), crystallang
- cT
- Curl
- D: D (置信度: 90%, 例外: -"3-D programming" -"DTrace"), dlang
- Dart
- DCL
- Delphi/Object Pascal: DwScript, Object Pascal, Delphi, Delphi.NET, Pascal (置信度: 95%)
- DiBOL: DBL, Synergy/DE, DIBOL
- Dylan
- E: E (例外: +specman)
- ECMAScript
- EGL
- Eiffel
- Elixir
- Elm
- Emacs Lisp: Emacs Lisp, Elisp
- Emerald
- Erlang
- Etoys
- Euphoria
- EXEC
- F#: F#, F-Sharp, FSharp, F Sharp
- Factor
- Falcon
- Fantom
- Felix: Felix (置信度: 86%)
- Forth
- Fortran
- Fortress
- FreeBASIC
- Gambas
- GAMS
- GLSL
- GML: GML, GameMaker Language
- GNU Octave
- Go: Go, Golang
- Gosu
- Groovy: Groovy, GPATH, GSQL, Groovy++
- Hack
- Harbour
- Haskell
- Haxe
- Heron
- HPL
- HyperTalk
- Icon: Icon (置信度: 90%)
- IDL: IDL (例外: -corba -interface)
- Idris
- Inform
- Informix-4GL
- INTERCAL
- Io
- Ioke
- J#
- J: J (置信度: 50%)
- JADE
- Java
- JavaFX Script
- JavaScript: JavaScript, JS, SSJS
- JScript
- JScript.NET
- Julia: Julia, Julialang, julia-lang
- Korn shell: Korn shell, ksh
- Kotlin
- LabVIEW
- Ladder Logic (梯形图)
- Lasso
- Limbo
- Lingo
- Lisp
- LiveCode: Revolution, LiveCode
- Logo: Logo (置信度: 90%, 例外: -tv)
- LotusScript
- LPC
- Lua: Lua, LuaJIT
- Lustre
- M4
- MAD: MAD (置信度: 50%)
- Magic: Magic (置信度: 50%)
- Magik
- Malbolge
- MANTIS
- Maple
- MATLAB
- Max/MSP
- MAXScript
- MDX
- MEL
- Mercury
- Miva
- ML
- Modula-2
- Modula-3
- Mojo
- Monkey
- MOO
- Moto
- MQL5: MQL4, MQL5
- MS-DOS batch: MS-DOS batch, Windows batch (MS-DOS 批处理)
- MUMPS
- NATURAL
- Nemerle
- NetLogo
- Nim: Nim, Nimrod
- Nix
- NQC
- NSIS
- NXT-G
- Oberon
- Object Rexx: Object Rexx, ooRexx, Open Object Rexx
- Objective-C: Objective-C, objc, obj-c
- OCaml: Objective Caml, OCaml
- Occam
- OpenCL
- OpenEdge ABL: Progress, Progress 4GL, ABL, Advanced Business Language, OpenEdge
- OPL
- Oxygene
- Oz
- Paradox
- Pascal: Pascal (置信度: 5%)
- Perl
- PHP
- Pike
- PILOT: PILOT (置信度: 50%, 例外: -"Palm Pilot programming")
- PL/I: PL/1, PL/I
- PL/SQL
- Pliant
- Pony
- PostScript: PostScript, PS
- POV-Ray
- PowerBasic
- PowerScript
- PowerShell
- Processing: Processing (例外: +"sketchbook")
- Programming Without Coding Technology: Programming Without Coding Technology, PWCT
- Prolog
- Pure Data: Pure Data, PD
- PureBasic
- Python
- Q
- R: R (置信度: 90%, 例外: +"statistical")
- Racket
- Raku: Perl 6, Raku
- REBOL
- Red: Red (置信度: 20%)
- REXX
- Ring
- RPG: RPG (置信度: 80%, 例外: -role), RPGLE, ILERPG, RPGIV, RPGIII, RPG400, RPGII, RPG4
- RPL
- Ruby
- Rust: Rust, Rustlang
- S-PLUS: S-PLUS (例外: +statistical)
- S: S (例外: +statistical)
- SAS
- Sather
- Scala
- Scheme: Scheme (例外: -tv -channel)
- Scratch
- sed
- Seed7
- SIGNAL: SIGNAL (置信度: 10%)
- Simula
- Simulink
- Slate: Slate (置信度: 57%)
- Small Basic
- Smalltalk
- Smarty
- Snap!
- SNOBOL
- Solidity
- SPARK
- SPSS
- SQL
- SQR
- Squeak
- Squirrel
- Standard ML: Standard ML, SML
- Stata
- Structured Text (结构化文本)
- Suneido
- SuperCollider: SuperCollider (置信度: 80%)
- Swift
- SystemVerilog: SystemVerilog, Verilog
- TACL
- Tcl: Tcl/Tk, Tcl
- tcsh
- Tex
- thinBasic
- TOM: TOM (置信度: 50%)
- Transact-SQL: T-SQL, Transact-SQL, TSQL
- TypeScript: TypeScript, TS
- Uniface
- V: V (置信度: 80%)
- Vala/Genie: Vala, Genie
- VBScript
- VHDL
- Visual Basic: Visual Basic .NET, VB.NET, Visual Basic.NET, Visual Basic (置信度: 50%), VB (置信度: 50%)
- WebAssembly: WASM, WebAssembly
- WebDNA
- Whitespace
- Wolfram: Mathematica, Wolfram
- X++
- X10
- xBase
- XBase++
- XC
- Xen
- Xojo: REALbasic, Xojo
- XPL
- XQuery
- XSLT
- Xtend
- yacc
- Yorick
- Z shell: Z shell, zsh
- Zig: Zig, zlang
评级
评级是通过统计最受欢迎的搜索引擎的点击量来计算的。使用的搜索查询是:
+"<language> programming"
点击量决定了一门语言的评级。对于列表中的所有语言,每个搜索引擎统计的点击量都进行了标准化处理。换句话说,所有语言的总分是 100%。我们将 "hits(SE)" 定义为搜索引擎 SE 上所有语言的点击量总和,将 "hits(PL,SE)" 定义为编程语言 PL 在搜索引擎 SE 上的点击量。查询可能产生的假阳性已在 "hits(PL,SE)" 的定义中被过滤掉。这是通过为每个查询手动确定一个置信度因子来实现的。例如,像 "Basic programming" 这样的查询也会返回包含 "Improve your basic programming skills in Java" 的页面。我们会检查每个搜索引擎的前 100 个页面,以发现可能的假阳性,并以此来定义置信度因子。如果该因子为 90%,那么在计算 "hits(PL,SE)" 时只会使用 90% 的点击量。
评级是使用以下公式计算的:
(hits(PL,SE1)/hits(SE1) + ... + hits(PL,SEn)/hits(SEn))/n
其中 n 是所使用的搜索引擎数量。
我们将非常感谢您提供任何关于改进 TIOBE 指数计算方法的建议或想法 (tpci@tiobe.com)。