Rosetta Code/Rank languages by number of users: Difference between revisions

From Rosetta Code
Content added Content deleted
mNo edit summary
m (→‎{{header|Wren}}: Minor tidy)
 
(48 intermediate revisions by 12 users not shown)
Line 1: Line 1:
{{task}}
{{draft task}}[[Category:Text processing]][[Category:Networking and Web Interaction]][[Category:Sorting]][[Category:Rosetta Code related]]
[[Category:Text processing]]
[[Category:Networking and Web Interaction]]
[[Category:Sorting]]
[[Category:Rosetta Code related]]


;Task:
Sort most popular programming languages based on the number of users on Rosetta Code. Show the languages with at least 100 users.
Sort most popular programming languages based on the number of users on Rosetta Code.


Show the languages with at least 100 users.
A way to solve the task:


Users of a language X are those referenced in the page https://rosettacode.org/wiki/Category:X_User, or preferably https://rosettacode.org/mw/index.php?title=Category:X_User&redirect=no to avoid redirections. In order to find the list of such categories, it's possible to first parse the entries of http://rosettacode.org/mw/index.php?title=Special:Categories&limit=5000.


;A method to solve the task:
Sample output on 17 december 2017:
Users of a computer programming language   '''X'''   are those referenced in the page:
https://rosettacode.org/wiki/Category:X_User, or preferably:
https://rosettacode.org/mw/index.php?title=Category:X_User&redirect=no to avoid re-directions.


In order to find the list of such categories,   it's possible to first parse the entries of:
<pre>Language Users Rank
http://rosettacode.org/mw/index.php?title=Special:Categories&limit=5000.
C 373 1

C++ 261 2
Then download and parse each computer language &nbsp; ''users'' &nbsp; category to find the number of users of that computer language.
Java 257 3

Python 243 4

JavaScript 186 5
Sample output on 18 February 2019:
PHP 163 6
Perl 162 7
<pre>Language Users
--------------------------
SQL 131 8
UNIX Shell 120 9
C 391
C sharp 113 10
Java 276
Pascal 109 11
C++ 275
BASIC 102 12</pre>
Python 262
JavaScript 238
Perl 171
PHP 167
SQL 138
UNIX Shell 131
BASIC 120
C sharp 118
Pascal 116
Haskell 102</pre>


A Rosetta Code user usually declares using a language with the [[Template:Mylang|mylang]] template. This template is expected to appear on the User page. However, in some cases it appears in a user Talk page. It's not necessary to take this into account. For instance, among the 373 C users in the table above, 3 are actually declared in a Talk page.
A Rosetta Code user usually declares using a language with the [[Template:Mylang|mylang]] template. This template is expected to appear on the User page. However, in some cases it appears in a user Talk page. It's not necessary to take this into account. For instance, among the 373 C users in the table above, 3 are actually declared in a Talk page.
<br><br>

=={{header|Go}}==
<syntaxhighlight lang="go">package main

import (
"fmt"
"io/ioutil"
"net/http"
"regexp"
"sort"
"strconv"
)

type Result struct {
lang string
users int
}

func main() {
const minimum = 25
ex := `"Category:(.+?)( User)?"(\}|,"categoryinfo":\{"size":(\d+),)`
re := regexp.MustCompile(ex)
page := "http://rosettacode.org/mw/api.php?"
action := "action=query"
format := "format=json"
fversion := "formatversion=2"
generator := "generator=categorymembers"
gcmTitle := "gcmtitle=Category:Language%20users"
gcmLimit := "gcmlimit=500"
prop := "prop=categoryinfo"
rawContinue := "rawcontinue="
page += fmt.Sprintf("%s&%s&%s&%s&%s&%s&%s&%s", action, format, fversion,
generator, gcmTitle, gcmLimit, prop, rawContinue)
resp, _ := http.Get(page)
body, _ := ioutil.ReadAll(resp.Body)
matches := re.FindAllStringSubmatch(string(body), -1)
resp.Body.Close()
var results []Result
for _, match := range matches {
if len(match) == 5 {
users, _ := strconv.Atoi(match[4])
if users >= minimum {
result := Result{match[1], users}
results = append(results, result)
}
}
}
sort.Slice(results, func(i, j int) bool {
return results[j].users < results[i].users
})

fmt.Println("Rank Users Language")
fmt.Println("---- ----- --------")
rank := 0
lastUsers := 0
lastRank := 0
for i, result := range results {
eq := " "
rank = i + 1
if lastUsers == result.users {
eq = "="
rank = lastRank
} else {
lastUsers = result.users
lastRank = rank
}
fmt.Printf(" %-2d%s %3d %s\n", rank, eq, result.users, result.lang)
}
}</syntaxhighlight>

{{out}}
<pre>
Rank Users Language
---- ----- --------
1 397 C
2 278 C++
2 = 278 Java
4 266 Python
5 240 JavaScript
6 171 Perl
7 168 PHP
8 139 SQL
9 131 UNIX Shell
10 121 C sharp
11 120 BASIC
12 118 Pascal
13 102 Haskell
14 93 Ruby
15 81 Fortran
16 70 Visual Basic
17 65 Prolog
18 61 Scheme
19 59 Common Lisp
20 58 AWK
20= 58 Lua
22 52 HTML
23 46 Batch File
24 45 Assembly
24= 45 X86 Assembly
26 43 Bash
27 40 Erlang
27= 40 MATLAB
29 39 Lisp
30 38 Forth
31 36 Visual Basic .NET
31= 36 Delphi
33 35 APL
33= 35 J
35 34 Tcl
35= 34 Brainf***
37 33 Objective-C
38 32 COBOL
38= 32 R
40 30 Go
40= 30 Mathematica
42 29 Perl 6
43 27 Clojure
44 25 OCaml
44= 25 AutoHotkey
44= 25 REXX
</pre>

=={{header|Julia}}==
<syntaxhighlight lang="julia">""" Rank languages on Rosetta Code's site by number of users."""

using Dates
using HTTP
using JSON3

const URL = "https://rosettacode.org/w/api.php?"
const PARAMS = ["action" => "query", "format" => "json", "formatversion" => "2", "generator" => "categorymembers",
"gcmtitle" => "Category:Language%20users", "gcmlimit" => "500", "rawcontinue" => "", "prop" => "categoryinfo"]

const resp = HTTP.get(URL * join(map(p -> p[1] * (p[2] == "" ? "" : ("=" * p[2])), PARAMS), "&"))
const counts = Pair{Int, String}[]

for p in JSON3.read(String(resp.body)).query.pages
contains(p.title, "Category") && push!(counts, p.categoryinfo.size => p.title)
end

println("Date: ", now(), "\nLanguage Users\n----------------------")
for p in sort!(filter(p -> p[1] >= 100, counts), rev = true)
println(rpad(replace(p[2], r"Category:(.+) User" => s"\1"), 16), lpad(p[1], 4))
end
</syntaxhighlight>{{out}}
<pre>
Date: 2022-09-03T21:17:29.428
Language Users
----------------------
C 441
Java 321
Python 319
C++ 314
JavaScript 291
PHP 190
Perl 186
SQL 167
UNIX Shell 151
Pascal 133
C sharp 132
BASIC 132
Haskell 115
Ruby 107
</pre>

=={{header|Nim}}==
<syntaxhighlight lang="nim">import algorithm, httpclient, json, strformat, strscans, strutils

const
Action = "action=query"
Format = "format=json"
FormatVersion = "formatversion=2"
Generator = "generator=categorymembers"
GcmTitle = "gcmtitle=Category:Language%20users"
GcmLimit = "gcmlimit=500"
Prop = "prop=categoryinfo"

Page = "http://rosettacode.org/w/api.php?" &
[Action, Format, Formatversion, Generator, GcmTitle, GcmLimit, Prop].join("&")

type Counts = tuple[lang: string, count: int]

proc cmp(a, b: Counts): int =
## Compare two count tuples. Place the one with greater count field first and when
## count fields are equal, place the one with the first name in alphabetic order.
result = cmp(b.count, a.count)
if result == 0: result = cmp(a.lang, b.lang)

var client = newHttpClient()
var counts: seq[Counts]
var url = Page

while true:

# Access to the page and load the JSON representation.
let response = client.get(url)
if response.status != $Http200: break
let root = response.body.parseJson()

# Extract language names and number of users.
for node in root{"query", "pages"}:
var lang: string
if node["title"].getStr().scanf("Category:$+ User", lang):
let count = node{"categoryinfo", "size"}.getInt()
counts.add (lang, count)
if "continue" notin root: break

# Load continuation page.
let gcmcont = root{"continue", "gcmcontinue"}.getStr()
let cont = root{"continue", "continue"}.getStr()
url = Page & fmt"&gcmcontinue={gcmcont}&continue={cont}"

# Sort and display.
counts.sort(cmp)
var rank, lastCount = 0
for i, (lang, count) in counts:
if count != lastCount:
rank = i + 1
lastCount = count
echo &"{rank:3} {count:4} - {lang}"</syntaxhighlight>

{{out}}
<pre> 1 451 - C
2 331 - Java
3 328 - Python
4 321 - C++
5 295 - JavaScript
6 194 - PHP
7 188 - Perl
8 170 - SQL
9 154 - UNIX Shell
10 136 - Pascal
11 135 - C sharp
12 134 - BASIC
13 115 - Haskell
14 109 - Ruby
15 94 - Fortran
16 76 - Visual Basic
17 73 - Scheme
18 70 - Prolog
19 68 - AWK
19 68 - Lua
21 66 - Common Lisp
22 62 - HTML
23 56 - X86 Assembly
24 50 - Forth
25 49 - Batch File
26 47 - Assembly
26 47 - Bash
28 45 - MATLAB
29 42 - Lisp
30 41 - APL
30 41 - Delphi
30 41 - Erlang
30 41 - Go
34 40 - R
35 39 - J
35 39 - Tcl
35 39 - Visual Basic .NET
38 38 - COBOL
39 37 - Objective-C
39 37 - Smalltalk
41 35 - Brainf***
42 33 - Clojure
42 33 - Mathematica
44 30 - OCaml
45 28 - LaTeX
45 28 - REXX
47 27 - AutoHotkey
47 27 - Emacs Lisp
47 27 - PostScript
50 26 - Scala
50 26 - Sed
50 26 - VBScript
53 25 - 6502 Assembly
53 25 - CSS
53 25 - Perl 6
53 25 - Racket
57 24 - MySQL
57 24 - XSLT
59 22 - Rust
60 21 - 8086 Assembly
60 21 - Logo
60 21 - VBA
60 21 - Z80 Assembly
64 19 - Apex
64 19 - F Sharp
64 19 - Julia
64 19 - Make
68 18 - AppleScript
68 18 - Factor
68 18 - PL/I
68 18 - TI-83 BASIC
72 17 - D
72 17 - Standard ML
74 16 - Modula-2
74 16 - PowerShell
76 15 - ARM Assembly
76 15 - ActionScript
76 15 - Icon
76 15 - Nim
80 14 - Maxima
80 14 - SNOBOL4
82 13 - 80386 Assembly
82 13 - Befunge
82 13 - Euphoria
85 12 - CoffeeScript
85 12 - Unicon
87 11 - Eiffel
87 11 - Elixir
87 11 - Groovy
87 11 - Korn Shell
87 11 - MIPS Assembly
87 11 - Octave
87 11 - PARI/GP
87 11 - TypeScript
87 11 - UnixPipes
...
394 0 - Vorpal
394 0 - Vox
394 0 - Wrapl
394 0 - Zonnon</pre>

=={{header|Perl}}==
<syntaxhighlight lang="perl">use strict;
use warnings;
use JSON;
use URI::Escape;
use LWP::UserAgent;

my $client = LWP::UserAgent->new;
$client->agent("Rosettacode Perl task solver");
my $url = 'http://rosettacode.org/mw';
my $minimum = 100;

sub uri_query_string {
my(%fields) = @_;
'action=query&format=json&formatversion=2&' .
join '&', map { $_ . '=' . uri_escape($fields{$_}) } keys %fields
}

sub mediawiki_query {
my($site, $type, %query) = @_;
my $url = "$site/api.php?" . uri_query_string(%query);
my %languages = ();

my $req = HTTP::Request->new( GET => $url );
my $response = $client->request($req);
$response->is_success or die "Failed to GET '$url': ", $response->status_line;
my $data = decode_json($response->content);
for my $row ( @{${$data}{query}{pages}} ) {
next unless defined $$row{categoryinfo} && $$row{title} =~ /User/;
my($title) = $$row{title} =~ /Category:(.*?) User/;
my($count) = $$row{categoryinfo}{pages};
$languages{$title} = $count;
}
%languages;
}

my %table = mediawiki_query(
$url, 'pages',
( generator => 'categorymembers',
gcmtitle => 'Category:Language users',
gcmlimit => '999',
prop => 'categoryinfo',
rawcontinue => '',
)
);

for my $k (sort { $table{$b} <=> $table{$a} } keys %table) {
printf "%4d %s\n", $table{$k}, $k if $table{$k} > $minimum;
}</syntaxhighlight>
{{out}}
<pre> 397 C
278 Java
278 C++
266 Python
240 JavaScript
171 Perl
168 PHP
139 SQL
131 UNIX Shell
121 C sharp
120 BASIC
118 Pascal
102 Haskell</pre>

=={{header|Phix}}==
See [[Rosetta_Code/Rank_languages_by_popularity#Phix|Rank languages by popularity]], just set output_users to true.
{{out}}
<pre>
1: 397 - C
2: 278 - C++
=: 278 - Java
4: 266 - Python
5: 240 - JavaScript
6: 171 - Perl
7: 168 - PHP
8: 139 - SQL
9: 131 - UNIX Shell
10: 121 - C sharp
11: 120 - BASIC
12: 118 - Pascal
13: 102 - Haskell
14: 93 - Ruby
15: 81 - Fortran
16: 70 - Visual Basic
17: 65 - Prolog
18: 61 - Scheme
19: 59 - Common Lisp
20: 58 - AWK
</pre>

=={{header|Python}}==
{{libheader|requests}}

<syntaxhighlight lang="python">"""Rank languages by number of users. Requires Python >=3.5"""

import requests

# MediaWiki API URL.
URL = "http://rosettacode.org/mw/api.php"

# Query string parameters
PARAMS = {
"action": "query",
"format": "json",
"formatversion": 2,
"generator": "categorymembers",
"gcmtitle": "Category:Language users",
"gcmlimit": 500,
"prop": "categoryinfo",
}


def fetch_data():
counts = {}
continue_ = {"continue": ""}

# Keep making HTTP requests to the MediaWiki API if more records are
# available.
while continue_:
resp = requests.get(URL, params={**PARAMS, **continue_})
resp.raise_for_status()

data = resp.json()

# Grab the title (language) and size (count) only.
counts.update(
{
p["title"]: p.get("categoryinfo", {}).get("size", 0)
for p in data["query"]["pages"]
}
)

continue_ = data.get("continue", {})

return counts


if __name__ == "__main__":
# Request data from the MediaWiki API.
counts = fetch_data()

# Filter out languages that have less than 100 users.
at_least_100 = [(lang, count) for lang, count in counts.items() if count >= 100]

# Sort languages by number of users
top_languages = sorted(at_least_100, key=lambda x: x[1], reverse=True)

# Pretty print
for i, lang in enumerate(top_languages):
print(f"{i+1:<5}{lang[0][9:][:-5]:<20}{lang[1]}")
</syntaxhighlight>

{{out}}
<pre>
1 C 423
2 Java 308
3 C++ 301
4 Python 301
5 JavaScript 279
6 PHP 182
7 Perl 181
8 SQL 158
9 UNIX Shell 149
10 Pascal 130
11 C sharp 130
12 BASIC 129
13 Haskell 111
14 Ruby 102
</pre>

=={{header|Racket}}==

Note: the implementation is very similar to [[Rosetta_Code/Rank_languages_by_popularity#Racket|Rank languages by popularity]].

<syntaxhighlight lang="racket">#lang racket
(require racket/hash
net/url
json)
(define limit 64)
(define (replacer cat) (regexp-replace #rx"^Category:(.*?) User$" cat "\\1"))
(define category "Category:Language users")
(define entries "users")
(define api-url (string->url "http://rosettacode.org/mw/api.php"))
(define (make-complete-url gcmcontinue)
(struct-copy url api-url
[query `([format . "json"]
[action . "query"]
[generator . "categorymembers"]
[gcmtitle . ,category]
[gcmlimit . "200"]
[gcmcontinue . ,gcmcontinue]
[continue . ""]
[prop . "categoryinfo"])]))

(define @ hash-ref)

(define table (make-hash))
(let loop ([gcmcontinue ""])
(define resp (read-json (get-pure-port (make-complete-url gcmcontinue))))
(hash-union! table
(for/hash ([(k v) (in-hash (@ (@ resp 'query) 'pages))])
(values (@ v 'title #f) (@ (@ v 'categoryinfo (hash)) 'size 0))))
(cond [(@ resp 'continue #f) => (λ (c) (loop (@ c 'gcmcontinue)))]))
(for/fold ([prev #f] [rank #f] #:result (void))
([item (in-list (sort (hash->list table) > #:key cdr))] [i (in-range limit)])
(match-define (cons cat size) item)
(define this-rank (if (equal? prev size) rank (add1 i)))
(printf "Rank: ~a ~a ~a\n"
(~a this-rank #:align 'right #:min-width 2)
(~a (format "(~a ~a)" size entries) #:align 'right #:min-width 14)
(replacer cat))
(values size this-rank))</syntaxhighlight>

{{out}}
<pre>
Rank: 1 (402 users) C
Rank: 2 (283 users) Java
Rank: 3 (281 users) C++
Rank: 4 (270 users) Python
Rank: 5 (243 users) JavaScript
Rank: 6 (175 users) Perl
Rank: 7 (171 users) PHP
Rank: 8 (142 users) SQL
Rank: 9 (134 users) UNIX Shell
Rank: 10 (123 users) C sharp
Rank: 10 (123 users) BASIC
Rank: 12 (119 users) Pascal
Rank: 13 (105 users) Haskell
Rank: 14 (94 users) Ruby
Rank: 15 (83 users) Fortran
Rank: 16 (71 users) Visual Basic
Rank: 17 (67 users) Prolog
Rank: 18 (63 users) Scheme
Rank: 19 (61 users) Common Lisp
Rank: 20 (59 users) AWK
Rank: 20 (59 users) Lua
Rank: 22 (52 users) HTML
Rank: 23 (46 users) X86 Assembly
Rank: 23 (46 users) Batch File
Rank: 23 (46 users) Assembly
Rank: 26 (44 users) Bash
Rank: 27 (40 users) Erlang
Rank: 27 (40 users) MATLAB
Rank: 29 (39 users) Forth
Rank: 29 (39 users) Lisp
Rank: 31 (37 users) Visual Basic .NET
Rank: 32 (36 users) APL
Rank: 32 (36 users) Tcl
Rank: 32 (36 users) Delphi
Rank: 35 (35 users) J
Rank: 36 (34 users) Brainf***
Rank: 37 (33 users) COBOL
Rank: 37 (33 users) Objective-C
Rank: 39 (32 users) Go
Rank: 39 (32 users) R
Rank: 41 (30 users) Mathematica
Rank: 42 (29 users) Perl 6
Rank: 43 (28 users) Clojure
Rank: 44 (25 users) OCaml
Rank: 44 (25 users) AutoHotkey
Rank: 44 (25 users) REXX
Rank: 47 (24 users) PostScript
Rank: 48 (23 users) Sed
Rank: 48 (23 users) Emacs Lisp
Rank: 48 (23 users) LaTeX
Rank: 51 (22 users) VBScript
Rank: 51 (22 users) CSS
Rank: 51 (22 users) MySQL
Rank: 51 (22 users) Scala
Rank: 55 (20 users) XSLT
Rank: 55 (20 users) Racket
Rank: 57 (19 users) 6502 Assembly
Rank: 58 (18 users) Z80 Assembly
Rank: 58 (18 users) Logo
Rank: 60 (17 users) Factor
Rank: 60 (17 users) Make
Rank: 60 (17 users) 8086 Assembly
Rank: 60 (17 users) F Sharp
Rank: 64 (16 users) PL/I
</pre>

=={{header|Raku}}==
(formerly Perl 6)
{{works with|Rakudo|2017.11}}
Use the mediawiki API rather than web scraping since it is much faster and less resource intensive. Show languages with more than 25 users since that is still a pretty short list and to demonstrate how tied rankings are handled. Change the '''$minimum''' parameter to adjust what the cut-off point will be.

This is all done in a single pass; ties are not detected until a language has the same count as a previous one, so ties are marked by a '''T''' next to the count indicating that '''this''' language has the same count as the '''previous'''.

<syntaxhighlight lang="raku" line>use HTTP::UserAgent;
use URI::Escape;
use JSON::Fast;

my $client = HTTP::UserAgent.new;

my $url = 'https://rosettacode.org/w';

my $start-time = now;

say "========= Generated: { DateTime.new(time) } =========";

my $lang = 1;
my $rank = 0;
my $last = 0;
my $tie = ' ';
my $minimum = 25;

.say for
mediawiki-query(
$url, 'pages',
:generator<categorymembers>,
:gcmtitle<Category:Language users>,
:gcmlimit<350>,
:rawcontinue(),
:prop<categoryinfo>
)

.map({ %( count => .<categoryinfo><pages> || 0,
lang => .<title>.subst(/^'Category:' (.+) ' User'/, ->$/ {$0}) ) })

.sort( { -.<count>, .<syntaxhighlight lang="text"> } )

.map( { last if .<count> < $minimum; display(.<count>, .<syntaxhighlight lang="text">) } );

say "========= elapsed: {(now - $start-time).round(.01)} seconds =========";

sub display ($count, $which) {
if $last != $count { $last = $count; $rank = $lang; $tie = ' ' } else { $tie = 'T' };
sprintf "#%3d Rank: %2d %s with %-4s users: %s", $lang++, $rank, $tie, $count, $which;
}

sub mediawiki-query ($site, $type, *%query) {
my $url = "$site/api.php?" ~ uri-query-string(
:action<query>, :format<json>, :formatversion<2>, |%query);
my $continue = '';

gather loop {
my $response = $client.get("$url&$continue");
my $data = from-json($response.content);
take $_ for $data.<query>.{$type}.values;
$continue = uri-query-string |($data.<query-continue>{*}».hash.hash or last);
}
}

sub uri-query-string (*%fields) {
join '&', %fields.map: { "{.key}={uri-escape .value}" }
}</syntaxhighlight>

{{out}}
<pre>========= Generated: 2022-09-02T20:59:20Z =========
# 1 Rank: 1 with 441 users: C
# 2 Rank: 2 with 321 users: Java
# 3 Rank: 3 with 319 users: Python
# 4 Rank: 4 with 314 users: C++
# 5 Rank: 5 with 291 users: JavaScript
# 6 Rank: 6 with 190 users: PHP
# 7 Rank: 7 with 186 users: Perl
# 8 Rank: 8 with 167 users: SQL
# 9 Rank: 9 with 151 users: UNIX Shell
# 10 Rank: 10 with 133 users: Pascal
# 11 Rank: 11 with 132 users: BASIC
# 12 Rank: 11 T with 132 users: C sharp
# 13 Rank: 13 with 115 users: Haskell
# 14 Rank: 14 with 107 users: Ruby
# 15 Rank: 15 with 94 users: Fortran
# 16 Rank: 16 with 75 users: Visual Basic
# 17 Rank: 17 with 72 users: Scheme
# 18 Rank: 18 with 70 users: Prolog
# 19 Rank: 19 with 68 users: AWK
# 20 Rank: 19 T with 68 users: Lua
# 21 Rank: 21 with 66 users: Common Lisp
# 22 Rank: 22 with 61 users: HTML
# 23 Rank: 23 with 55 users: X86 Assembly
# 24 Rank: 24 with 50 users: Forth
# 25 Rank: 25 with 49 users: Batch File
# 26 Rank: 26 with 47 users: Assembly
# 27 Rank: 27 with 45 users: Bash
# 28 Rank: 27 T with 45 users: MATLAB
# 29 Rank: 29 with 42 users: Lisp
# 30 Rank: 30 with 41 users: APL
# 31 Rank: 30 T with 41 users: Erlang
# 32 Rank: 32 with 40 users: Delphi
# 33 Rank: 32 T with 40 users: R
# 34 Rank: 34 with 39 users: J
# 35 Rank: 34 T with 39 users: Visual Basic .NET
# 36 Rank: 36 with 38 users: Go
# 37 Rank: 36 T with 38 users: Tcl
# 38 Rank: 38 with 37 users: COBOL
# 39 Rank: 39 with 36 users: Smalltalk
# 40 Rank: 40 with 35 users: Brainf***
# 41 Rank: 40 T with 35 users: Objective-C
# 42 Rank: 42 with 34 users: Clojure
# 43 Rank: 43 with 33 users: Mathematica
# 44 Rank: 44 with 30 users: OCaml
# 45 Rank: 45 with 28 users: LaTeX
# 46 Rank: 46 with 27 users: AutoHotkey
# 47 Rank: 46 T with 27 users: Emacs Lisp
# 48 Rank: 46 T with 27 users: PostScript
# 49 Rank: 46 T with 27 users: REXX
# 50 Rank: 50 with 26 users: Perl 6
# 51 Rank: 50 T with 26 users: Sed
# 52 Rank: 52 with 25 users: CSS
# 53 Rank: 52 T with 25 users: Scala
# 54 Rank: 52 T with 25 users: VBScript
========= elapsed: 1.48 seconds =========

========= elapsed: 1.45 seconds =========</pre>

=={{header|REXX}}==
(Native) REXX doesn't support web-page reading, so the mentioned &nbsp; ''Rosetta Code categories'' &nbsp; and
<br>''Rosetta Code Languages'' &nbsp; were downloaded to local files.

<br>This program reads the &nbsp; ''Languages'' &nbsp; file &nbsp; (looking for a language user) &nbsp; and uses the contents of <br>that file for a validation of the &nbsp; ''categories'' &nbsp; file.
<br>This essentially is a perfect filter for the &nbsp; ''Rosetta Code categories'' &nbsp; file.

The &nbsp; '''catHeap''' &nbsp; variable in the REXX program is just a long string of all the records in the web-file of the
<br>Rosetta Code categories, with a special character ('''sep''') that separates each count of users
<br>for a computer programming language entry (name).

The mechanism is to use a (sparse) stemmed array which holds only the names of languages which
<br>(for most REXXes) uses a hashing algorithm to locate the entry &nbsp; (which is very fast).

Programming note: &nbsp; (REXX doesn't handle Unicode characters) &nbsp; some special cases that are translated:
:::* &nbsp; '''╬£C++''' &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; translated into &nbsp; '''µC++''' &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; [Greek micro]
:::* &nbsp; '''╨£╨Ü-61/52''' &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; translated into &nbsp; '''MK-61/52''' &nbsp; [Cyrillic &nbsp; '''МК-61/52'''])
:::* &nbsp; '''??-61/52''' &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; translated into &nbsp; '''MK-61/52''' &nbsp; [Cyrillic &nbsp; '''МК-61/52'''])
:::* &nbsp; '''D├⌐j├á Vu''' &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; translated into &nbsp; '''Déjà Vu'''
:::* &nbsp; '''Cach├⌐''' &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; translated into &nbsp; '''Caché'''
:::* &nbsp; '''F┼ìrmul├ª''' &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; translated into &nbsp; '''Fôrmulæ'''
:::* &nbsp; '''உயிர்/Uyir''' &nbsp;&nbsp; &nbsp; translated into &nbsp; '''Uyir'''
:::* &nbsp; '''МiniZinc''' &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; translated into &nbsp; '''MiniZinc'''
(The 3<sup>rd</sup> entry is most likely caused by the inability to render unsupported glyphs when it was first used to add that language.)


Code was added to support the renaming of the computer programming language &nbsp; '''Perl 6''' &nbsp; ──► &nbsp; '''Raku'''.

Note that this REXX example properly ranks tied languages.
<syntaxhighlight lang="rexx">/*REXX program reads 2 files & displays a ranked list of Rosetta Code languages by users*/
parse arg catFID lanFID outFID . /*obtain optional arguments from the CL*/
call init /*initialize some REXX variables. */
call get /*obtain data from two separate files. */
call eSort #,0 /*sort languages along with members. */
call tSort /* " " that are tied in rank.*/
call eSort #,1 /* " " along with members. */
call out /*create the RC_USER.OUT (output) file.*/
exit 0 /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
commas: parse arg _; do jc=length(_)-3 to 1 by -3; _= insert(",",_,jc); end; return _
s: if arg(1)==1 then return arg(3); return word(arg(2) 's',1) /*pluralizer.*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
eSort: procedure expose #. @. !tr.; arg N,p2; h= N /*sort: number of members*/
do while h>1; h= h % 2 /*halve number of records*/
do i=1 for N-h; j= i; k= h + i /*sort this part of list.*/
if p2 then do while !tR.k==!tR.j & @.k>@.j /*this uses a hard swap ↓*/
@= @.j; #= !tR.j; @.j= @.k; !tR.j= !tR.k; @.k= @; !tR.k= #
if h>=j then leave; j= j - h; k= k - h
end /*while !tR.k==···*/
else do while #.k<#.j /*this uses a hard swap ↓*/
@= @.j; #= #.j; @.j= @.k; #.j= #.k; @.k= @; #.k= #
if h>=j then leave; j= j - h; k= k - h
end /*while #.k<···*/
end /*i*/ /*hard swaps needed for embedded blanks.*/
end /*while h>1*/; return
/*──────────────────────────────────────────────────────────────────────────────────────*/
get: langs= 0; call rdr 'languages' /*assign languages ───► L.ααα */
call rdr 'categories' /*append categories ───► catHeap */
#= 0
do j=1 until catHeap=='' /*process the heap of categories. */
parse var catHeap cat.j (sep) catHeap /*get a category from the catHeap. */
parse var cat.j cat.j '<' "(" mems . /*untangle the strange─looking string. */
cat.j= space(cat.j); ?=cat.j; upper ? /*remove any superfluous blanks. */
if ?=='' | \L.? then iterate /*it's blank or it's not a language. */
if pos(',', mems)\==0 then mems= space(translate(mems,,","), 0) /*¬commas.*/
if \datatype(mems, 'W') then iterate /*is the "members" number not numeric? */
#.0= #.0 + mems /*bump the number of members found. */
if u.?\==0 then do; do f=1 for # until ?==@u.f
end /*f*/
#.f= #.f + mems; iterate j /*languages in different cases.*/
end /* [↑] handle any possible duplicates.*/
u.?= u.? + 1; #= # + 1 /*bump a couple of counters. */
#.#= #.# + mems; @.#= cat.j; @u.#=? /*bump the counter; assign it (upper).*/
end /*j*/

!.=; @tno= '(total) number of' /*array holds indication of TIED langs.*/
call tell right(commas(#), 9) @tno 'languages detected in the category file'
call tell right(commas(langs),9) ' " " " " " " " language "'
call tell right(commas(#.0), 9) @tno 'entries (users of lanugages) detected', , 1
term= 0
return /*don't show any more msgs──►term. [↑] */
/*──────────────────────────────────────────────────────────────────────────────────────*/
init: sep= '█'; L.=0; #.=0; u.=#.; catHeap=; term=1; old.= /*assign some REXX vars*/
if catFID=='' then catFID= "RC_USER.CAT" /*Not specified? Then use the default.*/
if lanFID=='' then lanFID= "RC_USER.LAN" /* " " " " " " */
if outFID=='' then outFID= "RC_USER.OUT" /* " " " " " " */
call tell center('timestamp: ' date() time("Civil"),79,'═'), 2, 1; return
/*──────────────────────────────────────────────────────────────────────────────────────*/
out: w= length( commas(#) ); rank= 0 /* [↓] show by ascending rank of lang.*/
do t=# by -1 for #; rank= rank + 1 /*bump rank of a programming language. */
call tell right('rank:' right(commas(!tR.t), w), 20-1) right(!.t, 7),
right('('commas(#.t) left("entr"s(#.t, 'ies', "y")')', 9), 20) @.t
end /*#*/ /* [↑] S(···) pluralizes a word. */
call tell left('', 27) "☼ end─of─list. ☼", 1, 2; return /*bottom title.*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
rdr: arg which 2; igAst= 1 /*ARG uppers WHICH, obtain the 1st char*/
if which=='L' then inFID= lanFID /*use this fileID for the languages. */
if which=='C' then inFID= catFID /* " " " " " categories. */
Uyir= 'உயிர்/Uyir' /*Unicode (in text) name for Uyir */
old.0= '╬£C++' ; new.0= "µC++" /*Unicode ╬£C++ ───► ASCII─8: µC++ */
old.1= 'UC++' ; new.1= "µC++" /*old UC++ ───► ASCII─8: µC++ */
old.2= '╨£╨Ü-' ; new.2= "MK-" /*Unicode ╨£╨Ü─ ───► ASCII-8: MK- */
old.3= 'D├⌐j├á' ; new.3= "Déjà" /*Unicode ├⌐j├á ───► ASCII─8: Déjà */
old.4= 'Cach├⌐' ; new.4= "Caché" /*Unicode Cach├⌐ ───► ASCII─8: Caché */
old.5= '??-61/52' ; new.5= "MK-61/52" /*somewhere past, a mis─translated: MK-*/
old.6= 'F┼ìrmul├ª' ; new.6= 'Fôrmulæ' /*Unicode ───► ASCII─8: Fôrmulæ */
old.7= '╨£iniZinc' ; new.7= 'MiniZinc' /*Unicode ───► ASCII─8: MiniZinc*/
old.8= Uyir ; new.8= 'Uyir' /*Unicode ───► ASCII─8: Uyir */
old.9= 'Perl 6' ; new.9= 'Raku' /* (old name) ───► (new name) */

do recs=0 while lines(inFID) \== 0 /*read a file, a single line at a time.*/
$= translate( linein(inFID), , '9'x) /*handle any stray TAB ('09'x) chars.*/
$$= space($); if $$=='' then iterate /*ignore all blank lines in the file(s)*/
do v=0 while old.v \== '' /*translate Unicode variations of langs*/
if pos(old.v, $$) \==0 then $$= changestr(old.v, $$, new.v)
end /*v*/ /* [↑] handle different lang spellings*/
if igAst then do; igAst= pos(' * ', $)==0; if igAst then iterate; end
if pos('RETRIEVED FROM', translate($$))\==0 then leave /*pseudo End─Of─Data?.*/
if which=='L' then do; if left($$, 1)\=="*" then iterate /*lang ¬legitimate?*/
parse upper var $$ '*' $$ "<"; $$= space($$)
if $$=='' then iterate
$$= $$ 'USER'
L.$$= 1
langs= langs + 1 /*bump # of languages/users found.*/
iterate
end /* [↓] extract computer language name.*/
if left($$, 1)=='*' then $$= sep || space( substr($$, 2) )
catHeap= catHeap $$ /*append to the catHeap (CATegory) heap*/
end /*recs*/
call tell right( commas(recs), 9) 'records read from file: ' inFID
return
/*──────────────────────────────────────────────────────────────────────────────────────*/
tell: do '0'arg(2); call lineout outFID," " ; if term then say ; end
call lineout outFID,arg(1) ; if term then say arg(1)
do '0'arg(3); call lineout outFID," " ; if term then say ; end
return /*show BEFORE blank lines (if any), message, show AFTER blank lines.*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
tSort: tied=; r= 0 /*add true rank (tR) ───► the entries. */
do j=# by -1 for #; r= r+1; tR= r; !tR.j= r; jp= j+1; jm= j-1
if tied=='' then pR= r; tied= /*handle when language rank is untied. */
if #.j==#.jp | #.j==#.jm then do; !.j= '[tied]'; tied= !.j; end
if #.j==#.jp then do; tR= pR; !tR.j= pR; end
else pR= r
end /*j*/; return</syntaxhighlight>
{{out|output|text=&nbsp; when using the default inputs:}}
<pre style="height:165ex">
═════════════════════════timestamp: 7 Apr 2021 6:44pm═════════════════════════

1,094 records read from file: RC_USER.LAN
7,641 records read from file: RC_USER.CAT
474 (total) number of languages detected in the category file
835 " " " " " " " language "
6,057 (total) number of entries (users of lanugages) detected

rank: 1 (424 entries) C User
rank: 2 (309 entries) JAVA User
rank: 3 (302 entries) C++ User
rank: 4 (299 entries) Python User
rank: 5 (280 entries) JavaScript User
rank: 6 (183 entries) PHP User
rank: 7 (181 entries) Perl User
rank: 8 (158 entries) SQL User
rank: 9 (151 entries) UNIX Shell User
rank: 10 (132 entries) C Sharp User
rank: 11 [tied] (130 entries) BASIC User
rank: 11 [tied] (130 entries) Pascal User
rank: 13 (111 entries) Haskell User
rank: 14 (102 entries) Ruby User
rank: 15 (96 entries) FORTRAN User
rank: 16 (73 entries) Visual Basic User
rank: 17 [tied] (70 entries) Prolog User
rank: 17 [tied] (70 entries) Scheme User
rank: 19 (69 entries) AWK User
rank: 20 (66 entries) LUA User
rank: 21 (62 entries) Common Lisp User
rank: 22 (51 entries) X86 Assembly User
rank: 23 [tied] (50 entries) Batch File User
rank: 23 [tied] (50 entries) FORTH User
rank: 25 [tied] (47 entries) Assembly User
rank: 25 [tied] (47 entries) MATLAB User
rank: 27 (45 entries) LISP User
rank: 28 [tied] (40 entries) ADA User
rank: 28 [tied] (40 entries) Delphi User
rank: 28 [tied] (40 entries) Erlang User
rank: 28 [tied] (40 entries) TCL User
rank: 32 (39 entries) R User
rank: 33 [tied] (38 entries) COBOL User
rank: 33 [tied] (38 entries) Visual Basic .NET User
rank: 35 [tied] (37 entries) APL User
rank: 35 [tied] (37 entries) J User
rank: 37 [tied] (36 entries) Objective-C User
rank: 37 [tied] (36 entries) SmallTalk User
rank: 39 (35 entries) Go User
rank: 40 (34 entries) Brainf*** User
rank: 41 [tied] (32 entries) Clojure User
rank: 41 [tied] (32 entries) Mathematica User
rank: 43 (30 entries) Raku User
rank: 44 [tied] (29 entries) OCaml User
rank: 44 [tied] (29 entries) REXX User
rank: 46 (27 entries) PostScript User
rank: 47 [tied] (26 entries) Emacs Lisp User
rank: 47 [tied] (26 entries) LaTeX User
rank: 47 [tied] (26 entries) Sed User
rank: 50 (25 entries) AutoHotkey User
rank: 51 [tied] (24 entries) 6502 Assembly User
rank: 51 [tied] (24 entries) MySQL User
rank: 53 [tied] (23 entries) Racket User
rank: 53 [tied] (23 entries) Scala User
rank: 53 [tied] (23 entries) VBScript User
rank: 53 [tied] (23 entries) XSLT User
rank: 57 (21 entries) 8086 Assembly User
rank: 58 (20 entries) F Sharp User
rank: 59 [tied] (19 entries) Rust User
rank: 59 [tied] (19 entries) TI-83 BASIC User
rank: 59 [tied] (19 entries) VBA User
rank: 59 [tied] (19 entries) Z80 Assembly User
rank: 63 [tied] (18 entries) Factor User
rank: 63 [tied] (18 entries) Logo User
rank: 63 [tied] (18 entries) Make User
rank: 63 [tied] (18 entries) PowerShell User
rank: 67 [tied] (17 entries) Apex User
rank: 67 [tied] (17 entries) PL/I User
rank: 67 [tied] (17 entries) Standard ML User
rank: 67 [tied] (17 entries) Swift User
rank: 71 [tied] (16 entries) D User
rank: 71 [tied] (16 entries) Julia User
rank: 71 [tied] (16 entries) Modula-2 User
rank: 74 [tied] (15 entries) ARM Assembly User
rank: 74 [tied] (15 entries) ActionScript User
rank: 74 [tied] (15 entries) AppleScript User
rank: 74 [tied] (15 entries) Icon User
rank: 78 [tied] (14 entries) Maxima User
rank: 78 [tied] (14 entries) SNOBOL4 User
rank: 80 [tied] (13 entries) Befunge User
rank: 80 [tied] (13 entries) CoffeeScript User
rank: 80 [tied] (13 entries) Nim User
rank: 83 [tied] (12 entries) 80386 Assembly User
rank: 83 [tied] (12 entries) Euphoria User
rank: 83 [tied] (12 entries) Unicon User
rank: 86 [tied] (11 entries) Eiffel User
rank: 86 [tied] (11 entries) Elixir User
rank: 86 [tied] (11 entries) Groovy User
rank: 86 [tied] (11 entries) Octave User
rank: 86 [tied] (11 entries) PARI/GP User
rank: 91 [tied] (10 entries) Dc User
rank: 91 [tied] (10 entries) MIPS Assembly User
rank: 91 [tied] (10 entries) PL/SQL User
rank: 91 [tied] (10 entries) SAS User
rank: 91 [tied] (10 entries) UnixPipes User
rank: 96 [tied] (9 entries) AutoIt User
rank: 96 [tied] (9 entries) BBC BASIC User
rank: 96 [tied] (9 entries) JCL User
rank: 96 [tied] (9 entries) M4 User
rank: 96 [tied] (9 entries) Oz User
rank: 96 [tied] (9 entries) Processing User
rank: 96 [tied] (9 entries) REBOL User
rank: 96 [tied] (9 entries) TypeScript User
rank: 104 [tied] (8 entries) 68000 Assembly User
rank: 104 [tied] (8 entries) Gnuplot User
rank: 104 [tied] (8 entries) LabVIEW User
rank: 104 [tied] (8 entries) POV-Ray User
rank: 104 [tied] (8 entries) PicoLisp User
rank: 109 [tied] (7 entries) ALGOL 68 User
rank: 109 [tied] (7 entries) ASP User
rank: 109 [tied] (7 entries) DCL User
rank: 109 [tied] (7 entries) Liberty BASIC User
rank: 109 [tied] (7 entries) MUMPS User
rank: 109 [tied] (7 entries) Maple User
rank: 109 [tied] (7 entries) Mercury User
rank: 109 [tied] (7 entries) PDP-11 Assembly User
rank: 109 [tied] (7 entries) PowerBASIC User
rank: 109 [tied] (7 entries) PureBasic User
rank: 109 [tied] (7 entries) Scratch User
rank: 109 [tied] (7 entries) VHDL User
rank: 121 [tied] (6 entries) Applesoft BASIC User
rank: 121 [tied] (6 entries) Bc User
rank: 121 [tied] (6 entries) ColdFusion User
rank: 121 [tied] (6 entries) Commodore BASIC User
rank: 121 [tied] (6 entries) Dart User
rank: 121 [tied] (6 entries) HyperTalk User
rank: 121 [tied] (6 entries) Io User
rank: 121 [tied] (6 entries) Joy User
rank: 121 [tied] (6 entries) Modula-3 User
rank: 121 [tied] (6 entries) Pike User
rank: 121 [tied] (6 entries) Self User
rank: 121 [tied] (6 entries) Vim Script User
rank: 133 [tied] (5 entries) 8080 Assembly User
rank: 133 [tied] (5 entries) ABAP User
rank: 133 [tied] (5 entries) ALGOL 60 User
rank: 133 [tied] (5 entries) CMake User
rank: 133 [tied] (5 entries) Clipper User
rank: 133 [tied] (5 entries) FreeBASIC User
rank: 133 [tied] (5 entries) GML User
rank: 133 [tied] (5 entries) Haxe User
rank: 133 [tied] (5 entries) Inform 7 User
rank: 133 [tied] (5 entries) Integer BASIC User
rank: 133 [tied] (5 entries) K User
rank: 133 [tied] (5 entries) Kotlin User
rank: 133 [tied] (5 entries) NSIS User
rank: 133 [tied] (5 entries) NewLISP User
rank: 133 [tied] (5 entries) Q User
rank: 133 [tied] (5 entries) REALbasic User
rank: 133 [tied] (5 entries) TI-89 BASIC User
rank: 133 [tied] (5 entries) VB6 User
rank: 133 [tied] (5 entries) Verilog User
rank: 133 [tied] (5 entries) XQuery User
rank: 153 [tied] (4 entries) 360 Assembly User
rank: 153 [tied] (4 entries) BCPL User
rank: 153 [tied] (4 entries) C Shell User
rank: 153 [tied] (4 entries) FALSE User
rank: 153 [tied] (4 entries) GAP User
rank: 153 [tied] (4 entries) GolfScript User
rank: 153 [tied] (4 entries) HQ9+ User
rank: 153 [tied] (4 entries) Locomotive Basic User
rank: 153 [tied] (4 entries) M680x0 User
rank: 153 [tied] (4 entries) OoRexx User
rank: 153 [tied] (4 entries) PIR User
rank: 153 [tied] (4 entries) PlainTeX User
rank: 153 [tied] (4 entries) PowerPC Assembly User
rank: 153 [tied] (4 entries) QBASIC User
rank: 153 [tied] (4 entries) Run BASIC User
rank: 153 [tied] (4 entries) Scilab User
rank: 153 [tied] (4 entries) TorqueScript User
rank: 153 [tied] (4 entries) Vala User
rank: 153 [tied] (4 entries) ZX Spectrum Basic User
rank: 172 [tied] (3 entries) 6800 Assembly User
rank: 172 [tied] (3 entries) ALGOL User
rank: 172 [tied] (3 entries) ASP.Net User
rank: 172 [tied] (3 entries) Dylan User
rank: 172 [tied] (3 entries) Egison User
rank: 172 [tied] (3 entries) Falcon User
rank: 172 [tied] (3 entries) Fantom User
rank: 172 [tied] (3 entries) Free Pascal User
rank: 172 [tied] (3 entries) Frink User
rank: 172 [tied] (3 entries) GW-BASIC User
rank: 172 [tied] (3 entries) HLA User
rank: 172 [tied] (3 entries) IDL User
rank: 172 [tied] (3 entries) LFE User
rank: 172 [tied] (3 entries) MMIX User
rank: 172 [tied] (3 entries) N/t/roff User
rank: 172 [tied] (3 entries) NetRexx User
rank: 172 [tied] (3 entries) Nial User
rank: 172 [tied] (3 entries) Oberon-2 User
rank: 172 [tied] (3 entries) Object Pascal User
rank: 172 [tied] (3 entries) Occam User
rank: 172 [tied] (3 entries) PL/pgSQL User
rank: 172 [tied] (3 entries) Pure User
rank: 172 [tied] (3 entries) RPG User
rank: 172 [tied] (3 entries) SPARC Assembly User
rank: 172 [tied] (3 entries) SPARK User
rank: 172 [tied] (3 entries) Sather User
rank: 172 [tied] (3 entries) SequenceL User
rank: 172 [tied] (3 entries) Shen User
rank: 172 [tied] (3 entries) Snobol User
rank: 172 [tied] (3 entries) Teco User
rank: 172 [tied] (3 entries) Transact-SQL User
rank: 172 [tied] (3 entries) VAX Assembly User
rank: 172 [tied] (3 entries) Wolfram Language User
rank: 172 [tied] (3 entries) X86-64 Assembly User
rank: 172 [tied] (3 entries) Xojo User
rank: 207 [tied] (2 entries) Agena User
rank: 207 [tied] (2 entries) Alice ML User
rank: 207 [tied] (2 entries) AmigaE User
rank: 207 [tied] (2 entries) AspectJ User
rank: 207 [tied] (2 entries) BASIC256 User
rank: 207 [tied] (2 entries) BaCon User
rank: 207 [tied] (2 entries) Basic09 User
rank: 207 [tied] (2 entries) Bracmat User
rank: 207 [tied] (2 entries) Burlesque User
rank: 207 [tied] (2 entries) C++/CLI User
rank: 207 [tied] (2 entries) CHR User
rank: 207 [tied] (2 entries) CLIPS User
rank: 207 [tied] (2 entries) Caché ObjectScript User
rank: 207 [tied] (2 entries) Casio BASIC User
rank: 207 [tied] (2 entries) Chef User
rank: 207 [tied] (2 entries) Coq User
rank: 207 [tied] (2 entries) Crystal User
rank: 207 [tied] (2 entries) DWScript User
rank: 207 [tied] (2 entries) E User
rank: 207 [tied] (2 entries) ELM User
rank: 207 [tied] (2 entries) Elena User
rank: 207 [tied] (2 entries) Fancy User
rank: 207 [tied] (2 entries) Fish User
rank: 207 [tied] (2 entries) Friendly interactive shell User
rank: 207 [tied] (2 entries) GFA Basic User
rank: 207 [tied] (2 entries) Gambas User
rank: 207 [tied] (2 entries) Gema User
rank: 207 [tied] (2 entries) Glee User
rank: 207 [tied] (2 entries) Harbour User
rank: 207 [tied] (2 entries) JavaFX Script User
rank: 207 [tied] (2 entries) Jq User
rank: 207 [tied] (2 entries) Limbo User
rank: 207 [tied] (2 entries) LiveCode User
rank: 207 [tied] (2 entries) Logtalk User
rank: 207 [tied] (2 entries) Lush User
rank: 207 [tied] (2 entries) MIRC Scripting Language User
rank: 207 [tied] (2 entries) MK-61/52 User
rank: 207 [tied] (2 entries) Metafont User
rank: 207 [tied] (2 entries) Neko User
rank: 207 [tied] (2 entries) NetLogo User
rank: 207 [tied] (2 entries) Openscad User
rank: 207 [tied] (2 entries) Pentium Assembly User
rank: 207 [tied] (2 entries) Picat User
rank: 207 [tied] (2 entries) Piet User
rank: 207 [tied] (2 entries) Plain English User
rank: 207 [tied] (2 entries) Processing Python mode User
rank: 207 [tied] (2 entries) Quackery User
rank: 207 [tied] (2 entries) RLaB User
rank: 207 [tied] (2 entries) RPGIV User
rank: 207 [tied] (2 entries) RPL User
rank: 207 [tied] (2 entries) Refal User
rank: 207 [tied] (2 entries) S-lang User
rank: 207 [tied] (2 entries) SETL User
rank: 207 [tied] (2 entries) SNUSP User
rank: 207 [tied] (2 entries) SPSS User
rank: 207 [tied] (2 entries) Sage User
rank: 207 [tied] (2 entries) Seed7 User
rank: 207 [tied] (2 entries) Simula User
rank: 207 [tied] (2 entries) Stata User
rank: 207 [tied] (2 entries) SystemVerilog User
rank: 207 [tied] (2 entries) TXR User
rank: 207 [tied] (2 entries) UserRPL User
rank: 207 [tied] (2 entries) Whitespace User
rank: 207 [tied] (2 entries) XBase User
rank: 207 [tied] (2 entries) XUL User
rank: 207 [tied] (2 entries) Yorick User
rank: 207 [tied] (2 entries) Zig User
rank: 274 [tied] (1 entry) .QL User
rank: 274 [tied] (1 entry) 4D User
rank: 274 [tied] (1 entry) 4DOS Batch User
rank: 274 [tied] (1 entry) 8051 Assembly User
rank: 274 [tied] (1 entry) A+ User
rank: 274 [tied] (1 entry) AARCH64 Assembly User
rank: 274 [tied] (1 entry) ACL2 User
rank: 274 [tied] (1 entry) AMPL User
rank: 274 [tied] (1 entry) ANT User
rank: 274 [tied] (1 entry) Agda User
rank: 274 [tied] (1 entry) AmbientTalk User
rank: 274 [tied] (1 entry) AngelScript User
rank: 274 [tied] (1 entry) Application Master User
rank: 274 [tied] (1 entry) Arc User
rank: 274 [tied] (1 entry) Arturo User
rank: 274 [tied] (1 entry) Astro User
rank: 274 [tied] (1 entry) B User
rank: 274 [tied] (1 entry) B4J User
rank: 274 [tied] (1 entry) Beeswax User
rank: 274 [tied] (1 entry) Biferno User
rank: 274 [tied] (1 entry) Blast User
rank: 274 [tied] (1 entry) BlitzMax User
rank: 274 [tied] (1 entry) Brace User
rank: 274 [tied] (1 entry) Brat User
rank: 274 [tied] (1 entry) Brlcad User
rank: 274 [tied] (1 entry) C0H User
rank: 274 [tied] (1 entry) CB80 User
rank: 274 [tied] (1 entry) COMAL User
rank: 274 [tied] (1 entry) Caml User
rank: 274 [tied] (1 entry) Cat User
rank: 274 [tied] (1 entry) Chapel User
rank: 274 [tied] (1 entry) Cilk++ User
rank: 274 [tied] (1 entry) Clay User
rank: 274 [tied] (1 entry) Comefrom0x10 User
rank: 274 [tied] (1 entry) Curry User
rank: 274 [tied] (1 entry) DIBOL-11 User
rank: 274 [tied] (1 entry) DIV Games Studio User
rank: 274 [tied] (1 entry) DM User
rank: 274 [tied] (1 entry) DUP User
rank: 274 [tied] (1 entry) Dafny User
rank: 274 [tied] (1 entry) Dao User
rank: 274 [tied] (1 entry) Dylan.NET User
rank: 274 [tied] (1 entry) Déjà Vu User
rank: 274 [tied] (1 entry) ECL User
rank: 274 [tied] (1 entry) EDSAC order code User
rank: 274 [tied] (1 entry) EGL User
rank: 274 [tied] (1 entry) EchoLisp User
rank: 274 [tied] (1 entry) Es User
rank: 274 [tied] (1 entry) FBSL User
rank: 274 [tied] (1 entry) FP User
rank: 274 [tied] (1 entry) FUZE BASIC User
rank: 274 [tied] (1 entry) Felix User
rank: 274 [tied] (1 entry) Fermat User
rank: 274 [tied] (1 entry) Fexl User
rank: 274 [tied] (1 entry) Frege User
rank: 274 [tied] (1 entry) Furor User
rank: 274 [tied] (1 entry) Futhark User
rank: 274 [tied] (1 entry) FutureBasic User
rank: 274 [tied] (1 entry) Fôrmulæ User
rank: 274 [tied] (1 entry) GLSL User
rank: 274 [tied] (1 entry) GUISS User
rank: 274 [tied] (1 entry) Genie User
rank: 274 [tied] (1 entry) Global Script User
rank: 274 [tied] (1 entry) Gosu User
rank: 274 [tied] (1 entry) HPPPL User
rank: 274 [tied] (1 entry) Hack User
rank: 274 [tied] (1 entry) Hexiscript User
rank: 274 [tied] (1 entry) HolyC User
rank: 274 [tied] (1 entry) Hope User
rank: 274 [tied] (1 entry) Huginn User
rank: 274 [tied] (1 entry) I User
rank: 274 [tied] (1 entry) Inform 6 User
rank: 274 [tied] (1 entry) Informix 4GL User
rank: 274 [tied] (1 entry) Ioke User
rank: 274 [tied] (1 entry) JOVIAL User
rank: 274 [tied] (1 entry) JoCaml User
rank: 274 [tied] (1 entry) Jsish User
rank: 274 [tied] (1 entry) KL1 User
rank: 274 [tied] (1 entry) Kabap User
rank: 274 [tied] (1 entry) Kamailio Script User
rank: 274 [tied] (1 entry) KeyList Databasing User
rank: 274 [tied] (1 entry) Kite User
rank: 274 [tied] (1 entry) Klong User
rank: 274 [tied] (1 entry) KonsolScript User
rank: 274 [tied] (1 entry) L.in.oleum User
rank: 274 [tied] (1 entry) LC3 Assembly User
rank: 274 [tied] (1 entry) LIL User
rank: 274 [tied] (1 entry) LLVM User
rank: 274 [tied] (1 entry) LOLCODE User
rank: 274 [tied] (1 entry) LSL User
rank: 274 [tied] (1 entry) Lambda Prolog User
rank: 274 [tied] (1 entry) Lang5 User
rank: 274 [tied] (1 entry) Lhogho User
rank: 274 [tied] (1 entry) LibreOffice Basic User
rank: 274 [tied] (1 entry) Lilypond User
rank: 274 [tied] (1 entry) LiveScript User
rank: 274 [tied] (1 entry) Lotus 123 Macro Scripting User
rank: 274 [tied] (1 entry) Lucid User
rank: 274 [tied] (1 entry) M2000 Interpreter User
rank: 274 [tied] (1 entry) MACRO-11 User
rank: 274 [tied] (1 entry) MANOOL User
rank: 274 [tied] (1 entry) MAPPER User
rank: 274 [tied] (1 entry) MBS User
rank: 274 [tied] (1 entry) MDL User
rank: 274 [tied] (1 entry) ME10 macro User
rank: 274 [tied] (1 entry) MINIL User
rank: 274 [tied] (1 entry) ML User
rank: 274 [tied] (1 entry) ML/I User
rank: 274 [tied] (1 entry) MLite User
rank: 274 [tied] (1 entry) MOO User
rank: 274 [tied] (1 entry) MUF User
rank: 274 [tied] (1 entry) Malbolge User
rank: 274 [tied] (1 entry) Mathcad User
rank: 274 [tied] (1 entry) Metapost User
rank: 274 [tied] (1 entry) Microsoft Small Basic User
rank: 274 [tied] (1 entry) MiniScript User
rank: 274 [tied] (1 entry) MiniZinc User
rank: 274 [tied] (1 entry) NASL User
rank: 274 [tied] (1 entry) Nanoquery User
rank: 274 [tied] (1 entry) Neat User
rank: 274 [tied] (1 entry) Nemerle User
rank: 274 [tied] (1 entry) Never User
rank: 274 [tied] (1 entry) Niue User
rank: 274 [tied] (1 entry) OOCalc User
rank: 274 [tied] (1 entry) Objeck User
rank: 274 [tied] (1 entry) Ol User
rank: 274 [tied] (1 entry) OpenC++ User
rank: 274 [tied] (1 entry) OpenEdge/Progress User
rank: 274 [tied] (1 entry) Order User
rank: 274 [tied] (1 entry) PHL User
rank: 274 [tied] (1 entry) PL/M User
rank: 274 [tied] (1 entry) PLUS User
rank: 274 [tied] (1 entry) PLZ/SYS User
rank: 274 [tied] (1 entry) PPL User
rank: 274 [tied] (1 entry) Peloton User
rank: 274 [tied] (1 entry) PeopleCode User
rank: 274 [tied] (1 entry) Perl5i User
rank: 274 [tied] (1 entry) Phix User
rank: 274 [tied] (1 entry) Pop11 User
rank: 274 [tied] (1 entry) Powerbuilder User
rank: 274 [tied] (1 entry) Pure Data User
rank: 274 [tied] (1 entry) Pyret User
rank: 274 [tied] (1 entry) Quite BASIC User
rank: 274 [tied] (1 entry) Ratfor User
rank: 274 [tied] (1 entry) Reason User
rank: 274 [tied] (1 entry) Relation User
rank: 274 [tied] (1 entry) Retro User
rank: 274 [tied] (1 entry) Risc-V User
rank: 274 [tied] (1 entry) Robotic User
rank: 274 [tied] (1 entry) SASL User
rank: 274 [tied] (1 entry) SIMPOL User
rank: 274 [tied] (1 entry) SQL PL User
rank: 274 [tied] (1 entry) Salmon User
rank: 274 [tied] (1 entry) SenseTalk User
rank: 274 [tied] (1 entry) Set lang User
rank: 274 [tied] (1 entry) Shale User
rank: 274 [tied] (1 entry) Sidef User
rank: 274 [tied] (1 entry) Sinclair ZX81 BASIC User
rank: 274 [tied] (1 entry) SkookumScript User
rank: 274 [tied] (1 entry) Slate User
rank: 274 [tied] (1 entry) Smart BASIC User
rank: 274 [tied] (1 entry) Sparkling User
rank: 274 [tied] (1 entry) Spin User
rank: 274 [tied] (1 entry) Suneido User
rank: 274 [tied] (1 entry) SuperTalk User
rank: 274 [tied] (1 entry) Superbase BASIC User
rank: 274 [tied] (1 entry) TAL User
rank: 274 [tied] (1 entry) TMG User
rank: 274 [tied] (1 entry) TPP User
rank: 274 [tied] (1 entry) TUSCRIPT User
rank: 274 [tied] (1 entry) Tailspin User
rank: 274 [tied] (1 entry) TechBASIC User
rank: 274 [tied] (1 entry) Thistle User
rank: 274 [tied] (1 entry) Thyrd User
rank: 274 [tied] (1 entry) Tiny BASIC User
rank: 274 [tied] (1 entry) Toka User
rank: 274 [tied] (1 entry) Trith User
rank: 274 [tied] (1 entry) True BASIC User
rank: 274 [tied] (1 entry) Uniface User
rank: 274 [tied] (1 entry) Unlambda User
rank: 274 [tied] (1 entry) Ursa User
rank: 274 [tied] (1 entry) Ursala User
rank: 274 [tied] (1 entry) V User
rank: 274 [tied] (1 entry) Vedit macro language User
rank: 274 [tied] (1 entry) Viua VM assembly User
rank: 274 [tied] (1 entry) WDTE User
rank: 274 [tied] (1 entry) WML User
rank: 274 [tied] (1 entry) Wart User
rank: 274 [tied] (1 entry) WebAssembly User
rank: 274 [tied] (1 entry) Whenever User
rank: 274 [tied] (1 entry) Wisp User
rank: 274 [tied] (1 entry) XLISP User
rank: 274 [tied] (1 entry) XPL0 User
rank: 274 [tied] (1 entry) XProc User
rank: 274 [tied] (1 entry) XTalk User
rank: 274 [tied] (1 entry) Yacas User
rank: 274 [tied] (1 entry) ZED User
rank: 274 [tied] (1 entry) ZPL User
rank: 274 [tied] (1 entry) Zkl User
rank: 274 [tied] (1 entry) Zoea User
rank: 274 [tied] (1 entry) µC++ User

☼ end─of─list. ☼
</pre>

{{out|output|text=&nbsp; when sorted (ranked) by the computer programming language:}}
<pre style="height:165ex">
═════════════════════════timestamp: 7 Apr 2021 6:44pm═════════════════════════

1,094 records read from file: RC_USER.LAN
7,641 records read from file: RC_USER.CAT
474 (total) number of languages detected in the category file
835 " " " " " " " language "
6,057 (total) number of entries (users of lanugages) detected

rank: 274 [tied] (1 entry) .QL User
rank: 153 [tied] (4 entries) 360 Assembly User
rank: 274 [tied] (1 entry) 4D User
rank: 274 [tied] (1 entry) 4DOS Batch User
rank: 51 [tied] (24 entries) 6502 Assembly User
rank: 172 [tied] (3 entries) 6800 Assembly User
rank: 104 [tied] (8 entries) 68000 Assembly User
rank: 83 [tied] (12 entries) 80386 Assembly User
rank: 274 [tied] (1 entry) 8051 Assembly User
rank: 133 [tied] (5 entries) 8080 Assembly User
rank: 57 (21 entries) 8086 Assembly User
rank: 274 [tied] (1 entry) A+ User
rank: 274 [tied] (1 entry) AARCH64 Assembly User
rank: 133 [tied] (5 entries) ABAP User
rank: 274 [tied] (1 entry) ACL2 User
rank: 74 [tied] (15 entries) ActionScript User
rank: 28 [tied] (40 entries) ADA User
rank: 274 [tied] (1 entry) Agda User
rank: 207 [tied] (2 entries) Agena User
rank: 133 [tied] (5 entries) ALGOL 60 User
rank: 109 [tied] (7 entries) ALGOL 68 User
rank: 172 [tied] (3 entries) ALGOL User
rank: 207 [tied] (2 entries) Alice ML User
rank: 274 [tied] (1 entry) AmbientTalk User
rank: 207 [tied] (2 entries) AmigaE User
rank: 274 [tied] (1 entry) AMPL User
rank: 274 [tied] (1 entry) AngelScript User
rank: 274 [tied] (1 entry) ANT User
rank: 67 [tied] (17 entries) Apex User
rank: 35 [tied] (37 entries) APL User
rank: 74 [tied] (15 entries) AppleScript User
rank: 121 [tied] (6 entries) Applesoft BASIC User
rank: 274 [tied] (1 entry) Application Master User
rank: 274 [tied] (1 entry) Arc User
rank: 74 [tied] (15 entries) ARM Assembly User
rank: 274 [tied] (1 entry) Arturo User
rank: 109 [tied] (7 entries) ASP User
rank: 172 [tied] (3 entries) ASP.Net User
rank: 207 [tied] (2 entries) AspectJ User
rank: 25 [tied] (47 entries) Assembly User
rank: 274 [tied] (1 entry) Astro User
rank: 50 (25 entries) AutoHotkey User
rank: 96 [tied] (9 entries) AutoIt User
rank: 19 (69 entries) AWK User
rank: 274 [tied] (1 entry) B User
rank: 274 [tied] (1 entry) B4J User
rank: 207 [tied] (2 entries) BaCon User
rank: 11 [tied] (130 entries) BASIC User
rank: 207 [tied] (2 entries) Basic09 User
rank: 207 [tied] (2 entries) BASIC256 User
rank: 23 [tied] (50 entries) Batch File User
rank: 96 [tied] (9 entries) BBC BASIC User
rank: 121 [tied] (6 entries) Bc User
rank: 153 [tied] (4 entries) BCPL User
rank: 274 [tied] (1 entry) Beeswax User
rank: 80 [tied] (13 entries) Befunge User
rank: 274 [tied] (1 entry) Biferno User
rank: 274 [tied] (1 entry) Blast User
rank: 274 [tied] (1 entry) BlitzMax User
rank: 274 [tied] (1 entry) Brace User
rank: 207 [tied] (2 entries) Bracmat User
rank: 40 (34 entries) Brainf*** User
rank: 274 [tied] (1 entry) Brat User
rank: 274 [tied] (1 entry) Brlcad User
rank: 207 [tied] (2 entries) Burlesque User
rank: 10 (132 entries) C Sharp User
rank: 153 [tied] (4 entries) C Shell User
rank: 1 (424 entries) C User
rank: 3 (302 entries) C++ User
rank: 207 [tied] (2 entries) C++/CLI User
rank: 274 [tied] (1 entry) C0H User
rank: 207 [tied] (2 entries) Caché ObjectScript User
rank: 274 [tied] (1 entry) Caml User
rank: 207 [tied] (2 entries) Casio BASIC User
rank: 274 [tied] (1 entry) Cat User
rank: 274 [tied] (1 entry) CB80 User
rank: 274 [tied] (1 entry) Chapel User
rank: 207 [tied] (2 entries) Chef User
rank: 207 [tied] (2 entries) CHR User
rank: 274 [tied] (1 entry) Cilk++ User
rank: 274 [tied] (1 entry) Clay User
rank: 133 [tied] (5 entries) Clipper User
rank: 207 [tied] (2 entries) CLIPS User
rank: 41 [tied] (32 entries) Clojure User
rank: 133 [tied] (5 entries) CMake User
rank: 33 [tied] (38 entries) COBOL User
rank: 80 [tied] (13 entries) CoffeeScript User
rank: 121 [tied] (6 entries) ColdFusion User
rank: 274 [tied] (1 entry) COMAL User
rank: 274 [tied] (1 entry) Comefrom0x10 User
rank: 121 [tied] (6 entries) Commodore BASIC User
rank: 21 (62 entries) Common Lisp User
rank: 207 [tied] (2 entries) Coq User
rank: 207 [tied] (2 entries) Crystal User
rank: 274 [tied] (1 entry) Curry User
rank: 71 [tied] (16 entries) D User
rank: 274 [tied] (1 entry) Dafny User
rank: 274 [tied] (1 entry) Dao User
rank: 121 [tied] (6 entries) Dart User
rank: 91 [tied] (10 entries) Dc User
rank: 109 [tied] (7 entries) DCL User
rank: 28 [tied] (40 entries) Delphi User
rank: 274 [tied] (1 entry) DIBOL-11 User
rank: 274 [tied] (1 entry) DIV Games Studio User
rank: 274 [tied] (1 entry) DM User
rank: 274 [tied] (1 entry) DUP User
rank: 207 [tied] (2 entries) DWScript User
rank: 172 [tied] (3 entries) Dylan User
rank: 274 [tied] (1 entry) Dylan.NET User
rank: 274 [tied] (1 entry) Déjà Vu User
rank: 207 [tied] (2 entries) E User
rank: 274 [tied] (1 entry) EchoLisp User
rank: 274 [tied] (1 entry) ECL User
rank: 274 [tied] (1 entry) EDSAC order code User
rank: 172 [tied] (3 entries) Egison User
rank: 274 [tied] (1 entry) EGL User
rank: 86 [tied] (11 entries) Eiffel User
rank: 207 [tied] (2 entries) Elena User
rank: 86 [tied] (11 entries) Elixir User
rank: 207 [tied] (2 entries) ELM User
rank: 47 [tied] (26 entries) Emacs Lisp User
rank: 28 [tied] (40 entries) Erlang User
rank: 274 [tied] (1 entry) Es User
rank: 83 [tied] (12 entries) Euphoria User
rank: 58 (20 entries) F Sharp User
rank: 63 [tied] (18 entries) Factor User
rank: 172 [tied] (3 entries) Falcon User
rank: 153 [tied] (4 entries) FALSE User
rank: 207 [tied] (2 entries) Fancy User
rank: 172 [tied] (3 entries) Fantom User
rank: 274 [tied] (1 entry) FBSL User
rank: 274 [tied] (1 entry) Felix User
rank: 274 [tied] (1 entry) Fermat User
rank: 274 [tied] (1 entry) Fexl User
rank: 207 [tied] (2 entries) Fish User
rank: 23 [tied] (50 entries) FORTH User
rank: 15 (96 entries) FORTRAN User
rank: 274 [tied] (1 entry) FP User
rank: 172 [tied] (3 entries) Free Pascal User
rank: 133 [tied] (5 entries) FreeBASIC User
rank: 274 [tied] (1 entry) Frege User
rank: 207 [tied] (2 entries) Friendly interactive shell User
rank: 172 [tied] (3 entries) Frink User
rank: 274 [tied] (1 entry) Furor User
rank: 274 [tied] (1 entry) Futhark User
rank: 274 [tied] (1 entry) FutureBasic User
rank: 274 [tied] (1 entry) FUZE BASIC User
rank: 274 [tied] (1 entry) Fôrmulæ User
rank: 207 [tied] (2 entries) Gambas User
rank: 153 [tied] (4 entries) GAP User
rank: 207 [tied] (2 entries) Gema User
rank: 274 [tied] (1 entry) Genie User
rank: 207 [tied] (2 entries) GFA Basic User
rank: 207 [tied] (2 entries) Glee User
rank: 274 [tied] (1 entry) Global Script User
rank: 274 [tied] (1 entry) GLSL User
rank: 133 [tied] (5 entries) GML User
rank: 104 [tied] (8 entries) Gnuplot User
rank: 39 (35 entries) Go User
rank: 153 [tied] (4 entries) GolfScript User
rank: 274 [tied] (1 entry) Gosu User
rank: 86 [tied] (11 entries) Groovy User
rank: 274 [tied] (1 entry) GUISS User
rank: 172 [tied] (3 entries) GW-BASIC User
rank: 274 [tied] (1 entry) Hack User
rank: 207 [tied] (2 entries) Harbour User
rank: 13 (111 entries) Haskell User
rank: 133 [tied] (5 entries) Haxe User
rank: 274 [tied] (1 entry) Hexiscript User
rank: 172 [tied] (3 entries) HLA User
rank: 274 [tied] (1 entry) HolyC User
rank: 274 [tied] (1 entry) Hope User
rank: 274 [tied] (1 entry) HPPPL User
rank: 153 [tied] (4 entries) HQ9+ User
rank: 274 [tied] (1 entry) Huginn User
rank: 121 [tied] (6 entries) HyperTalk User
rank: 274 [tied] (1 entry) I User
rank: 74 [tied] (15 entries) Icon User
rank: 172 [tied] (3 entries) IDL User
rank: 274 [tied] (1 entry) Inform 6 User
rank: 133 [tied] (5 entries) Inform 7 User
rank: 274 [tied] (1 entry) Informix 4GL User
rank: 133 [tied] (5 entries) Integer BASIC User
rank: 121 [tied] (6 entries) Io User
rank: 274 [tied] (1 entry) Ioke User
rank: 35 [tied] (37 entries) J User
rank: 2 (309 entries) JAVA User
rank: 207 [tied] (2 entries) JavaFX Script User
rank: 5 (280 entries) JavaScript User
rank: 96 [tied] (9 entries) JCL User
rank: 274 [tied] (1 entry) JoCaml User
rank: 274 [tied] (1 entry) JOVIAL User
rank: 121 [tied] (6 entries) Joy User
rank: 207 [tied] (2 entries) Jq User
rank: 274 [tied] (1 entry) Jsish User
rank: 71 [tied] (16 entries) Julia User
rank: 133 [tied] (5 entries) K User
rank: 274 [tied] (1 entry) Kabap User
rank: 274 [tied] (1 entry) Kamailio Script User
rank: 274 [tied] (1 entry) KeyList Databasing User
rank: 274 [tied] (1 entry) Kite User
rank: 274 [tied] (1 entry) KL1 User
rank: 274 [tied] (1 entry) Klong User
rank: 274 [tied] (1 entry) KonsolScript User
rank: 133 [tied] (5 entries) Kotlin User
rank: 274 [tied] (1 entry) L.in.oleum User
rank: 104 [tied] (8 entries) LabVIEW User
rank: 274 [tied] (1 entry) Lambda Prolog User
rank: 274 [tied] (1 entry) Lang5 User
rank: 47 [tied] (26 entries) LaTeX User
rank: 274 [tied] (1 entry) LC3 Assembly User
rank: 172 [tied] (3 entries) LFE User
rank: 274 [tied] (1 entry) Lhogho User
rank: 109 [tied] (7 entries) Liberty BASIC User
rank: 274 [tied] (1 entry) LibreOffice Basic User
rank: 274 [tied] (1 entry) LIL User
rank: 274 [tied] (1 entry) Lilypond User
rank: 207 [tied] (2 entries) Limbo User
rank: 27 (45 entries) LISP User
rank: 207 [tied] (2 entries) LiveCode User
rank: 274 [tied] (1 entry) LiveScript User
rank: 274 [tied] (1 entry) LLVM User
rank: 153 [tied] (4 entries) Locomotive Basic User
rank: 63 [tied] (18 entries) Logo User
rank: 207 [tied] (2 entries) Logtalk User
rank: 274 [tied] (1 entry) LOLCODE User
rank: 274 [tied] (1 entry) Lotus 123 Macro Scripting User
rank: 274 [tied] (1 entry) LSL User
rank: 20 (66 entries) LUA User
rank: 274 [tied] (1 entry) Lucid User
rank: 207 [tied] (2 entries) Lush User
rank: 274 [tied] (1 entry) M2000 Interpreter User
rank: 96 [tied] (9 entries) M4 User
rank: 153 [tied] (4 entries) M680x0 User
rank: 274 [tied] (1 entry) MACRO-11 User
rank: 63 [tied] (18 entries) Make User
rank: 274 [tied] (1 entry) Malbolge User
rank: 274 [tied] (1 entry) MANOOL User
rank: 109 [tied] (7 entries) Maple User
rank: 274 [tied] (1 entry) MAPPER User
rank: 274 [tied] (1 entry) Mathcad User
rank: 41 [tied] (32 entries) Mathematica User
rank: 25 [tied] (47 entries) MATLAB User
rank: 78 [tied] (14 entries) Maxima User
rank: 274 [tied] (1 entry) MBS User
rank: 274 [tied] (1 entry) MDL User
rank: 274 [tied] (1 entry) ME10 macro User
rank: 109 [tied] (7 entries) Mercury User
rank: 207 [tied] (2 entries) Metafont User
rank: 274 [tied] (1 entry) Metapost User
rank: 274 [tied] (1 entry) Microsoft Small Basic User
rank: 274 [tied] (1 entry) MINIL User
rank: 274 [tied] (1 entry) MiniScript User
rank: 274 [tied] (1 entry) MiniZinc User
rank: 91 [tied] (10 entries) MIPS Assembly User
rank: 207 [tied] (2 entries) MIRC Scripting Language User
rank: 207 [tied] (2 entries) MK-61/52 User
rank: 274 [tied] (1 entry) ML User
rank: 274 [tied] (1 entry) ML/I User
rank: 274 [tied] (1 entry) MLite User
rank: 172 [tied] (3 entries) MMIX User
rank: 71 [tied] (16 entries) Modula-2 User
rank: 121 [tied] (6 entries) Modula-3 User
rank: 274 [tied] (1 entry) MOO User
rank: 274 [tied] (1 entry) MUF User
rank: 109 [tied] (7 entries) MUMPS User
rank: 51 [tied] (24 entries) MySQL User
rank: 172 [tied] (3 entries) N/t/roff User
rank: 274 [tied] (1 entry) Nanoquery User
rank: 274 [tied] (1 entry) NASL User
rank: 274 [tied] (1 entry) Neat User
rank: 207 [tied] (2 entries) Neko User
rank: 274 [tied] (1 entry) Nemerle User
rank: 207 [tied] (2 entries) NetLogo User
rank: 172 [tied] (3 entries) NetRexx User
rank: 274 [tied] (1 entry) Never User
rank: 133 [tied] (5 entries) NewLISP User
rank: 172 [tied] (3 entries) Nial User
rank: 80 [tied] (13 entries) Nim User
rank: 274 [tied] (1 entry) Niue User
rank: 133 [tied] (5 entries) NSIS User
rank: 172 [tied] (3 entries) Oberon-2 User
rank: 274 [tied] (1 entry) Objeck User
rank: 172 [tied] (3 entries) Object Pascal User
rank: 37 [tied] (36 entries) Objective-C User
rank: 44 [tied] (29 entries) OCaml User
rank: 172 [tied] (3 entries) Occam User
rank: 86 [tied] (11 entries) Octave User
rank: 274 [tied] (1 entry) Ol User
rank: 274 [tied] (1 entry) OOCalc User
rank: 153 [tied] (4 entries) OoRexx User
rank: 274 [tied] (1 entry) OpenC++ User
rank: 274 [tied] (1 entry) OpenEdge/Progress User
rank: 207 [tied] (2 entries) Openscad User
rank: 274 [tied] (1 entry) Order User
rank: 96 [tied] (9 entries) Oz User
rank: 86 [tied] (11 entries) PARI/GP User
rank: 11 [tied] (130 entries) Pascal User
rank: 109 [tied] (7 entries) PDP-11 Assembly User
rank: 274 [tied] (1 entry) Peloton User
rank: 207 [tied] (2 entries) Pentium Assembly User
rank: 274 [tied] (1 entry) PeopleCode User
rank: 7 (181 entries) Perl User
rank: 274 [tied] (1 entry) Perl5i User
rank: 274 [tied] (1 entry) Phix User
rank: 274 [tied] (1 entry) PHL User
rank: 6 (183 entries) PHP User
rank: 207 [tied] (2 entries) Picat User
rank: 104 [tied] (8 entries) PicoLisp User
rank: 207 [tied] (2 entries) Piet User
rank: 121 [tied] (6 entries) Pike User
rank: 153 [tied] (4 entries) PIR User
rank: 67 [tied] (17 entries) PL/I User
rank: 274 [tied] (1 entry) PL/M User
rank: 172 [tied] (3 entries) PL/pgSQL User
rank: 91 [tied] (10 entries) PL/SQL User
rank: 207 [tied] (2 entries) Plain English User
rank: 153 [tied] (4 entries) PlainTeX User
rank: 274 [tied] (1 entry) PLUS User
rank: 274 [tied] (1 entry) PLZ/SYS User
rank: 274 [tied] (1 entry) Pop11 User
rank: 46 (27 entries) PostScript User
rank: 104 [tied] (8 entries) POV-Ray User
rank: 109 [tied] (7 entries) PowerBASIC User
rank: 274 [tied] (1 entry) Powerbuilder User
rank: 153 [tied] (4 entries) PowerPC Assembly User
rank: 63 [tied] (18 entries) PowerShell User
rank: 274 [tied] (1 entry) PPL User
rank: 207 [tied] (2 entries) Processing Python mode User
rank: 96 [tied] (9 entries) Processing User
rank: 17 [tied] (70 entries) Prolog User
rank: 274 [tied] (1 entry) Pure Data User
rank: 172 [tied] (3 entries) Pure User
rank: 109 [tied] (7 entries) PureBasic User
rank: 274 [tied] (1 entry) Pyret User
rank: 4 (299 entries) Python User
rank: 133 [tied] (5 entries) Q User
rank: 153 [tied] (4 entries) QBASIC User
rank: 207 [tied] (2 entries) Quackery User
rank: 274 [tied] (1 entry) Quite BASIC User
rank: 32 (39 entries) R User
rank: 53 [tied] (23 entries) Racket User
rank: 43 (30 entries) Raku User
rank: 274 [tied] (1 entry) Ratfor User
rank: 133 [tied] (5 entries) REALbasic User
rank: 274 [tied] (1 entry) Reason User
rank: 96 [tied] (9 entries) REBOL User
rank: 207 [tied] (2 entries) Refal User
rank: 274 [tied] (1 entry) Relation User
rank: 274 [tied] (1 entry) Retro User
rank: 44 [tied] (29 entries) REXX User
rank: 274 [tied] (1 entry) Risc-V User
rank: 207 [tied] (2 entries) RLaB User
rank: 274 [tied] (1 entry) Robotic User
rank: 172 [tied] (3 entries) RPG User
rank: 207 [tied] (2 entries) RPGIV User
rank: 207 [tied] (2 entries) RPL User
rank: 14 (102 entries) Ruby User
rank: 153 [tied] (4 entries) Run BASIC User
rank: 59 [tied] (19 entries) Rust User
rank: 207 [tied] (2 entries) S-lang User
rank: 207 [tied] (2 entries) Sage User
rank: 274 [tied] (1 entry) Salmon User
rank: 91 [tied] (10 entries) SAS User
rank: 274 [tied] (1 entry) SASL User
rank: 172 [tied] (3 entries) Sather User
rank: 53 [tied] (23 entries) Scala User
rank: 17 [tied] (70 entries) Scheme User
rank: 153 [tied] (4 entries) Scilab User
rank: 109 [tied] (7 entries) Scratch User
rank: 47 [tied] (26 entries) Sed User
rank: 207 [tied] (2 entries) Seed7 User
rank: 121 [tied] (6 entries) Self User
rank: 274 [tied] (1 entry) SenseTalk User
rank: 172 [tied] (3 entries) SequenceL User
rank: 274 [tied] (1 entry) Set lang User
rank: 207 [tied] (2 entries) SETL User
rank: 274 [tied] (1 entry) Shale User
rank: 172 [tied] (3 entries) Shen User
rank: 274 [tied] (1 entry) Sidef User
rank: 274 [tied] (1 entry) SIMPOL User
rank: 207 [tied] (2 entries) Simula User
rank: 274 [tied] (1 entry) Sinclair ZX81 BASIC User
rank: 274 [tied] (1 entry) SkookumScript User
rank: 274 [tied] (1 entry) Slate User
rank: 37 [tied] (36 entries) SmallTalk User
rank: 274 [tied] (1 entry) Smart BASIC User
rank: 172 [tied] (3 entries) Snobol User
rank: 78 [tied] (14 entries) SNOBOL4 User
rank: 207 [tied] (2 entries) SNUSP User
rank: 172 [tied] (3 entries) SPARC Assembly User
rank: 172 [tied] (3 entries) SPARK User
rank: 274 [tied] (1 entry) Sparkling User
rank: 274 [tied] (1 entry) Spin User
rank: 207 [tied] (2 entries) SPSS User
rank: 274 [tied] (1 entry) SQL PL User
rank: 8 (158 entries) SQL User
rank: 67 [tied] (17 entries) Standard ML User
rank: 207 [tied] (2 entries) Stata User
rank: 274 [tied] (1 entry) Suneido User
rank: 274 [tied] (1 entry) Superbase BASIC User
rank: 274 [tied] (1 entry) SuperTalk User
rank: 67 [tied] (17 entries) Swift User
rank: 207 [tied] (2 entries) SystemVerilog User
rank: 274 [tied] (1 entry) Tailspin User
rank: 274 [tied] (1 entry) TAL User
rank: 28 [tied] (40 entries) TCL User
rank: 274 [tied] (1 entry) TechBASIC User
rank: 172 [tied] (3 entries) Teco User
rank: 274 [tied] (1 entry) Thistle User
rank: 274 [tied] (1 entry) Thyrd User
rank: 59 [tied] (19 entries) TI-83 BASIC User
rank: 133 [tied] (5 entries) TI-89 BASIC User
rank: 274 [tied] (1 entry) Tiny BASIC User
rank: 274 [tied] (1 entry) TMG User
rank: 274 [tied] (1 entry) Toka User
rank: 153 [tied] (4 entries) TorqueScript User
rank: 274 [tied] (1 entry) TPP User
rank: 172 [tied] (3 entries) Transact-SQL User
rank: 274 [tied] (1 entry) Trith User
rank: 274 [tied] (1 entry) True BASIC User
rank: 274 [tied] (1 entry) TUSCRIPT User
rank: 207 [tied] (2 entries) TXR User
rank: 96 [tied] (9 entries) TypeScript User
rank: 83 [tied] (12 entries) Unicon User
rank: 274 [tied] (1 entry) Uniface User
rank: 9 (151 entries) UNIX Shell User
rank: 91 [tied] (10 entries) UnixPipes User
rank: 274 [tied] (1 entry) Unlambda User
rank: 274 [tied] (1 entry) Ursa User
rank: 274 [tied] (1 entry) Ursala User
rank: 207 [tied] (2 entries) UserRPL User
rank: 274 [tied] (1 entry) V User
rank: 153 [tied] (4 entries) Vala User
rank: 172 [tied] (3 entries) VAX Assembly User
rank: 133 [tied] (5 entries) VB6 User
rank: 59 [tied] (19 entries) VBA User
rank: 53 [tied] (23 entries) VBScript User
rank: 274 [tied] (1 entry) Vedit macro language User
rank: 133 [tied] (5 entries) Verilog User
rank: 109 [tied] (7 entries) VHDL User
rank: 121 [tied] (6 entries) Vim Script User
rank: 33 [tied] (38 entries) Visual Basic .NET User
rank: 16 (73 entries) Visual Basic User
rank: 274 [tied] (1 entry) Viua VM assembly User
rank: 274 [tied] (1 entry) Wart User
rank: 274 [tied] (1 entry) WDTE User
rank: 274 [tied] (1 entry) WebAssembly User
rank: 274 [tied] (1 entry) Whenever User
rank: 207 [tied] (2 entries) Whitespace User
rank: 274 [tied] (1 entry) Wisp User
rank: 274 [tied] (1 entry) WML User
rank: 172 [tied] (3 entries) Wolfram Language User
rank: 22 (51 entries) X86 Assembly User
rank: 172 [tied] (3 entries) X86-64 Assembly User
rank: 207 [tied] (2 entries) XBase User
rank: 274 [tied] (1 entry) XLISP User
rank: 172 [tied] (3 entries) Xojo User
rank: 274 [tied] (1 entry) XPL0 User
rank: 274 [tied] (1 entry) XProc User
rank: 133 [tied] (5 entries) XQuery User
rank: 53 [tied] (23 entries) XSLT User
rank: 274 [tied] (1 entry) XTalk User
rank: 207 [tied] (2 entries) XUL User
rank: 274 [tied] (1 entry) Yacas User
rank: 207 [tied] (2 entries) Yorick User
rank: 59 [tied] (19 entries) Z80 Assembly User
rank: 274 [tied] (1 entry) ZED User
rank: 207 [tied] (2 entries) Zig User
rank: 274 [tied] (1 entry) Zkl User
rank: 274 [tied] (1 entry) Zoea User
rank: 274 [tied] (1 entry) ZPL User
rank: 153 [tied] (4 entries) ZX Spectrum Basic User
rank: 274 [tied] (1 entry) µC++ User

☼ end─of─list. ☼
</pre>


=={{header|Stata}}==
=={{header|Stata}}==


<lang stata>copy "http://rosettacode.org/mw/index.php?title=Special:Categories&limit=5000" categ.html, replace
<syntaxhighlight lang="stata">copy "http://rosettacode.org/mw/index.php?title=Special:Categories&limit=5000" categ.html, replace
import delimited categ.html, delim("@") enc("utf-8") clear
import delimited categ.html, delim("@") enc("utf-8") clear
keep if ustrpos(v1,"/wiki/Category:") & ustrpos(v1,"_User")
keep if ustrpos(v1,"/wiki/Category:") & ustrpos(v1,"_User")
Line 55: Line 1,926:
drop s
drop s
gsort -users lang
gsort -users lang
compress
list if users>=100
leftalign
save rc_users, replace</lang>
list in f/50
save rc_users, replace</syntaxhighlight>


'''Output'''
'''Output''' (2019-02-18)

<pre> +----------------------------+
| lang users |
|----------------------------|
1. | C 391 |
2. | Java 276 |
3. | C++ 275 |
4. | Python 262 |
5. | JavaScript 238 |
|----------------------------|
6. | Perl 171 |
7. | PHP 167 |
8. | SQL 138 |
9. | UNIX Shell 131 |
10. | BASIC 120 |
|----------------------------|
11. | C sharp 118 |
12. | Pascal 116 |
13. | Haskell 102 |
14. | Ruby 93 |
15. | Fortran 79 |
|----------------------------|
16. | Visual Basic 68 |
17. | Prolog 65 |
18. | Scheme 61 |
19. | Common Lisp 58 |
20. | AWK 57 |
|----------------------------|
21. | Lua 57 |
22. | HTML 52 |
23. | Assembly 45 |
24. | Batch File 44 |
25. | X86 Assembly 44 |
|----------------------------|
26. | Bash 43 |
27. | Erlang 40 |
28. | Lisp 39 |
29. | MATLAB 39 |
30. | Forth 38 |
|----------------------------|
31. | Ada 36 |
32. | Visual Basic .NET 36 |
33. | Delphi 35 |
34. | J 35 |
35. | APL 34 |
|----------------------------|
36. | Brainf*** 34 |
37. | Tcl 34 |
38. | Objective-C 33 |
39. | Smalltalk 33 |
40. | COBOL 32 |
|----------------------------|
41. | R 32 |
42. | Go 30 |
43. | Mathematica 30 |
44. | Perl 6 29 |
45. | Clojure 27 |
|----------------------------|
46. | AutoHotkey 25 |
47. | REXX 25 |
48. | LaTeX 23 |
49. | OCaml 23 |
50. | Sed 23 |
+----------------------------+</pre>

=={{header|Wren}}==
{{libheader|libcurl}}
{{libheader|Wren-pattern}}
{{libheader|Wren-fmt}}
An embedded program so we can use the libcurl library.

We can in fact get all the information needed for this task just by parsing the 'Special:Categories' page. Note however that the HTML for this page contains some invisible Unicode right-to-left and left-to-right characters - a well known security risk but apparently harmless here - which need to be allowed for when extracting the number of users.
<syntaxhighlight lang="wren">/* Rosetta_Code_Rank_languages_by_number_of_users.wren */

import "./pattern" for Pattern
import "./fmt" for Fmt

var CURLOPT_URL = 10002
var CURLOPT_FOLLOWLOCATION = 52
var CURLOPT_WRITEFUNCTION = 20011
var CURLOPT_WRITEDATA = 10001

foreign class Buffer {
construct new() {} // C will allocate buffer of a suitable size

foreign value // returns buffer contents as a string
}

foreign class Curl {
construct easyInit() {}

foreign easySetOpt(opt, param)

foreign easyPerform()

foreign easyCleanup()
}

var curl = Curl.easyInit()

var getContent = Fn.new { |url|
var buffer = Buffer.new()
curl.easySetOpt(CURLOPT_URL, url)
curl.easySetOpt(CURLOPT_FOLLOWLOCATION, 1)
curl.easySetOpt(CURLOPT_WRITEFUNCTION, 0) // write function to be supplied by C
curl.easySetOpt(CURLOPT_WRITEDATA, buffer)
curl.easyPerform()
return buffer.value
}

var p = Pattern.new(" User\">[+1^<]<//a>\u200f\u200e ([#13/d] member~s)")
var url = "https://rosettacode.org/w/index.php?title=Special:Categories&limit=5000"
var content = getContent.call(url)
var matches = p.findAll(content)
var over100s = []
for (m in matches) {
var numUsers = Num.fromString(m.capsText[1])
if (numUsers >= 100) {
var language = m.capsText[0][0..-6]
over100s.add([language, numUsers])
}
}
over100s.sort { |a, b| a[1] > b[1] }
System.print("Languages with at least 100 users as at 3 February, 2024:")
var rank = 0
var lastScore = 0
var lastRank = 0
for (i in 0...over100s.count) {
var pair = over100s[i]
var eq = " "
rank = i + 1
if (lastScore == pair[1]) {
eq = "="
rank = lastRank
} else {
lastScore = pair[1]
lastRank = rank
}
Fmt.print("$-2d$s $-11s $d", rank, eq, pair[0], pair[1])
}</syntaxhighlight>
<br>
We now embed this script in the following C program, build and run.
<syntaxhighlight lang="c">/* gcc Rosetta_Code_Rank_languages_by_number_of_users.c -o Rosetta_Code_Rank_languages_by_number_of_users -lcurl -lwren -lm */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include "wren.h"

struct MemoryStruct {
char *memory;
size_t size;
};

/* C <=> Wren interface functions */

static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) {
size_t realsize = size * nmemb;
struct MemoryStruct *mem = (struct MemoryStruct *)userp;
char *ptr = realloc(mem->memory, mem->size + realsize + 1);
if(!ptr) {
/* out of memory! */
printf("not enough memory (realloc returned NULL)\n");
return 0;
}

mem->memory = ptr;
memcpy(&(mem->memory[mem->size]), contents, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;
return realsize;
}

void C_bufferAllocate(WrenVM* vm) {
struct MemoryStruct *ms = (struct MemoryStruct *)wrenSetSlotNewForeign(vm, 0, 0, sizeof(struct MemoryStruct));
ms->memory = malloc(1);
ms->size = 0;
}

void C_bufferFinalize(void* data) {
struct MemoryStruct *ms = (struct MemoryStruct *)data;
free(ms->memory);
}

void C_curlAllocate(WrenVM* vm) {
CURL** pcurl = (CURL**)wrenSetSlotNewForeign(vm, 0, 0, sizeof(CURL*));
*pcurl = curl_easy_init();
}

void C_value(WrenVM* vm) {
struct MemoryStruct *ms = (struct MemoryStruct *)wrenGetSlotForeign(vm, 0);
wrenSetSlotString(vm, 0, ms->memory);
}

void C_easyPerform(WrenVM* vm) {
CURL* curl = *(CURL**)wrenGetSlotForeign(vm, 0);
curl_easy_perform(curl);
}

void C_easyCleanup(WrenVM* vm) {
CURL* curl = *(CURL**)wrenGetSlotForeign(vm, 0);
curl_easy_cleanup(curl);
}

void C_easySetOpt(WrenVM* vm) {
CURL* curl = *(CURL**)wrenGetSlotForeign(vm, 0);
CURLoption opt = (CURLoption)wrenGetSlotDouble(vm, 1);
if (opt < 10000) {
long lparam = (long)wrenGetSlotDouble(vm, 2);
curl_easy_setopt(curl, opt, lparam);
} else if (opt < 20000) {
if (opt == CURLOPT_WRITEDATA) {
struct MemoryStruct *ms = (struct MemoryStruct *)wrenGetSlotForeign(vm, 2);
curl_easy_setopt(curl, opt, (void *)ms);
} else if (opt == CURLOPT_URL) {
const char *url = wrenGetSlotString(vm, 2);
curl_easy_setopt(curl, opt, url);
}
} else if (opt < 30000) {
if (opt == CURLOPT_WRITEFUNCTION) {
curl_easy_setopt(curl, opt, &WriteMemoryCallback);
}
}
}

WrenForeignClassMethods bindForeignClass(WrenVM* vm, const char* module, const char* className) {
WrenForeignClassMethods methods;
methods.allocate = NULL;
methods.finalize = NULL;
if (strcmp(module, "main") == 0) {
if (strcmp(className, "Buffer") == 0) {
methods.allocate = C_bufferAllocate;
methods.finalize = C_bufferFinalize;
} else if (strcmp(className, "Curl") == 0) {
methods.allocate = C_curlAllocate;
}
}
return methods;
}

WrenForeignMethodFn bindForeignMethod(
WrenVM* vm,
const char* module,
const char* className,
bool isStatic,
const char* signature) {
if (strcmp(module, "main") == 0) {
if (strcmp(className, "Buffer") == 0) {
if (!isStatic && strcmp(signature, "value") == 0) return C_value;
} else if (strcmp(className, "Curl") == 0) {
if (!isStatic && strcmp(signature, "easySetOpt(_,_)") == 0) return C_easySetOpt;
if (!isStatic && strcmp(signature, "easyPerform()") == 0) return C_easyPerform;
if (!isStatic && strcmp(signature, "easyCleanup()") == 0) return C_easyCleanup;
}
}
return NULL;
}

static void writeFn(WrenVM* vm, const char* text) {
printf("%s", text);
}

void errorFn(WrenVM* vm, WrenErrorType errorType, const char* module, const int line, const char* msg) {
switch (errorType) {
case WREN_ERROR_COMPILE:
printf("[%s line %d] [Error] %s\n", module, line, msg);
break;
case WREN_ERROR_STACK_TRACE:
printf("[%s line %d] in %s\n", module, line, msg);
break;
case WREN_ERROR_RUNTIME:
printf("[Runtime Error] %s\n", msg);
break;
}
}

char *readFile(const char *fileName) {
FILE *f = fopen(fileName, "r");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
rewind(f);
char *script = malloc(fsize + 1);
fread(script, 1, fsize, f);
fclose(f);
script[fsize] = 0;
return script;
}

static void loadModuleComplete(WrenVM* vm, const char* module, WrenLoadModuleResult result) {
if( result.source) free((void*)result.source);
}

WrenLoadModuleResult loadModule(WrenVM* vm, const char* name) {
WrenLoadModuleResult result = {0};
if (strcmp(name, "random") != 0 && strcmp(name, "meta") != 0) {
result.onComplete = loadModuleComplete;
char fullName[strlen(name) + 6];
strcpy(fullName, name);
strcat(fullName, ".wren");
result.source = readFile(fullName);
}
return result;
}

int main(int argc, char **argv) {
WrenConfiguration config;
wrenInitConfiguration(&config);
config.writeFn = &writeFn;
config.errorFn = &errorFn;
config.bindForeignClassFn = &bindForeignClass;
config.bindForeignMethodFn = &bindForeignMethod;
config.loadModuleFn = &loadModule;
WrenVM* vm = wrenNewVM(&config);
const char* module = "main";
const char* fileName = "Rosetta_Code_Rank_languages_by_number_of_users.wren";
char *script = readFile(fileName);
WrenInterpretResult result = wrenInterpret(vm, module, script);
switch (result) {
case WREN_RESULT_COMPILE_ERROR:
printf("Compile Error!\n");
break;
case WREN_RESULT_RUNTIME_ERROR:
printf("Runtime Error!\n");
break;
case WREN_RESULT_SUCCESS:
break;
}
wrenFreeVM(vm);
free(script);
return 0;
}</syntaxhighlight>

{{out}}
<pre>
Languages with at least 100 users as at 3 February, 2024:
1 C 434
2 Java 326
3 Python 323
4 C++ 306
5 JavaScript 287
6 PHP 188
7 Perl 181
8 SQL 166
9 UNIX Shell 146
10 Pascal 128
10= BASIC 128
12 C sharp 124
13 Haskell 107
14 Ruby 101
</pre>

=={{header|zkl}}==
Uses libraries cURL and YAJL (yet another json library)
<syntaxhighlight lang="zkl">const MIN_USERS=60;
var [const] CURL=Import("zklCurl"), YAJL=Import("zklYAJL")[0];

fcn rsGet{
continueValue,r,curl := "",List, CURL();
do{ // eg 5 times
page:=("http://rosettacode.org/mw/api.php?action=query"
"&generator=categorymembers&prop=categoryinfo"
"&gcmtitle=Category%%3ALanguage%%20users"
"&rawcontinue=&format=json&gcmlimit=350"
"%s").fmt(continueValue);
page=curl.get(page);
page=page[0].del(0,page[1]); // get rid of HTML header
json:=YAJL().write(page).close();
json["query"]["pages"].pump(r.append,'wrap(x){ x=x[1];
//("2708",Dictionary(title:Category:C User,...,categoryinfo:D(pages:373,size:373,...)))
// or title:SmartBASIC
if((pgs:=x.find("categoryinfo")) and (pgs=pgs.find("pages")) and
pgs>=MIN_USERS)
return(pgs,x["title"].replace("Category:","").replace(" User",""));
return(Void.Skip);
});
if(continueValue=json.find("query-continue",""))
continueValue=String("&gcmcontinue=",
continueValue["categorymembers"]["gcmcontinue"]);
}while(continueValue);
r
}


allLangs:=rsGet();
<pre> +---------------------+
allLangs=allLangs.sort(fcn(a,b){ a[0]>b[0] });
| lang users |
println("========== ",Time.Date.prettyDay()," ==========");
|---------------------|
foreach n,pgnm in ([1..].zip(allLangs))
1. | C 373 |
{ println("#%3d with %4s users: %s".fmt(n,pgnm.xplode())) }</syntaxhighlight>
2. | C++ 261 |
{{out}}
3. | Java 257 |
<pre>
4. | Python 243 |
========== Wednesday, the 20th of December 2017 ==========
5. | JavaScript 186 |
# 1 with 373 users: C
|---------------------|
# 2 with 261 users: C++
6. | PHP 163 |
# 3 with 257 users: Java
7. | Perl 162 |
# 4 with 243 users: Python
8. | SQL 131 |
# 5 with 228 users: JavaScript
9. | UNIX Shell 120 |
# 6 with 163 users: PHP
10. | C sharp 113 |
# 7 with 162 users: Perl
|---------------------|
# 8 with 131 users: SQL
11. | Pascal 109 |
# 9 with 120 users: UNIX Shell
12. | BASIC 102 |
# 10 with 118 users: BASIC
+---------------------+</pre>
# 11 with 113 users: C sharp
# 12 with 109 users: Pascal
# 13 with 98 users: Haskell
# 14 with 91 users: Ruby
# 15 with 71 users: Fortran
# 16 with 65 users: Visual Basic
# 17 with 60 users: Scheme
</pre>

Latest revision as of 17:26, 3 February 2024

Task
Rosetta Code/Rank languages by number of users
You are encouraged to solve this task according to the task description, using any language you may know.
Task

Sort most popular programming languages based on the number of users on Rosetta Code.

Show the languages with at least 100 users.


A method to solve the task

Users of a computer programming language   X   are those referenced in the page:

 https://rosettacode.org/wiki/Category:X_User,     or preferably: 
 https://rosettacode.org/mw/index.php?title=Category:X_User&redirect=no to avoid re-directions. 

In order to find the list of such categories,   it's possible to first parse the entries of:

 http://rosettacode.org/mw/index.php?title=Special:Categories&limit=5000. 

Then download and parse each computer language   users   category to find the number of users of that computer language.


Sample output on 18 February 2019:

Language             Users
--------------------------
C                      391
Java                   276
C++                    275
Python                 262
JavaScript             238
Perl                   171
PHP                    167
SQL                    138
UNIX Shell             131
BASIC                  120
C sharp                118
Pascal                 116
Haskell                102

A Rosetta Code user usually declares using a language with the mylang template. This template is expected to appear on the User page. However, in some cases it appears in a user Talk page. It's not necessary to take this into account. For instance, among the 373 C users in the table above, 3 are actually declared in a Talk page.

Go

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "regexp"
    "sort"
    "strconv"
)

type Result struct {
    lang  string
    users int
}

func main() {
    const minimum = 25
    ex := `"Category:(.+?)( User)?"(\}|,"categoryinfo":\{"size":(\d+),)`
    re := regexp.MustCompile(ex)
    page := "http://rosettacode.org/mw/api.php?"
    action := "action=query"
    format := "format=json"
    fversion := "formatversion=2"
    generator := "generator=categorymembers"
    gcmTitle := "gcmtitle=Category:Language%20users"
    gcmLimit := "gcmlimit=500"
    prop := "prop=categoryinfo"
    rawContinue := "rawcontinue="
    page += fmt.Sprintf("%s&%s&%s&%s&%s&%s&%s&%s", action, format, fversion,
        generator, gcmTitle, gcmLimit, prop, rawContinue)
    resp, _ := http.Get(page)
    body, _ := ioutil.ReadAll(resp.Body)
    matches := re.FindAllStringSubmatch(string(body), -1)
    resp.Body.Close()
    var results []Result
    for _, match := range matches {
        if len(match) == 5 {
            users, _ := strconv.Atoi(match[4]) 
            if users >= minimum {
                result := Result{match[1], users}
                results = append(results, result)
            }
        }
    }
    sort.Slice(results, func(i, j int) bool {
        return results[j].users < results[i].users
    })

    fmt.Println("Rank  Users  Language")
    fmt.Println("----  -----  --------")
    rank := 0
    lastUsers := 0
    lastRank := 0
    for i, result := range results {
        eq := " "
        rank = i + 1
        if lastUsers == result.users {
            eq = "="
            rank = lastRank
        } else {
            lastUsers = result.users
            lastRank = rank
        }
        fmt.Printf(" %-2d%s   %3d    %s\n", rank, eq, result.users, result.lang)
    }
}
Output:
Rank  Users  Language
----  -----  --------
 1     397    C
 2     278    C++
 2 =   278    Java
 4     266    Python
 5     240    JavaScript
 6     171    Perl
 7     168    PHP
 8     139    SQL
 9     131    UNIX Shell
 10    121    C sharp
 11    120    BASIC
 12    118    Pascal
 13    102    Haskell
 14     93    Ruby
 15     81    Fortran
 16     70    Visual Basic
 17     65    Prolog
 18     61    Scheme
 19     59    Common Lisp
 20     58    AWK
 20=    58    Lua
 22     52    HTML
 23     46    Batch File
 24     45    Assembly
 24=    45    X86 Assembly
 26     43    Bash
 27     40    Erlang
 27=    40    MATLAB
 29     39    Lisp
 30     38    Forth
 31     36    Visual Basic .NET
 31=    36    Delphi
 33     35    APL
 33=    35    J
 35     34    Tcl
 35=    34    Brainf***
 37     33    Objective-C
 38     32    COBOL
 38=    32    R
 40     30    Go
 40=    30    Mathematica
 42     29    Perl 6
 43     27    Clojure
 44     25    OCaml
 44=    25    AutoHotkey
 44=    25    REXX

Julia

""" Rank languages on Rosetta Code's site by number of users."""

using Dates
using HTTP
using JSON3

const URL = "https://rosettacode.org/w/api.php?"
const PARAMS = ["action" => "query", "format" => "json", "formatversion" => "2", "generator" => "categorymembers",
   "gcmtitle" => "Category:Language%20users", "gcmlimit" => "500", "rawcontinue" => "", "prop" => "categoryinfo"]

const resp = HTTP.get(URL * join(map(p -> p[1] * (p[2] == "" ? "" : ("=" * p[2])), PARAMS), "&"))
const counts = Pair{Int, String}[]

for p in JSON3.read(String(resp.body)).query.pages
    contains(p.title, "Category") && push!(counts, p.categoryinfo.size => p.title)
end

println("Date: ", now(), "\nLanguage       Users\n----------------------")
for p in sort!(filter(p -> p[1] >= 100, counts), rev = true)
    println(rpad(replace(p[2], r"Category:(.+) User" => s"\1"), 16), lpad(p[1], 4))
end
Output:
Date: 2022-09-03T21:17:29.428
Language       Users  
----------------------
C                441
Java             321
Python           319
C++              314
JavaScript       291
PHP              190
Perl             186
SQL              167
UNIX Shell       151
Pascal           133
C sharp          132
BASIC            132
Haskell          115
Ruby             107

Nim

import algorithm, httpclient, json, strformat, strscans, strutils

const
  Action = "action=query"
  Format = "format=json"
  FormatVersion = "formatversion=2"
  Generator = "generator=categorymembers"
  GcmTitle = "gcmtitle=Category:Language%20users"
  GcmLimit = "gcmlimit=500"
  Prop = "prop=categoryinfo"

  Page = "http://rosettacode.org/w/api.php?"  &
         [Action, Format, Formatversion, Generator, GcmTitle, GcmLimit, Prop].join("&")

type Counts = tuple[lang: string, count: int]

proc cmp(a, b: Counts): int =
  ## Compare two count tuples. Place the one with greater count field first and when
  ## count fields are equal, place the one with the first name in alphabetic order.
  result = cmp(b.count, a.count)
  if result == 0: result = cmp(a.lang, b.lang)

var client = newHttpClient()
var counts: seq[Counts]
var url = Page

while true:

  # Access to the page and load the JSON representation.
  let response = client.get(url)
  if response.status != $Http200: break
  let root = response.body.parseJson()

  # Extract language names and number of users.
  for node in root{"query", "pages"}:
    var lang: string
    if node["title"].getStr().scanf("Category:$+ User", lang):
      let count = node{"categoryinfo", "size"}.getInt()
      counts.add (lang, count)
  if "continue" notin root: break

  # Load continuation page.
  let gcmcont = root{"continue", "gcmcontinue"}.getStr()
  let cont = root{"continue", "continue"}.getStr()
  url = Page & fmt"&gcmcontinue={gcmcont}&continue={cont}"

# Sort and display.
counts.sort(cmp)
var rank, lastCount = 0
for i, (lang, count) in counts:
  if count != lastCount:
    rank = i + 1
    lastCount = count
  echo &"{rank:3} {count:4} - {lang}"
Output:
  1  451 - C
  2  331 - Java
  3  328 - Python
  4  321 - C++
  5  295 - JavaScript
  6  194 - PHP
  7  188 - Perl
  8  170 - SQL
  9  154 - UNIX Shell
 10  136 - Pascal
 11  135 - C sharp
 12  134 - BASIC
 13  115 - Haskell
 14  109 - Ruby
 15   94 - Fortran
 16   76 - Visual Basic
 17   73 - Scheme
 18   70 - Prolog
 19   68 - AWK
 19   68 - Lua
 21   66 - Common Lisp
 22   62 - HTML
 23   56 - X86 Assembly
 24   50 - Forth
 25   49 - Batch File
 26   47 - Assembly
 26   47 - Bash
 28   45 - MATLAB
 29   42 - Lisp
 30   41 - APL
 30   41 - Delphi
 30   41 - Erlang
 30   41 - Go
 34   40 - R
 35   39 - J
 35   39 - Tcl
 35   39 - Visual Basic .NET
 38   38 - COBOL
 39   37 - Objective-C
 39   37 - Smalltalk
 41   35 - Brainf***
 42   33 - Clojure
 42   33 - Mathematica
 44   30 - OCaml
 45   28 - LaTeX
 45   28 - REXX
 47   27 - AutoHotkey
 47   27 - Emacs Lisp
 47   27 - PostScript
 50   26 - Scala
 50   26 - Sed
 50   26 - VBScript
 53   25 - 6502 Assembly
 53   25 - CSS
 53   25 - Perl 6
 53   25 - Racket
 57   24 - MySQL
 57   24 - XSLT
 59   22 - Rust
 60   21 - 8086 Assembly
 60   21 - Logo
 60   21 - VBA
 60   21 - Z80 Assembly
 64   19 - Apex
 64   19 - F Sharp
 64   19 - Julia
 64   19 - Make
 68   18 - AppleScript
 68   18 - Factor
 68   18 - PL/I
 68   18 - TI-83 BASIC
 72   17 - D
 72   17 - Standard ML
 74   16 - Modula-2
 74   16 - PowerShell
 76   15 - ARM Assembly
 76   15 - ActionScript
 76   15 - Icon
 76   15 - Nim
 80   14 - Maxima
 80   14 - SNOBOL4
 82   13 - 80386 Assembly
 82   13 - Befunge
 82   13 - Euphoria
 85   12 - CoffeeScript
 85   12 - Unicon
 87   11 - Eiffel
 87   11 - Elixir
 87   11 - Groovy
 87   11 - Korn Shell
 87   11 - MIPS Assembly
 87   11 - Octave
 87   11 - PARI/GP
 87   11 - TypeScript
 87   11 - UnixPipes
 ...
394    0 - Vorpal
394    0 - Vox
394    0 - Wrapl
394    0 - Zonnon

Perl

use strict;
use warnings;
use JSON;
use URI::Escape;
use LWP::UserAgent;

my $client = LWP::UserAgent->new;
$client->agent("Rosettacode Perl task solver");
my $url = 'http://rosettacode.org/mw';
my $minimum = 100;

sub uri_query_string {
    my(%fields) = @_;
    'action=query&format=json&formatversion=2&' .
    join '&', map { $_ . '=' . uri_escape($fields{$_}) } keys %fields
}

sub mediawiki_query {
    my($site, $type, %query) = @_;
    my $url = "$site/api.php?" . uri_query_string(%query);
    my %languages = ();

    my $req = HTTP::Request->new( GET => $url );
    my $response = $client->request($req);
    $response->is_success or die "Failed to GET '$url': ", $response->status_line;
    my $data = decode_json($response->content);
    for my $row ( @{${$data}{query}{pages}} ) {
        next unless defined $$row{categoryinfo} && $$row{title} =~ /User/;
        my($title) = $$row{title} =~ /Category:(.*?) User/;
        my($count) = $$row{categoryinfo}{pages};
        $languages{$title} = $count;
    }
    %languages;
}

my %table = mediawiki_query(
    $url, 'pages',
    ( generator   => 'categorymembers',
      gcmtitle    => 'Category:Language users',
      gcmlimit    => '999',
      prop        => 'categoryinfo',
      rawcontinue => '',
    )
);

for my $k (sort { $table{$b} <=> $table{$a} } keys %table) {
    printf "%4d %s\n", $table{$k}, $k if $table{$k} > $minimum;
}
Output:
 397 C
 278 Java
 278 C++
 266 Python
 240 JavaScript
 171 Perl
 168 PHP
 139 SQL
 131 UNIX Shell
 121 C sharp
 120 BASIC
 118 Pascal
 102 Haskell

Phix

See Rank languages by popularity, just set output_users to true.

Output:
  1: 397 - C
  2: 278 - C++
  =: 278 - Java
  4: 266 - Python
  5: 240 - JavaScript
  6: 171 - Perl
  7: 168 - PHP
  8: 139 - SQL
  9: 131 - UNIX Shell
 10: 121 - C sharp
 11: 120 - BASIC
 12: 118 - Pascal
 13: 102 - Haskell
 14: 93 - Ruby
 15: 81 - Fortran
 16: 70 - Visual Basic
 17: 65 - Prolog
 18: 61 - Scheme
 19: 59 - Common Lisp
 20: 58 - AWK

Python

Library: requests
"""Rank languages by number of users. Requires Python >=3.5"""

import requests

# MediaWiki API URL.
URL = "http://rosettacode.org/mw/api.php"

# Query string parameters
PARAMS = {
    "action": "query",
    "format": "json",
    "formatversion": 2,
    "generator": "categorymembers",
    "gcmtitle": "Category:Language users",
    "gcmlimit": 500,
    "prop": "categoryinfo",
}


def fetch_data():
    counts = {}
    continue_ = {"continue": ""}

    # Keep making HTTP requests to the MediaWiki API if more records are
    # available.
    while continue_:
        resp = requests.get(URL, params={**PARAMS, **continue_})
        resp.raise_for_status()

        data = resp.json()

        # Grab the title (language) and size (count) only.
        counts.update(
            {
                p["title"]: p.get("categoryinfo", {}).get("size", 0)
                for p in data["query"]["pages"]
            }
        )

        continue_ = data.get("continue", {})

    return counts


if __name__ == "__main__":
    # Request data from the MediaWiki API.
    counts = fetch_data()

    # Filter out languages that have less than 100 users.
    at_least_100 = [(lang, count) for lang, count in counts.items() if count >= 100]

    # Sort languages by number of users
    top_languages = sorted(at_least_100, key=lambda x: x[1], reverse=True)

    # Pretty print
    for i, lang in enumerate(top_languages):
        print(f"{i+1:<5}{lang[0][9:][:-5]:<20}{lang[1]}")
Output:
1    C                   423
2    Java                308
3    C++                 301
4    Python              301
5    JavaScript          279
6    PHP                 182
7    Perl                181
8    SQL                 158
9    UNIX Shell          149
10   Pascal              130
11   C sharp             130
12   BASIC               129
13   Haskell             111
14   Ruby                102

Racket

Note: the implementation is very similar to Rank languages by popularity.

#lang racket
 
(require racket/hash
         net/url
         json)
 
(define limit 64)
(define (replacer cat) (regexp-replace #rx"^Category:(.*?) User$" cat "\\1"))
(define category "Category:Language users")
(define entries "users")
 
(define api-url (string->url "http://rosettacode.org/mw/api.php"))
(define (make-complete-url gcmcontinue)
  (struct-copy url api-url
               [query `([format . "json"]
                        [action . "query"]
                        [generator . "categorymembers"]
                        [gcmtitle . ,category]
                        [gcmlimit . "200"]
                        [gcmcontinue . ,gcmcontinue]
                        [continue . ""]
                        [prop . "categoryinfo"])]))

(define @ hash-ref)

(define table (make-hash))
 
(let loop ([gcmcontinue ""])
  (define resp (read-json (get-pure-port (make-complete-url gcmcontinue))))
  (hash-union! table
               (for/hash ([(k v) (in-hash (@ (@ resp 'query) 'pages))])
                 (values (@ v 'title #f) (@ (@ v 'categoryinfo (hash)) 'size 0))))
  (cond [(@ resp 'continue #f) => (λ (c) (loop (@ c 'gcmcontinue)))]))
 
(for/fold ([prev #f] [rank #f] #:result (void))
          ([item (in-list (sort (hash->list table) > #:key cdr))] [i (in-range limit)])
  (match-define (cons cat size) item)
  (define this-rank (if (equal? prev size) rank (add1 i)))
  (printf "Rank: ~a ~a ~a\n"
          (~a this-rank #:align 'right #:min-width 2)
          (~a (format "(~a ~a)" size entries) #:align 'right #:min-width 14)
          (replacer cat))
  (values size this-rank))
Output:
Rank:  1    (402 users) C
Rank:  2    (283 users) Java
Rank:  3    (281 users) C++
Rank:  4    (270 users) Python
Rank:  5    (243 users) JavaScript
Rank:  6    (175 users) Perl
Rank:  7    (171 users) PHP
Rank:  8    (142 users) SQL
Rank:  9    (134 users) UNIX Shell
Rank: 10    (123 users) C sharp
Rank: 10    (123 users) BASIC
Rank: 12    (119 users) Pascal
Rank: 13    (105 users) Haskell
Rank: 14     (94 users) Ruby
Rank: 15     (83 users) Fortran
Rank: 16     (71 users) Visual Basic
Rank: 17     (67 users) Prolog
Rank: 18     (63 users) Scheme
Rank: 19     (61 users) Common Lisp
Rank: 20     (59 users) AWK
Rank: 20     (59 users) Lua
Rank: 22     (52 users) HTML
Rank: 23     (46 users) X86 Assembly
Rank: 23     (46 users) Batch File
Rank: 23     (46 users) Assembly
Rank: 26     (44 users) Bash
Rank: 27     (40 users) Erlang
Rank: 27     (40 users) MATLAB
Rank: 29     (39 users) Forth
Rank: 29     (39 users) Lisp
Rank: 31     (37 users) Visual Basic .NET
Rank: 32     (36 users) APL
Rank: 32     (36 users) Tcl
Rank: 32     (36 users) Delphi
Rank: 35     (35 users) J
Rank: 36     (34 users) Brainf***
Rank: 37     (33 users) COBOL
Rank: 37     (33 users) Objective-C
Rank: 39     (32 users) Go
Rank: 39     (32 users) R
Rank: 41     (30 users) Mathematica
Rank: 42     (29 users) Perl 6
Rank: 43     (28 users) Clojure
Rank: 44     (25 users) OCaml
Rank: 44     (25 users) AutoHotkey
Rank: 44     (25 users) REXX
Rank: 47     (24 users) PostScript
Rank: 48     (23 users) Sed
Rank: 48     (23 users) Emacs Lisp
Rank: 48     (23 users) LaTeX
Rank: 51     (22 users) VBScript
Rank: 51     (22 users) CSS
Rank: 51     (22 users) MySQL
Rank: 51     (22 users) Scala
Rank: 55     (20 users) XSLT
Rank: 55     (20 users) Racket
Rank: 57     (19 users) 6502 Assembly
Rank: 58     (18 users) Z80 Assembly
Rank: 58     (18 users) Logo
Rank: 60     (17 users) Factor
Rank: 60     (17 users) Make
Rank: 60     (17 users) 8086 Assembly
Rank: 60     (17 users) F Sharp
Rank: 64     (16 users) PL/I

Raku

(formerly Perl 6)

Works with: Rakudo version 2017.11

Use the mediawiki API rather than web scraping since it is much faster and less resource intensive. Show languages with more than 25 users since that is still a pretty short list and to demonstrate how tied rankings are handled. Change the $minimum parameter to adjust what the cut-off point will be.

This is all done in a single pass; ties are not detected until a language has the same count as a previous one, so ties are marked by a T next to the count indicating that this language has the same count as the previous.

use HTTP::UserAgent;
use URI::Escape;
use JSON::Fast;

my $client = HTTP::UserAgent.new;

my $url = 'https://rosettacode.org/w';

my $start-time = now;

say "========= Generated: { DateTime.new(time) } =========";

my $lang = 1;
my $rank = 0;
my $last = 0;
my $tie = ' ';
my $minimum = 25;

.say for
    mediawiki-query(
        $url, 'pages',
        :generator<categorymembers>,
        :gcmtitle<Category:Language users>,
        :gcmlimit<350>,
        :rawcontinue(),
        :prop<categoryinfo>
    )

    .map({ %( count => .<categoryinfo><pages> || 0,
              lang  => .<title>.subst(/^'Category:' (.+) ' User'/, ->$/ {$0}) ) })

    .sort( { -.<count>, .<syntaxhighlight lang="text"> } )

    .map( { last if .<count> < $minimum; display(.<count>, .<syntaxhighlight lang="text">) } );

say "========= elapsed: {(now - $start-time).round(.01)} seconds =========";

sub display ($count, $which) {
    if $last != $count { $last = $count; $rank = $lang; $tie = ' ' } else { $tie = 'T' };
    sprintf "#%3d  Rank: %2d %s  with %-4s users:  %s", $lang++, $rank, $tie, $count, $which;
}

sub mediawiki-query ($site, $type, *%query) {
    my $url = "$site/api.php?" ~ uri-query-string(
        :action<query>, :format<json>, :formatversion<2>, |%query);
    my $continue = '';

    gather loop {
        my $response = $client.get("$url&$continue");
        my $data = from-json($response.content);
        take $_ for $data.<query>.{$type}.values;
        $continue = uri-query-string |($data.<query-continue>{*}».hash.hash or last);
    }
}

sub uri-query-string (*%fields) {
    join '&', %fields.map: { "{.key}={uri-escape .value}" }
}
Output:
========= Generated: 2022-09-02T20:59:20Z =========
#  1  Rank:  1    with 441  users:  C
#  2  Rank:  2    with 321  users:  Java
#  3  Rank:  3    with 319  users:  Python
#  4  Rank:  4    with 314  users:  C++
#  5  Rank:  5    with 291  users:  JavaScript
#  6  Rank:  6    with 190  users:  PHP
#  7  Rank:  7    with 186  users:  Perl
#  8  Rank:  8    with 167  users:  SQL
#  9  Rank:  9    with 151  users:  UNIX Shell
# 10  Rank: 10    with 133  users:  Pascal
# 11  Rank: 11    with 132  users:  BASIC
# 12  Rank: 11 T  with 132  users:  C sharp
# 13  Rank: 13    with 115  users:  Haskell
# 14  Rank: 14    with 107  users:  Ruby
# 15  Rank: 15    with 94   users:  Fortran
# 16  Rank: 16    with 75   users:  Visual Basic
# 17  Rank: 17    with 72   users:  Scheme
# 18  Rank: 18    with 70   users:  Prolog
# 19  Rank: 19    with 68   users:  AWK
# 20  Rank: 19 T  with 68   users:  Lua
# 21  Rank: 21    with 66   users:  Common Lisp
# 22  Rank: 22    with 61   users:  HTML
# 23  Rank: 23    with 55   users:  X86 Assembly
# 24  Rank: 24    with 50   users:  Forth
# 25  Rank: 25    with 49   users:  Batch File
# 26  Rank: 26    with 47   users:  Assembly
# 27  Rank: 27    with 45   users:  Bash
# 28  Rank: 27 T  with 45   users:  MATLAB
# 29  Rank: 29    with 42   users:  Lisp
# 30  Rank: 30    with 41   users:  APL
# 31  Rank: 30 T  with 41   users:  Erlang
# 32  Rank: 32    with 40   users:  Delphi
# 33  Rank: 32 T  with 40   users:  R
# 34  Rank: 34    with 39   users:  J
# 35  Rank: 34 T  with 39   users:  Visual Basic .NET
# 36  Rank: 36    with 38   users:  Go
# 37  Rank: 36 T  with 38   users:  Tcl
# 38  Rank: 38    with 37   users:  COBOL
# 39  Rank: 39    with 36   users:  Smalltalk
# 40  Rank: 40    with 35   users:  Brainf***
# 41  Rank: 40 T  with 35   users:  Objective-C
# 42  Rank: 42    with 34   users:  Clojure
# 43  Rank: 43    with 33   users:  Mathematica
# 44  Rank: 44    with 30   users:  OCaml
# 45  Rank: 45    with 28   users:  LaTeX
# 46  Rank: 46    with 27   users:  AutoHotkey
# 47  Rank: 46 T  with 27   users:  Emacs Lisp
# 48  Rank: 46 T  with 27   users:  PostScript
# 49  Rank: 46 T  with 27   users:  REXX
# 50  Rank: 50    with 26   users:  Perl 6
# 51  Rank: 50 T  with 26   users:  Sed
# 52  Rank: 52    with 25   users:  CSS
# 53  Rank: 52 T  with 25   users:  Scala
# 54  Rank: 52 T  with 25   users:  VBScript
========= elapsed: 1.48 seconds =========

========= elapsed: 1.45 seconds =========

REXX

(Native) REXX doesn't support web-page reading, so the mentioned   Rosetta Code categories   and
Rosetta Code Languages   were downloaded to local files.


This program reads the   Languages   file   (looking for a language user)   and uses the contents of
that file for a validation of the   categories   file.
This essentially is a perfect filter for the   Rosetta Code categories   file.

The   catHeap   variable in the REXX program is just a long string of all the records in the web-file of the
Rosetta Code categories, with a special character (sep) that separates each count of users
for a computer programming language entry (name).

The mechanism is to use a (sparse) stemmed array which holds only the names of languages which
(for most REXXes) uses a hashing algorithm to locate the entry   (which is very fast).

Programming note:   (REXX doesn't handle Unicode characters)   some special cases that are translated:

  •   ╬£C++                                  translated into   µC++          [Greek micro]
  •   ╨£╨Ü-61/52                         translated into   MK-61/52   [Cyrillic   МК-61/52])
  •   ??-61/52                              translated into   MK-61/52   [Cyrillic   МК-61/52])
  •   D├⌐j├á Vu                           translated into   Déjà Vu
  •   Cach├⌐                                translated into   Caché
  •   F┼ìrmul├ª                            translated into   Fôrmulæ
  •   α«ëα«»α«┐α«░α»ì/Uyir      translated into   Uyir
  •   ╨£iniZinc                             translated into   MiniZinc

(The 3rd entry is most likely caused by the inability to render unsupported glyphs when it was first used to add that language.)


Code was added to support the renaming of the computer programming language   Perl 6   ──►   Raku.

Note that this REXX example properly ranks tied languages.

/*REXX program reads 2 files & displays a ranked list of Rosetta Code languages by users*/
parse arg catFID lanFID outFID .                 /*obtain optional arguments from the CL*/
call init                                        /*initialize some  REXX  variables.    */
call get                                         /*obtain data from two separate files. */
call eSort #,0                                   /*sort languages along with members.   */
call tSort                                       /*  "      "     that are tied in rank.*/
call eSort #,1                                   /*  "      "     along with members.   */
call out                                         /*create the RC_USER.OUT (output) file.*/
exit 0                                           /*stick a fork in it,  we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
commas: parse arg _;   do jc=length(_)-3  to 1  by -3; _= insert(",",_,jc); end;  return _
s:      if arg(1)==1  then return arg(3);      return word(arg(2) 's',1)   /*pluralizer.*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
eSort: procedure expose #. @. !tr.;    arg N,p2;     h= N      /*sort: number of members*/
            do     while  h>1;         h= h % 2                /*halve number of records*/
              do i=1  for N-h;         j= i;         k= h + i  /*sort this part of list.*/
              if p2  then do  while !tR.k==!tR.j  &  @.k>@.j   /*this uses a hard swap ↓*/
                          @= @.j;  #= !tR.j;  @.j= @.k;  !tR.j= !tR.k;   @.k= @;  !tR.k= #
                          if h>=j  then leave;               j= j - h;     k= k - h
                          end   /*while !tR.k==···*/
                     else do  while #.k<#.j                    /*this uses a hard swap ↓*/
                          @= @.j;  #= #.j;    @.j= @.k;    #.j= #.k;     @.k= @;    #.k= #
                          if h>=j  then leave;               j= j - h;     k= k - h
                          end   /*while #.k<···*/
              end               /*i*/           /*hard swaps needed for embedded blanks.*/
            end                 /*while h>1*/;               return
/*──────────────────────────────────────────────────────────────────────────────────────*/
get: langs= 0;           call rdr 'languages'    /*assign languages  ───►  L.ααα        */
                         call rdr 'categories'   /*append categories ───► catHeap       */
     #= 0
           do j=1  until  catHeap==''            /*process the heap of categories.      */
           parse var catHeap cat.j (sep) catHeap /*get a category from the  catHeap.    */
           parse var cat.j  cat.j '<' "(" mems . /*untangle the strange─looking string. */
           cat.j= space(cat.j); ?=cat.j; upper ? /*remove any superfluous blanks.       */
           if ?=='' | \L.?          then iterate /*it's blank  or  it's not a language. */
           if pos(',', mems)\==0    then mems= space(translate(mems,,","), 0) /*¬commas.*/
           if \datatype(mems, 'W')  then iterate /*is the "members" number not numeric? */
           #.0= #.0 + mems                       /*bump the number of  members  found.  */
           if u.?\==0  then do;     do f=1  for #  until ?==@u.f
                                    end   /*f*/
                            #.f= #.f + mems; iterate j   /*languages in different cases.*/
                            end                  /* [↑]  handle any possible duplicates.*/
           u.?= u.? + 1;       #= # + 1          /*bump a couple of counters.           */
           #.#= #.# + mems;  @.#= cat.j;  @u.#=? /*bump the counter;  assign it (upper).*/
           end   /*j*/

     !.=;        @tno= '(total) number of'       /*array holds indication of TIED langs.*/
     call tell right(commas(#),    9) @tno 'languages detected in the category file'
     call tell right(commas(langs),9) '   "       "    "     "         "     "  "  language   "'
     call tell right(commas(#.0),  9) @tno 'entries (users of lanugages) detected', , 1
     term= 0
     return                                      /*don't show any more msgs──►term. [↑] */
/*──────────────────────────────────────────────────────────────────────────────────────*/
init: sep= '█';  L.=0;  #.=0;  u.=#.;  catHeap=;  term=1;  old.= /*assign some REXX vars*/
      if catFID==''  then catFID= "RC_USER.CAT"  /*Not specified?  Then use the default.*/
      if lanFID==''  then lanFID= "RC_USER.LAN"  /* "      "         "   "   "     "    */
      if outFID==''  then outFID= "RC_USER.OUT"  /* "      "         "   "   "     "    */
      call tell center('timestamp: '  date()  time("Civil"),79,'═'), 2, 1;      return
/*──────────────────────────────────────────────────────────────────────────────────────*/
out:  w= length( commas(#) );     rank= 0        /* [↓]  show by ascending rank of lang.*/
          do t=#  by -1  for #;   rank= rank + 1 /*bump rank of a programming language. */
          call tell   right('rank:'    right(commas(!tR.t), w),  20-1)      right(!.t, 7),
                      right('('commas(#.t)  left("entr"s(#.t, 'ies', "y")')', 9), 20)  @.t
          end   /*#*/                            /* [↑]   S(···)   pluralizes a word.   */
      call tell left('', 27)  "☼  end─of─list.  ☼", 1, 2;      return    /*bottom title.*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
rdr:  arg which 2;        igAst= 1               /*ARG uppers WHICH, obtain the 1st char*/
      if which=='L'  then inFID= lanFID          /*use this fileID for the  languages.  */
      if which=='C'  then inFID= catFID          /* "    "     "    "   "   categories. */
      Uyir=  'உயிர்/Uyir'              /*Unicode (in text)  name for  Uyir    */
      old.0= '╬£C++'     ;    new.0= "µC++"      /*Unicode ╬£C++  ───► ASCII─8: µC++    */
      old.1= 'UC++'      ;    new.1= "µC++"      /*old      UC++  ───► ASCII─8: µC++    */
      old.2= '╨£╨Ü-'     ;    new.2= "MK-"       /*Unicode ╨£╨Ü─  ───► ASCII-8: MK-     */
      old.3= 'D├⌐j├á'    ;    new.3= "Déjà"      /*Unicode ├⌐j├á  ───► ASCII─8: Déjà    */
      old.4= 'Cach├⌐'    ;    new.4= "Caché"     /*Unicode Cach├⌐ ───► ASCII─8: Caché   */
      old.5= '??-61/52'  ;    new.5= "MK-61/52"  /*somewhere past, a mis─translated: MK-*/
      old.6= 'F┼ìrmul├ª' ;    new.6= 'Fôrmulæ'   /*Unicode        ───► ASCII─8: Fôrmulæ */
      old.7= '╨£iniZinc' ;    new.7= 'MiniZinc'  /*Unicode        ───► ASCII─8: MiniZinc*/
      old.8=  Uyir       ;    new.8= 'Uyir'      /*Unicode        ───► ASCII─8: Uyir    */
      old.9= 'Perl 6'    ;    new.9= 'Raku'      /* (old name)    ───► (new name)       */

        do recs=0   while  lines(inFID) \== 0    /*read a file, a single line at a time.*/
        $= translate( linein(inFID), , '9'x)     /*handle any stray  TAB  ('09'x) chars.*/
        $$= space($);   if $$==''  then iterate  /*ignore all blank lines in the file(s)*/
                do v=0  while old.v \== ''       /*translate Unicode variations of langs*/
                if pos(old.v, $$) \==0  then $$= changestr(old.v, $$, new.v)
                end   /*v*/                      /* [↑]  handle different lang spellings*/
        if igAst  then do;  igAst= pos(' * ', $)==0;      if igAst  then iterate;      end
        if pos('RETRIEVED FROM', translate($$))\==0  then leave   /*pseudo End─Of─Data?.*/
        if which=='L'  then do;  if left($$, 1)\=="*"  then iterate  /*lang ¬legitimate?*/
                                 parse upper var   $$   '*'  $$  "<";    $$= space($$)
                                 if $$==''  then iterate
                                 $$= $$ 'USER'
                                 L.$$= 1
                                 langs= langs + 1     /*bump # of languages/users found.*/
                                 iterate
                            end                  /* [↓]  extract computer language name.*/
        if left($$, 1)=='*'  then $$= sep  ||  space( substr($$, 2) )
        catHeap= catHeap  $$                     /*append to the catHeap (CATegory) heap*/
        end   /*recs*/
      call  tell   right( commas(recs), 9)       'records read from file: '        inFID
      return
/*──────────────────────────────────────────────────────────────────────────────────────*/
tell:          do '0'arg(2);   call lineout outFID," "     ;   if term  then say ;     end
                               call lineout outFID,arg(1)  ;   if term  then say arg(1)
               do '0'arg(3);   call lineout outFID," "     ;   if term  then say ;     end
       return       /*show BEFORE blank lines (if any), message, show AFTER blank lines.*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
tSort: tied=;                            r= 0    /*add true rank (tR) ───► the entries. */
               do j=#  by -1  for #;     r= r+1;   tR= r;   !tR.j= r;   jp= j+1;   jm= j-1
               if tied==''  then pR= r;  tied=   /*handle when language rank is untied. */
               if #.j==#.jp | #.j==#.jm  then do;    !.j= '[tied]';     tied= !.j;     end
               if #.j==#.jp              then do;    tR= pR;            !tR.j= pR;     end
                                         else pR= r
               end   /*j*/;      return
output   when using the default inputs:
═════════════════════════timestamp:  7 Apr 2021 6:44pm═════════════════════════

    1,094 records read from file:  RC_USER.LAN
    7,641 records read from file:  RC_USER.CAT
      474 (total) number of languages detected in the category file
      835    "       "    "     "         "     "  "  language   "
    6,057 (total) number of entries (users of lanugages) detected

          rank:   1               (424 entries)  C User
          rank:   2               (309 entries)  JAVA User
          rank:   3               (302 entries)  C++ User
          rank:   4               (299 entries)  Python User
          rank:   5               (280 entries)  JavaScript User
          rank:   6               (183 entries)  PHP User
          rank:   7               (181 entries)  Perl User
          rank:   8               (158 entries)  SQL User
          rank:   9               (151 entries)  UNIX Shell User
          rank:  10               (132 entries)  C Sharp User
          rank:  11  [tied]       (130 entries)  BASIC User
          rank:  11  [tied]       (130 entries)  Pascal User
          rank:  13               (111 entries)  Haskell User
          rank:  14               (102 entries)  Ruby User
          rank:  15                (96 entries)  FORTRAN User
          rank:  16                (73 entries)  Visual Basic User
          rank:  17  [tied]        (70 entries)  Prolog User
          rank:  17  [tied]        (70 entries)  Scheme User
          rank:  19                (69 entries)  AWK User
          rank:  20                (66 entries)  LUA User
          rank:  21                (62 entries)  Common Lisp User
          rank:  22                (51 entries)  X86 Assembly User
          rank:  23  [tied]        (50 entries)  Batch File User
          rank:  23  [tied]        (50 entries)  FORTH User
          rank:  25  [tied]        (47 entries)  Assembly User
          rank:  25  [tied]        (47 entries)  MATLAB User
          rank:  27                (45 entries)  LISP User
          rank:  28  [tied]        (40 entries)  ADA User
          rank:  28  [tied]        (40 entries)  Delphi User
          rank:  28  [tied]        (40 entries)  Erlang User
          rank:  28  [tied]        (40 entries)  TCL User
          rank:  32                (39 entries)  R User
          rank:  33  [tied]        (38 entries)  COBOL User
          rank:  33  [tied]        (38 entries)  Visual Basic .NET User
          rank:  35  [tied]        (37 entries)  APL User
          rank:  35  [tied]        (37 entries)  J User
          rank:  37  [tied]        (36 entries)  Objective-C User
          rank:  37  [tied]        (36 entries)  SmallTalk User
          rank:  39                (35 entries)  Go User
          rank:  40                (34 entries)  Brainf*** User
          rank:  41  [tied]        (32 entries)  Clojure User
          rank:  41  [tied]        (32 entries)  Mathematica User
          rank:  43                (30 entries)  Raku User
          rank:  44  [tied]        (29 entries)  OCaml User
          rank:  44  [tied]        (29 entries)  REXX User
          rank:  46                (27 entries)  PostScript User
          rank:  47  [tied]        (26 entries)  Emacs Lisp User
          rank:  47  [tied]        (26 entries)  LaTeX User
          rank:  47  [tied]        (26 entries)  Sed User
          rank:  50                (25 entries)  AutoHotkey User
          rank:  51  [tied]        (24 entries)  6502 Assembly User
          rank:  51  [tied]        (24 entries)  MySQL User
          rank:  53  [tied]        (23 entries)  Racket User
          rank:  53  [tied]        (23 entries)  Scala User
          rank:  53  [tied]        (23 entries)  VBScript User
          rank:  53  [tied]        (23 entries)  XSLT User
          rank:  57                (21 entries)  8086 Assembly User
          rank:  58                (20 entries)  F Sharp User
          rank:  59  [tied]        (19 entries)  Rust User
          rank:  59  [tied]        (19 entries)  TI-83 BASIC User
          rank:  59  [tied]        (19 entries)  VBA User
          rank:  59  [tied]        (19 entries)  Z80 Assembly User
          rank:  63  [tied]        (18 entries)  Factor User
          rank:  63  [tied]        (18 entries)  Logo User
          rank:  63  [tied]        (18 entries)  Make User
          rank:  63  [tied]        (18 entries)  PowerShell User
          rank:  67  [tied]        (17 entries)  Apex User
          rank:  67  [tied]        (17 entries)  PL/I User
          rank:  67  [tied]        (17 entries)  Standard ML User
          rank:  67  [tied]        (17 entries)  Swift User
          rank:  71  [tied]        (16 entries)  D User
          rank:  71  [tied]        (16 entries)  Julia User
          rank:  71  [tied]        (16 entries)  Modula-2 User
          rank:  74  [tied]        (15 entries)  ARM Assembly User
          rank:  74  [tied]        (15 entries)  ActionScript User
          rank:  74  [tied]        (15 entries)  AppleScript User
          rank:  74  [tied]        (15 entries)  Icon User
          rank:  78  [tied]        (14 entries)  Maxima User
          rank:  78  [tied]        (14 entries)  SNOBOL4 User
          rank:  80  [tied]        (13 entries)  Befunge User
          rank:  80  [tied]        (13 entries)  CoffeeScript User
          rank:  80  [tied]        (13 entries)  Nim User
          rank:  83  [tied]        (12 entries)  80386 Assembly User
          rank:  83  [tied]        (12 entries)  Euphoria User
          rank:  83  [tied]        (12 entries)  Unicon User
          rank:  86  [tied]        (11 entries)  Eiffel User
          rank:  86  [tied]        (11 entries)  Elixir User
          rank:  86  [tied]        (11 entries)  Groovy User
          rank:  86  [tied]        (11 entries)  Octave User
          rank:  86  [tied]        (11 entries)  PARI/GP User
          rank:  91  [tied]        (10 entries)  Dc User
          rank:  91  [tied]        (10 entries)  MIPS Assembly User
          rank:  91  [tied]        (10 entries)  PL/SQL User
          rank:  91  [tied]        (10 entries)  SAS User
          rank:  91  [tied]        (10 entries)  UnixPipes User
          rank:  96  [tied]         (9 entries)  AutoIt User
          rank:  96  [tied]         (9 entries)  BBC BASIC User
          rank:  96  [tied]         (9 entries)  JCL User
          rank:  96  [tied]         (9 entries)  M4 User
          rank:  96  [tied]         (9 entries)  Oz User
          rank:  96  [tied]         (9 entries)  Processing User
          rank:  96  [tied]         (9 entries)  REBOL User
          rank:  96  [tied]         (9 entries)  TypeScript User
          rank: 104  [tied]         (8 entries)  68000 Assembly User
          rank: 104  [tied]         (8 entries)  Gnuplot User
          rank: 104  [tied]         (8 entries)  LabVIEW User
          rank: 104  [tied]         (8 entries)  POV-Ray User
          rank: 104  [tied]         (8 entries)  PicoLisp User
          rank: 109  [tied]         (7 entries)  ALGOL 68 User
          rank: 109  [tied]         (7 entries)  ASP User
          rank: 109  [tied]         (7 entries)  DCL User
          rank: 109  [tied]         (7 entries)  Liberty BASIC User
          rank: 109  [tied]         (7 entries)  MUMPS User
          rank: 109  [tied]         (7 entries)  Maple User
          rank: 109  [tied]         (7 entries)  Mercury User
          rank: 109  [tied]         (7 entries)  PDP-11 Assembly User
          rank: 109  [tied]         (7 entries)  PowerBASIC User
          rank: 109  [tied]         (7 entries)  PureBasic User
          rank: 109  [tied]         (7 entries)  Scratch User
          rank: 109  [tied]         (7 entries)  VHDL User
          rank: 121  [tied]         (6 entries)  Applesoft BASIC User
          rank: 121  [tied]         (6 entries)  Bc User
          rank: 121  [tied]         (6 entries)  ColdFusion User
          rank: 121  [tied]         (6 entries)  Commodore BASIC User
          rank: 121  [tied]         (6 entries)  Dart User
          rank: 121  [tied]         (6 entries)  HyperTalk User
          rank: 121  [tied]         (6 entries)  Io User
          rank: 121  [tied]         (6 entries)  Joy User
          rank: 121  [tied]         (6 entries)  Modula-3 User
          rank: 121  [tied]         (6 entries)  Pike User
          rank: 121  [tied]         (6 entries)  Self User
          rank: 121  [tied]         (6 entries)  Vim Script User
          rank: 133  [tied]         (5 entries)  8080 Assembly User
          rank: 133  [tied]         (5 entries)  ABAP User
          rank: 133  [tied]         (5 entries)  ALGOL 60 User
          rank: 133  [tied]         (5 entries)  CMake User
          rank: 133  [tied]         (5 entries)  Clipper User
          rank: 133  [tied]         (5 entries)  FreeBASIC User
          rank: 133  [tied]         (5 entries)  GML User
          rank: 133  [tied]         (5 entries)  Haxe User
          rank: 133  [tied]         (5 entries)  Inform 7 User
          rank: 133  [tied]         (5 entries)  Integer BASIC User
          rank: 133  [tied]         (5 entries)  K User
          rank: 133  [tied]         (5 entries)  Kotlin User
          rank: 133  [tied]         (5 entries)  NSIS User
          rank: 133  [tied]         (5 entries)  NewLISP User
          rank: 133  [tied]         (5 entries)  Q User
          rank: 133  [tied]         (5 entries)  REALbasic User
          rank: 133  [tied]         (5 entries)  TI-89 BASIC User
          rank: 133  [tied]         (5 entries)  VB6 User
          rank: 133  [tied]         (5 entries)  Verilog User
          rank: 133  [tied]         (5 entries)  XQuery User
          rank: 153  [tied]         (4 entries)  360 Assembly User
          rank: 153  [tied]         (4 entries)  BCPL User
          rank: 153  [tied]         (4 entries)  C Shell User
          rank: 153  [tied]         (4 entries)  FALSE User
          rank: 153  [tied]         (4 entries)  GAP User
          rank: 153  [tied]         (4 entries)  GolfScript User
          rank: 153  [tied]         (4 entries)  HQ9+ User
          rank: 153  [tied]         (4 entries)  Locomotive Basic User
          rank: 153  [tied]         (4 entries)  M680x0 User
          rank: 153  [tied]         (4 entries)  OoRexx User
          rank: 153  [tied]         (4 entries)  PIR User
          rank: 153  [tied]         (4 entries)  PlainTeX User
          rank: 153  [tied]         (4 entries)  PowerPC Assembly User
          rank: 153  [tied]         (4 entries)  QBASIC User
          rank: 153  [tied]         (4 entries)  Run BASIC User
          rank: 153  [tied]         (4 entries)  Scilab User
          rank: 153  [tied]         (4 entries)  TorqueScript User
          rank: 153  [tied]         (4 entries)  Vala User
          rank: 153  [tied]         (4 entries)  ZX Spectrum Basic User
          rank: 172  [tied]         (3 entries)  6800 Assembly User
          rank: 172  [tied]         (3 entries)  ALGOL User
          rank: 172  [tied]         (3 entries)  ASP.Net User
          rank: 172  [tied]         (3 entries)  Dylan User
          rank: 172  [tied]         (3 entries)  Egison User
          rank: 172  [tied]         (3 entries)  Falcon User
          rank: 172  [tied]         (3 entries)  Fantom User
          rank: 172  [tied]         (3 entries)  Free Pascal User
          rank: 172  [tied]         (3 entries)  Frink User
          rank: 172  [tied]         (3 entries)  GW-BASIC User
          rank: 172  [tied]         (3 entries)  HLA User
          rank: 172  [tied]         (3 entries)  IDL User
          rank: 172  [tied]         (3 entries)  LFE User
          rank: 172  [tied]         (3 entries)  MMIX User
          rank: 172  [tied]         (3 entries)  N/t/roff User
          rank: 172  [tied]         (3 entries)  NetRexx User
          rank: 172  [tied]         (3 entries)  Nial User
          rank: 172  [tied]         (3 entries)  Oberon-2 User
          rank: 172  [tied]         (3 entries)  Object Pascal User
          rank: 172  [tied]         (3 entries)  Occam User
          rank: 172  [tied]         (3 entries)  PL/pgSQL User
          rank: 172  [tied]         (3 entries)  Pure User
          rank: 172  [tied]         (3 entries)  RPG User
          rank: 172  [tied]         (3 entries)  SPARC Assembly User
          rank: 172  [tied]         (3 entries)  SPARK User
          rank: 172  [tied]         (3 entries)  Sather User
          rank: 172  [tied]         (3 entries)  SequenceL User
          rank: 172  [tied]         (3 entries)  Shen User
          rank: 172  [tied]         (3 entries)  Snobol User
          rank: 172  [tied]         (3 entries)  Teco User
          rank: 172  [tied]         (3 entries)  Transact-SQL User
          rank: 172  [tied]         (3 entries)  VAX Assembly User
          rank: 172  [tied]         (3 entries)  Wolfram Language User
          rank: 172  [tied]         (3 entries)  X86-64 Assembly User
          rank: 172  [tied]         (3 entries)  Xojo User
          rank: 207  [tied]         (2 entries)  Agena User
          rank: 207  [tied]         (2 entries)  Alice ML User
          rank: 207  [tied]         (2 entries)  AmigaE User
          rank: 207  [tied]         (2 entries)  AspectJ User
          rank: 207  [tied]         (2 entries)  BASIC256 User
          rank: 207  [tied]         (2 entries)  BaCon User
          rank: 207  [tied]         (2 entries)  Basic09 User
          rank: 207  [tied]         (2 entries)  Bracmat User
          rank: 207  [tied]         (2 entries)  Burlesque User
          rank: 207  [tied]         (2 entries)  C++/CLI User
          rank: 207  [tied]         (2 entries)  CHR User
          rank: 207  [tied]         (2 entries)  CLIPS User
          rank: 207  [tied]         (2 entries)  Caché ObjectScript User
          rank: 207  [tied]         (2 entries)  Casio BASIC User
          rank: 207  [tied]         (2 entries)  Chef User
          rank: 207  [tied]         (2 entries)  Coq User
          rank: 207  [tied]         (2 entries)  Crystal User
          rank: 207  [tied]         (2 entries)  DWScript User
          rank: 207  [tied]         (2 entries)  E User
          rank: 207  [tied]         (2 entries)  ELM User
          rank: 207  [tied]         (2 entries)  Elena User
          rank: 207  [tied]         (2 entries)  Fancy User
          rank: 207  [tied]         (2 entries)  Fish User
          rank: 207  [tied]         (2 entries)  Friendly interactive shell User
          rank: 207  [tied]         (2 entries)  GFA Basic User
          rank: 207  [tied]         (2 entries)  Gambas User
          rank: 207  [tied]         (2 entries)  Gema User
          rank: 207  [tied]         (2 entries)  Glee User
          rank: 207  [tied]         (2 entries)  Harbour User
          rank: 207  [tied]         (2 entries)  JavaFX Script User
          rank: 207  [tied]         (2 entries)  Jq User
          rank: 207  [tied]         (2 entries)  Limbo User
          rank: 207  [tied]         (2 entries)  LiveCode User
          rank: 207  [tied]         (2 entries)  Logtalk User
          rank: 207  [tied]         (2 entries)  Lush User
          rank: 207  [tied]         (2 entries)  MIRC Scripting Language User
          rank: 207  [tied]         (2 entries)  MK-61/52 User
          rank: 207  [tied]         (2 entries)  Metafont User
          rank: 207  [tied]         (2 entries)  Neko User
          rank: 207  [tied]         (2 entries)  NetLogo User
          rank: 207  [tied]         (2 entries)  Openscad User
          rank: 207  [tied]         (2 entries)  Pentium Assembly User
          rank: 207  [tied]         (2 entries)  Picat User
          rank: 207  [tied]         (2 entries)  Piet User
          rank: 207  [tied]         (2 entries)  Plain English User
          rank: 207  [tied]         (2 entries)  Processing Python mode User
          rank: 207  [tied]         (2 entries)  Quackery User
          rank: 207  [tied]         (2 entries)  RLaB User
          rank: 207  [tied]         (2 entries)  RPGIV User
          rank: 207  [tied]         (2 entries)  RPL User
          rank: 207  [tied]         (2 entries)  Refal User
          rank: 207  [tied]         (2 entries)  S-lang User
          rank: 207  [tied]         (2 entries)  SETL User
          rank: 207  [tied]         (2 entries)  SNUSP User
          rank: 207  [tied]         (2 entries)  SPSS User
          rank: 207  [tied]         (2 entries)  Sage User
          rank: 207  [tied]         (2 entries)  Seed7 User
          rank: 207  [tied]         (2 entries)  Simula User
          rank: 207  [tied]         (2 entries)  Stata User
          rank: 207  [tied]         (2 entries)  SystemVerilog User
          rank: 207  [tied]         (2 entries)  TXR User
          rank: 207  [tied]         (2 entries)  UserRPL User
          rank: 207  [tied]         (2 entries)  Whitespace User
          rank: 207  [tied]         (2 entries)  XBase User
          rank: 207  [tied]         (2 entries)  XUL User
          rank: 207  [tied]         (2 entries)  Yorick User
          rank: 207  [tied]         (2 entries)  Zig User
          rank: 274  [tied]         (1 entry)    .QL User
          rank: 274  [tied]         (1 entry)    4D User
          rank: 274  [tied]         (1 entry)    4DOS Batch User
          rank: 274  [tied]         (1 entry)    8051 Assembly User
          rank: 274  [tied]         (1 entry)    A+ User
          rank: 274  [tied]         (1 entry)    AARCH64 Assembly User
          rank: 274  [tied]         (1 entry)    ACL2 User
          rank: 274  [tied]         (1 entry)    AMPL User
          rank: 274  [tied]         (1 entry)    ANT User
          rank: 274  [tied]         (1 entry)    Agda User
          rank: 274  [tied]         (1 entry)    AmbientTalk User
          rank: 274  [tied]         (1 entry)    AngelScript User
          rank: 274  [tied]         (1 entry)    Application Master User
          rank: 274  [tied]         (1 entry)    Arc User
          rank: 274  [tied]         (1 entry)    Arturo User
          rank: 274  [tied]         (1 entry)    Astro User
          rank: 274  [tied]         (1 entry)    B User
          rank: 274  [tied]         (1 entry)    B4J User
          rank: 274  [tied]         (1 entry)    Beeswax User
          rank: 274  [tied]         (1 entry)    Biferno User
          rank: 274  [tied]         (1 entry)    Blast User
          rank: 274  [tied]         (1 entry)    BlitzMax User
          rank: 274  [tied]         (1 entry)    Brace User
          rank: 274  [tied]         (1 entry)    Brat User
          rank: 274  [tied]         (1 entry)    Brlcad User
          rank: 274  [tied]         (1 entry)    C0H User
          rank: 274  [tied]         (1 entry)    CB80 User
          rank: 274  [tied]         (1 entry)    COMAL User
          rank: 274  [tied]         (1 entry)    Caml User
          rank: 274  [tied]         (1 entry)    Cat User
          rank: 274  [tied]         (1 entry)    Chapel User
          rank: 274  [tied]         (1 entry)    Cilk++ User
          rank: 274  [tied]         (1 entry)    Clay User
          rank: 274  [tied]         (1 entry)    Comefrom0x10 User
          rank: 274  [tied]         (1 entry)    Curry User
          rank: 274  [tied]         (1 entry)    DIBOL-11 User
          rank: 274  [tied]         (1 entry)    DIV Games Studio User
          rank: 274  [tied]         (1 entry)    DM User
          rank: 274  [tied]         (1 entry)    DUP User
          rank: 274  [tied]         (1 entry)    Dafny User
          rank: 274  [tied]         (1 entry)    Dao User
          rank: 274  [tied]         (1 entry)    Dylan.NET User
          rank: 274  [tied]         (1 entry)    Déjà Vu User
          rank: 274  [tied]         (1 entry)    ECL User
          rank: 274  [tied]         (1 entry)    EDSAC order code User
          rank: 274  [tied]         (1 entry)    EGL User
          rank: 274  [tied]         (1 entry)    EchoLisp User
          rank: 274  [tied]         (1 entry)    Es User
          rank: 274  [tied]         (1 entry)    FBSL User
          rank: 274  [tied]         (1 entry)    FP User
          rank: 274  [tied]         (1 entry)    FUZE BASIC User
          rank: 274  [tied]         (1 entry)    Felix User
          rank: 274  [tied]         (1 entry)    Fermat User
          rank: 274  [tied]         (1 entry)    Fexl User
          rank: 274  [tied]         (1 entry)    Frege User
          rank: 274  [tied]         (1 entry)    Furor User
          rank: 274  [tied]         (1 entry)    Futhark User
          rank: 274  [tied]         (1 entry)    FutureBasic User
          rank: 274  [tied]         (1 entry)    Fôrmulæ User
          rank: 274  [tied]         (1 entry)    GLSL User
          rank: 274  [tied]         (1 entry)    GUISS User
          rank: 274  [tied]         (1 entry)    Genie User
          rank: 274  [tied]         (1 entry)    Global Script User
          rank: 274  [tied]         (1 entry)    Gosu User
          rank: 274  [tied]         (1 entry)    HPPPL User
          rank: 274  [tied]         (1 entry)    Hack User
          rank: 274  [tied]         (1 entry)    Hexiscript User
          rank: 274  [tied]         (1 entry)    HolyC User
          rank: 274  [tied]         (1 entry)    Hope User
          rank: 274  [tied]         (1 entry)    Huginn User
          rank: 274  [tied]         (1 entry)    I User
          rank: 274  [tied]         (1 entry)    Inform 6 User
          rank: 274  [tied]         (1 entry)    Informix 4GL User
          rank: 274  [tied]         (1 entry)    Ioke User
          rank: 274  [tied]         (1 entry)    JOVIAL User
          rank: 274  [tied]         (1 entry)    JoCaml User
          rank: 274  [tied]         (1 entry)    Jsish User
          rank: 274  [tied]         (1 entry)    KL1 User
          rank: 274  [tied]         (1 entry)    Kabap User
          rank: 274  [tied]         (1 entry)    Kamailio Script User
          rank: 274  [tied]         (1 entry)    KeyList Databasing User
          rank: 274  [tied]         (1 entry)    Kite User
          rank: 274  [tied]         (1 entry)    Klong User
          rank: 274  [tied]         (1 entry)    KonsolScript User
          rank: 274  [tied]         (1 entry)    L.in.oleum User
          rank: 274  [tied]         (1 entry)    LC3 Assembly User
          rank: 274  [tied]         (1 entry)    LIL User
          rank: 274  [tied]         (1 entry)    LLVM User
          rank: 274  [tied]         (1 entry)    LOLCODE User
          rank: 274  [tied]         (1 entry)    LSL User
          rank: 274  [tied]         (1 entry)    Lambda Prolog User
          rank: 274  [tied]         (1 entry)    Lang5 User
          rank: 274  [tied]         (1 entry)    Lhogho User
          rank: 274  [tied]         (1 entry)    LibreOffice Basic User
          rank: 274  [tied]         (1 entry)    Lilypond User
          rank: 274  [tied]         (1 entry)    LiveScript User
          rank: 274  [tied]         (1 entry)    Lotus 123 Macro Scripting User
          rank: 274  [tied]         (1 entry)    Lucid User
          rank: 274  [tied]         (1 entry)    M2000 Interpreter User
          rank: 274  [tied]         (1 entry)    MACRO-11 User
          rank: 274  [tied]         (1 entry)    MANOOL User
          rank: 274  [tied]         (1 entry)    MAPPER User
          rank: 274  [tied]         (1 entry)    MBS User
          rank: 274  [tied]         (1 entry)    MDL User
          rank: 274  [tied]         (1 entry)    ME10 macro User
          rank: 274  [tied]         (1 entry)    MINIL User
          rank: 274  [tied]         (1 entry)    ML User
          rank: 274  [tied]         (1 entry)    ML/I User
          rank: 274  [tied]         (1 entry)    MLite User
          rank: 274  [tied]         (1 entry)    MOO User
          rank: 274  [tied]         (1 entry)    MUF User
          rank: 274  [tied]         (1 entry)    Malbolge User
          rank: 274  [tied]         (1 entry)    Mathcad User
          rank: 274  [tied]         (1 entry)    Metapost User
          rank: 274  [tied]         (1 entry)    Microsoft Small Basic User
          rank: 274  [tied]         (1 entry)    MiniScript User
          rank: 274  [tied]         (1 entry)    MiniZinc User
          rank: 274  [tied]         (1 entry)    NASL User
          rank: 274  [tied]         (1 entry)    Nanoquery User
          rank: 274  [tied]         (1 entry)    Neat User
          rank: 274  [tied]         (1 entry)    Nemerle User
          rank: 274  [tied]         (1 entry)    Never User
          rank: 274  [tied]         (1 entry)    Niue User
          rank: 274  [tied]         (1 entry)    OOCalc User
          rank: 274  [tied]         (1 entry)    Objeck User
          rank: 274  [tied]         (1 entry)    Ol User
          rank: 274  [tied]         (1 entry)    OpenC++ User
          rank: 274  [tied]         (1 entry)    OpenEdge/Progress User
          rank: 274  [tied]         (1 entry)    Order User
          rank: 274  [tied]         (1 entry)    PHL User
          rank: 274  [tied]         (1 entry)    PL/M User
          rank: 274  [tied]         (1 entry)    PLUS User
          rank: 274  [tied]         (1 entry)    PLZ/SYS User
          rank: 274  [tied]         (1 entry)    PPL User
          rank: 274  [tied]         (1 entry)    Peloton User
          rank: 274  [tied]         (1 entry)    PeopleCode User
          rank: 274  [tied]         (1 entry)    Perl5i User
          rank: 274  [tied]         (1 entry)    Phix User
          rank: 274  [tied]         (1 entry)    Pop11 User
          rank: 274  [tied]         (1 entry)    Powerbuilder User
          rank: 274  [tied]         (1 entry)    Pure Data User
          rank: 274  [tied]         (1 entry)    Pyret User
          rank: 274  [tied]         (1 entry)    Quite BASIC User
          rank: 274  [tied]         (1 entry)    Ratfor User
          rank: 274  [tied]         (1 entry)    Reason User
          rank: 274  [tied]         (1 entry)    Relation User
          rank: 274  [tied]         (1 entry)    Retro User
          rank: 274  [tied]         (1 entry)    Risc-V User
          rank: 274  [tied]         (1 entry)    Robotic User
          rank: 274  [tied]         (1 entry)    SASL User
          rank: 274  [tied]         (1 entry)    SIMPOL User
          rank: 274  [tied]         (1 entry)    SQL PL User
          rank: 274  [tied]         (1 entry)    Salmon User
          rank: 274  [tied]         (1 entry)    SenseTalk User
          rank: 274  [tied]         (1 entry)    Set lang User
          rank: 274  [tied]         (1 entry)    Shale User
          rank: 274  [tied]         (1 entry)    Sidef User
          rank: 274  [tied]         (1 entry)    Sinclair ZX81 BASIC User
          rank: 274  [tied]         (1 entry)    SkookumScript User
          rank: 274  [tied]         (1 entry)    Slate User
          rank: 274  [tied]         (1 entry)    Smart BASIC User
          rank: 274  [tied]         (1 entry)    Sparkling User
          rank: 274  [tied]         (1 entry)    Spin User
          rank: 274  [tied]         (1 entry)    Suneido User
          rank: 274  [tied]         (1 entry)    SuperTalk User
          rank: 274  [tied]         (1 entry)    Superbase BASIC User
          rank: 274  [tied]         (1 entry)    TAL User
          rank: 274  [tied]         (1 entry)    TMG User
          rank: 274  [tied]         (1 entry)    TPP User
          rank: 274  [tied]         (1 entry)    TUSCRIPT User
          rank: 274  [tied]         (1 entry)    Tailspin User
          rank: 274  [tied]         (1 entry)    TechBASIC User
          rank: 274  [tied]         (1 entry)    Thistle User
          rank: 274  [tied]         (1 entry)    Thyrd User
          rank: 274  [tied]         (1 entry)    Tiny BASIC User
          rank: 274  [tied]         (1 entry)    Toka User
          rank: 274  [tied]         (1 entry)    Trith User
          rank: 274  [tied]         (1 entry)    True BASIC User
          rank: 274  [tied]         (1 entry)    Uniface User
          rank: 274  [tied]         (1 entry)    Unlambda User
          rank: 274  [tied]         (1 entry)    Ursa User
          rank: 274  [tied]         (1 entry)    Ursala User
          rank: 274  [tied]         (1 entry)    V User
          rank: 274  [tied]         (1 entry)    Vedit macro language User
          rank: 274  [tied]         (1 entry)    Viua VM assembly User
          rank: 274  [tied]         (1 entry)    WDTE User
          rank: 274  [tied]         (1 entry)    WML User
          rank: 274  [tied]         (1 entry)    Wart User
          rank: 274  [tied]         (1 entry)    WebAssembly User
          rank: 274  [tied]         (1 entry)    Whenever User
          rank: 274  [tied]         (1 entry)    Wisp User
          rank: 274  [tied]         (1 entry)    XLISP User
          rank: 274  [tied]         (1 entry)    XPL0 User
          rank: 274  [tied]         (1 entry)    XProc User
          rank: 274  [tied]         (1 entry)    XTalk User
          rank: 274  [tied]         (1 entry)    Yacas User
          rank: 274  [tied]         (1 entry)    ZED User
          rank: 274  [tied]         (1 entry)    ZPL User
          rank: 274  [tied]         (1 entry)    Zkl User
          rank: 274  [tied]         (1 entry)    Zoea User
          rank: 274  [tied]         (1 entry)    µC++ User

                           ☼  end─of─list.  ☼
output   when sorted (ranked) by the computer programming language:
═════════════════════════timestamp:  7 Apr 2021 6:44pm═════════════════════════

    1,094 records read from file:  RC_USER.LAN
    7,641 records read from file:  RC_USER.CAT
      474 (total) number of languages detected in the category file
      835    "       "    "     "         "     "  "  language   "
    6,057 (total) number of entries (users of lanugages) detected

          rank: 274  [tied]         (1 entry)    .QL User
          rank: 153  [tied]         (4 entries)  360 Assembly User
          rank: 274  [tied]         (1 entry)    4D User
          rank: 274  [tied]         (1 entry)    4DOS Batch User
          rank:  51  [tied]        (24 entries)  6502 Assembly User
          rank: 172  [tied]         (3 entries)  6800 Assembly User
          rank: 104  [tied]         (8 entries)  68000 Assembly User
          rank:  83  [tied]        (12 entries)  80386 Assembly User
          rank: 274  [tied]         (1 entry)    8051 Assembly User
          rank: 133  [tied]         (5 entries)  8080 Assembly User
          rank:  57                (21 entries)  8086 Assembly User
          rank: 274  [tied]         (1 entry)    A+ User
          rank: 274  [tied]         (1 entry)    AARCH64 Assembly User
          rank: 133  [tied]         (5 entries)  ABAP User
          rank: 274  [tied]         (1 entry)    ACL2 User
          rank:  74  [tied]        (15 entries)  ActionScript User
          rank:  28  [tied]        (40 entries)  ADA User
          rank: 274  [tied]         (1 entry)    Agda User
          rank: 207  [tied]         (2 entries)  Agena User
          rank: 133  [tied]         (5 entries)  ALGOL 60 User
          rank: 109  [tied]         (7 entries)  ALGOL 68 User
          rank: 172  [tied]         (3 entries)  ALGOL User
          rank: 207  [tied]         (2 entries)  Alice ML User
          rank: 274  [tied]         (1 entry)    AmbientTalk User
          rank: 207  [tied]         (2 entries)  AmigaE User
          rank: 274  [tied]         (1 entry)    AMPL User
          rank: 274  [tied]         (1 entry)    AngelScript User
          rank: 274  [tied]         (1 entry)    ANT User
          rank:  67  [tied]        (17 entries)  Apex User
          rank:  35  [tied]        (37 entries)  APL User
          rank:  74  [tied]        (15 entries)  AppleScript User
          rank: 121  [tied]         (6 entries)  Applesoft BASIC User
          rank: 274  [tied]         (1 entry)    Application Master User
          rank: 274  [tied]         (1 entry)    Arc User
          rank:  74  [tied]        (15 entries)  ARM Assembly User
          rank: 274  [tied]         (1 entry)    Arturo User
          rank: 109  [tied]         (7 entries)  ASP User
          rank: 172  [tied]         (3 entries)  ASP.Net User
          rank: 207  [tied]         (2 entries)  AspectJ User
          rank:  25  [tied]        (47 entries)  Assembly User
          rank: 274  [tied]         (1 entry)    Astro User
          rank:  50                (25 entries)  AutoHotkey User
          rank:  96  [tied]         (9 entries)  AutoIt User
          rank:  19                (69 entries)  AWK User
          rank: 274  [tied]         (1 entry)    B User
          rank: 274  [tied]         (1 entry)    B4J User
          rank: 207  [tied]         (2 entries)  BaCon User
          rank:  11  [tied]       (130 entries)  BASIC User
          rank: 207  [tied]         (2 entries)  Basic09 User
          rank: 207  [tied]         (2 entries)  BASIC256 User
          rank:  23  [tied]        (50 entries)  Batch File User
          rank:  96  [tied]         (9 entries)  BBC BASIC User
          rank: 121  [tied]         (6 entries)  Bc User
          rank: 153  [tied]         (4 entries)  BCPL User
          rank: 274  [tied]         (1 entry)    Beeswax User
          rank:  80  [tied]        (13 entries)  Befunge User
          rank: 274  [tied]         (1 entry)    Biferno User
          rank: 274  [tied]         (1 entry)    Blast User
          rank: 274  [tied]         (1 entry)    BlitzMax User
          rank: 274  [tied]         (1 entry)    Brace User
          rank: 207  [tied]         (2 entries)  Bracmat User
          rank:  40                (34 entries)  Brainf*** User
          rank: 274  [tied]         (1 entry)    Brat User
          rank: 274  [tied]         (1 entry)    Brlcad User
          rank: 207  [tied]         (2 entries)  Burlesque User
          rank:  10               (132 entries)  C Sharp User
          rank: 153  [tied]         (4 entries)  C Shell User
          rank:   1               (424 entries)  C User
          rank:   3               (302 entries)  C++ User
          rank: 207  [tied]         (2 entries)  C++/CLI User
          rank: 274  [tied]         (1 entry)    C0H User
          rank: 207  [tied]         (2 entries)  Caché ObjectScript User
          rank: 274  [tied]         (1 entry)    Caml User
          rank: 207  [tied]         (2 entries)  Casio BASIC User
          rank: 274  [tied]         (1 entry)    Cat User
          rank: 274  [tied]         (1 entry)    CB80 User
          rank: 274  [tied]         (1 entry)    Chapel User
          rank: 207  [tied]         (2 entries)  Chef User
          rank: 207  [tied]         (2 entries)  CHR User
          rank: 274  [tied]         (1 entry)    Cilk++ User
          rank: 274  [tied]         (1 entry)    Clay User
          rank: 133  [tied]         (5 entries)  Clipper User
          rank: 207  [tied]         (2 entries)  CLIPS User
          rank:  41  [tied]        (32 entries)  Clojure User
          rank: 133  [tied]         (5 entries)  CMake User
          rank:  33  [tied]        (38 entries)  COBOL User
          rank:  80  [tied]        (13 entries)  CoffeeScript User
          rank: 121  [tied]         (6 entries)  ColdFusion User
          rank: 274  [tied]         (1 entry)    COMAL User
          rank: 274  [tied]         (1 entry)    Comefrom0x10 User
          rank: 121  [tied]         (6 entries)  Commodore BASIC User
          rank:  21                (62 entries)  Common Lisp User
          rank: 207  [tied]         (2 entries)  Coq User
          rank: 207  [tied]         (2 entries)  Crystal User
          rank: 274  [tied]         (1 entry)    Curry User
          rank:  71  [tied]        (16 entries)  D User
          rank: 274  [tied]         (1 entry)    Dafny User
          rank: 274  [tied]         (1 entry)    Dao User
          rank: 121  [tied]         (6 entries)  Dart User
          rank:  91  [tied]        (10 entries)  Dc User
          rank: 109  [tied]         (7 entries)  DCL User
          rank:  28  [tied]        (40 entries)  Delphi User
          rank: 274  [tied]         (1 entry)    DIBOL-11 User
          rank: 274  [tied]         (1 entry)    DIV Games Studio User
          rank: 274  [tied]         (1 entry)    DM User
          rank: 274  [tied]         (1 entry)    DUP User
          rank: 207  [tied]         (2 entries)  DWScript User
          rank: 172  [tied]         (3 entries)  Dylan User
          rank: 274  [tied]         (1 entry)    Dylan.NET User
          rank: 274  [tied]         (1 entry)    Déjà Vu User
          rank: 207  [tied]         (2 entries)  E User
          rank: 274  [tied]         (1 entry)    EchoLisp User
          rank: 274  [tied]         (1 entry)    ECL User
          rank: 274  [tied]         (1 entry)    EDSAC order code User
          rank: 172  [tied]         (3 entries)  Egison User
          rank: 274  [tied]         (1 entry)    EGL User
          rank:  86  [tied]        (11 entries)  Eiffel User
          rank: 207  [tied]         (2 entries)  Elena User
          rank:  86  [tied]        (11 entries)  Elixir User
          rank: 207  [tied]         (2 entries)  ELM User
          rank:  47  [tied]        (26 entries)  Emacs Lisp User
          rank:  28  [tied]        (40 entries)  Erlang User
          rank: 274  [tied]         (1 entry)    Es User
          rank:  83  [tied]        (12 entries)  Euphoria User
          rank:  58                (20 entries)  F Sharp User
          rank:  63  [tied]        (18 entries)  Factor User
          rank: 172  [tied]         (3 entries)  Falcon User
          rank: 153  [tied]         (4 entries)  FALSE User
          rank: 207  [tied]         (2 entries)  Fancy User
          rank: 172  [tied]         (3 entries)  Fantom User
          rank: 274  [tied]         (1 entry)    FBSL User
          rank: 274  [tied]         (1 entry)    Felix User
          rank: 274  [tied]         (1 entry)    Fermat User
          rank: 274  [tied]         (1 entry)    Fexl User
          rank: 207  [tied]         (2 entries)  Fish User
          rank:  23  [tied]        (50 entries)  FORTH User
          rank:  15                (96 entries)  FORTRAN User
          rank: 274  [tied]         (1 entry)    FP User
          rank: 172  [tied]         (3 entries)  Free Pascal User
          rank: 133  [tied]         (5 entries)  FreeBASIC User
          rank: 274  [tied]         (1 entry)    Frege User
          rank: 207  [tied]         (2 entries)  Friendly interactive shell User
          rank: 172  [tied]         (3 entries)  Frink User
          rank: 274  [tied]         (1 entry)    Furor User
          rank: 274  [tied]         (1 entry)    Futhark User
          rank: 274  [tied]         (1 entry)    FutureBasic User
          rank: 274  [tied]         (1 entry)    FUZE BASIC User
          rank: 274  [tied]         (1 entry)    Fôrmulæ User
          rank: 207  [tied]         (2 entries)  Gambas User
          rank: 153  [tied]         (4 entries)  GAP User
          rank: 207  [tied]         (2 entries)  Gema User
          rank: 274  [tied]         (1 entry)    Genie User
          rank: 207  [tied]         (2 entries)  GFA Basic User
          rank: 207  [tied]         (2 entries)  Glee User
          rank: 274  [tied]         (1 entry)    Global Script User
          rank: 274  [tied]         (1 entry)    GLSL User
          rank: 133  [tied]         (5 entries)  GML User
          rank: 104  [tied]         (8 entries)  Gnuplot User
          rank:  39                (35 entries)  Go User
          rank: 153  [tied]         (4 entries)  GolfScript User
          rank: 274  [tied]         (1 entry)    Gosu User
          rank:  86  [tied]        (11 entries)  Groovy User
          rank: 274  [tied]         (1 entry)    GUISS User
          rank: 172  [tied]         (3 entries)  GW-BASIC User
          rank: 274  [tied]         (1 entry)    Hack User
          rank: 207  [tied]         (2 entries)  Harbour User
          rank:  13               (111 entries)  Haskell User
          rank: 133  [tied]         (5 entries)  Haxe User
          rank: 274  [tied]         (1 entry)    Hexiscript User
          rank: 172  [tied]         (3 entries)  HLA User
          rank: 274  [tied]         (1 entry)    HolyC User
          rank: 274  [tied]         (1 entry)    Hope User
          rank: 274  [tied]         (1 entry)    HPPPL User
          rank: 153  [tied]         (4 entries)  HQ9+ User
          rank: 274  [tied]         (1 entry)    Huginn User
          rank: 121  [tied]         (6 entries)  HyperTalk User
          rank: 274  [tied]         (1 entry)    I User
          rank:  74  [tied]        (15 entries)  Icon User
          rank: 172  [tied]         (3 entries)  IDL User
          rank: 274  [tied]         (1 entry)    Inform 6 User
          rank: 133  [tied]         (5 entries)  Inform 7 User
          rank: 274  [tied]         (1 entry)    Informix 4GL User
          rank: 133  [tied]         (5 entries)  Integer BASIC User
          rank: 121  [tied]         (6 entries)  Io User
          rank: 274  [tied]         (1 entry)    Ioke User
          rank:  35  [tied]        (37 entries)  J User
          rank:   2               (309 entries)  JAVA User
          rank: 207  [tied]         (2 entries)  JavaFX Script User
          rank:   5               (280 entries)  JavaScript User
          rank:  96  [tied]         (9 entries)  JCL User
          rank: 274  [tied]         (1 entry)    JoCaml User
          rank: 274  [tied]         (1 entry)    JOVIAL User
          rank: 121  [tied]         (6 entries)  Joy User
          rank: 207  [tied]         (2 entries)  Jq User
          rank: 274  [tied]         (1 entry)    Jsish User
          rank:  71  [tied]        (16 entries)  Julia User
          rank: 133  [tied]         (5 entries)  K User
          rank: 274  [tied]         (1 entry)    Kabap User
          rank: 274  [tied]         (1 entry)    Kamailio Script User
          rank: 274  [tied]         (1 entry)    KeyList Databasing User
          rank: 274  [tied]         (1 entry)    Kite User
          rank: 274  [tied]         (1 entry)    KL1 User
          rank: 274  [tied]         (1 entry)    Klong User
          rank: 274  [tied]         (1 entry)    KonsolScript User
          rank: 133  [tied]         (5 entries)  Kotlin User
          rank: 274  [tied]         (1 entry)    L.in.oleum User
          rank: 104  [tied]         (8 entries)  LabVIEW User
          rank: 274  [tied]         (1 entry)    Lambda Prolog User
          rank: 274  [tied]         (1 entry)    Lang5 User
          rank:  47  [tied]        (26 entries)  LaTeX User
          rank: 274  [tied]         (1 entry)    LC3 Assembly User
          rank: 172  [tied]         (3 entries)  LFE User
          rank: 274  [tied]         (1 entry)    Lhogho User
          rank: 109  [tied]         (7 entries)  Liberty BASIC User
          rank: 274  [tied]         (1 entry)    LibreOffice Basic User
          rank: 274  [tied]         (1 entry)    LIL User
          rank: 274  [tied]         (1 entry)    Lilypond User
          rank: 207  [tied]         (2 entries)  Limbo User
          rank:  27                (45 entries)  LISP User
          rank: 207  [tied]         (2 entries)  LiveCode User
          rank: 274  [tied]         (1 entry)    LiveScript User
          rank: 274  [tied]         (1 entry)    LLVM User
          rank: 153  [tied]         (4 entries)  Locomotive Basic User
          rank:  63  [tied]        (18 entries)  Logo User
          rank: 207  [tied]         (2 entries)  Logtalk User
          rank: 274  [tied]         (1 entry)    LOLCODE User
          rank: 274  [tied]         (1 entry)    Lotus 123 Macro Scripting User
          rank: 274  [tied]         (1 entry)    LSL User
          rank:  20                (66 entries)  LUA User
          rank: 274  [tied]         (1 entry)    Lucid User
          rank: 207  [tied]         (2 entries)  Lush User
          rank: 274  [tied]         (1 entry)    M2000 Interpreter User
          rank:  96  [tied]         (9 entries)  M4 User
          rank: 153  [tied]         (4 entries)  M680x0 User
          rank: 274  [tied]         (1 entry)    MACRO-11 User
          rank:  63  [tied]        (18 entries)  Make User
          rank: 274  [tied]         (1 entry)    Malbolge User
          rank: 274  [tied]         (1 entry)    MANOOL User
          rank: 109  [tied]         (7 entries)  Maple User
          rank: 274  [tied]         (1 entry)    MAPPER User
          rank: 274  [tied]         (1 entry)    Mathcad User
          rank:  41  [tied]        (32 entries)  Mathematica User
          rank:  25  [tied]        (47 entries)  MATLAB User
          rank:  78  [tied]        (14 entries)  Maxima User
          rank: 274  [tied]         (1 entry)    MBS User
          rank: 274  [tied]         (1 entry)    MDL User
          rank: 274  [tied]         (1 entry)    ME10 macro User
          rank: 109  [tied]         (7 entries)  Mercury User
          rank: 207  [tied]         (2 entries)  Metafont User
          rank: 274  [tied]         (1 entry)    Metapost User
          rank: 274  [tied]         (1 entry)    Microsoft Small Basic User
          rank: 274  [tied]         (1 entry)    MINIL User
          rank: 274  [tied]         (1 entry)    MiniScript User
          rank: 274  [tied]         (1 entry)    MiniZinc User
          rank:  91  [tied]        (10 entries)  MIPS Assembly User
          rank: 207  [tied]         (2 entries)  MIRC Scripting Language User
          rank: 207  [tied]         (2 entries)  MK-61/52 User
          rank: 274  [tied]         (1 entry)    ML User
          rank: 274  [tied]         (1 entry)    ML/I User
          rank: 274  [tied]         (1 entry)    MLite User
          rank: 172  [tied]         (3 entries)  MMIX User
          rank:  71  [tied]        (16 entries)  Modula-2 User
          rank: 121  [tied]         (6 entries)  Modula-3 User
          rank: 274  [tied]         (1 entry)    MOO User
          rank: 274  [tied]         (1 entry)    MUF User
          rank: 109  [tied]         (7 entries)  MUMPS User
          rank:  51  [tied]        (24 entries)  MySQL User
          rank: 172  [tied]         (3 entries)  N/t/roff User
          rank: 274  [tied]         (1 entry)    Nanoquery User
          rank: 274  [tied]         (1 entry)    NASL User
          rank: 274  [tied]         (1 entry)    Neat User
          rank: 207  [tied]         (2 entries)  Neko User
          rank: 274  [tied]         (1 entry)    Nemerle User
          rank: 207  [tied]         (2 entries)  NetLogo User
          rank: 172  [tied]         (3 entries)  NetRexx User
          rank: 274  [tied]         (1 entry)    Never User
          rank: 133  [tied]         (5 entries)  NewLISP User
          rank: 172  [tied]         (3 entries)  Nial User
          rank:  80  [tied]        (13 entries)  Nim User
          rank: 274  [tied]         (1 entry)    Niue User
          rank: 133  [tied]         (5 entries)  NSIS User
          rank: 172  [tied]         (3 entries)  Oberon-2 User
          rank: 274  [tied]         (1 entry)    Objeck User
          rank: 172  [tied]         (3 entries)  Object Pascal User
          rank:  37  [tied]        (36 entries)  Objective-C User
          rank:  44  [tied]        (29 entries)  OCaml User
          rank: 172  [tied]         (3 entries)  Occam User
          rank:  86  [tied]        (11 entries)  Octave User
          rank: 274  [tied]         (1 entry)    Ol User
          rank: 274  [tied]         (1 entry)    OOCalc User
          rank: 153  [tied]         (4 entries)  OoRexx User
          rank: 274  [tied]         (1 entry)    OpenC++ User
          rank: 274  [tied]         (1 entry)    OpenEdge/Progress User
          rank: 207  [tied]         (2 entries)  Openscad User
          rank: 274  [tied]         (1 entry)    Order User
          rank:  96  [tied]         (9 entries)  Oz User
          rank:  86  [tied]        (11 entries)  PARI/GP User
          rank:  11  [tied]       (130 entries)  Pascal User
          rank: 109  [tied]         (7 entries)  PDP-11 Assembly User
          rank: 274  [tied]         (1 entry)    Peloton User
          rank: 207  [tied]         (2 entries)  Pentium Assembly User
          rank: 274  [tied]         (1 entry)    PeopleCode User
          rank:   7               (181 entries)  Perl User
          rank: 274  [tied]         (1 entry)    Perl5i User
          rank: 274  [tied]         (1 entry)    Phix User
          rank: 274  [tied]         (1 entry)    PHL User
          rank:   6               (183 entries)  PHP User
          rank: 207  [tied]         (2 entries)  Picat User
          rank: 104  [tied]         (8 entries)  PicoLisp User
          rank: 207  [tied]         (2 entries)  Piet User
          rank: 121  [tied]         (6 entries)  Pike User
          rank: 153  [tied]         (4 entries)  PIR User
          rank:  67  [tied]        (17 entries)  PL/I User
          rank: 274  [tied]         (1 entry)    PL/M User
          rank: 172  [tied]         (3 entries)  PL/pgSQL User
          rank:  91  [tied]        (10 entries)  PL/SQL User
          rank: 207  [tied]         (2 entries)  Plain English User
          rank: 153  [tied]         (4 entries)  PlainTeX User
          rank: 274  [tied]         (1 entry)    PLUS User
          rank: 274  [tied]         (1 entry)    PLZ/SYS User
          rank: 274  [tied]         (1 entry)    Pop11 User
          rank:  46                (27 entries)  PostScript User
          rank: 104  [tied]         (8 entries)  POV-Ray User
          rank: 109  [tied]         (7 entries)  PowerBASIC User
          rank: 274  [tied]         (1 entry)    Powerbuilder User
          rank: 153  [tied]         (4 entries)  PowerPC Assembly User
          rank:  63  [tied]        (18 entries)  PowerShell User
          rank: 274  [tied]         (1 entry)    PPL User
          rank: 207  [tied]         (2 entries)  Processing Python mode User
          rank:  96  [tied]         (9 entries)  Processing User
          rank:  17  [tied]        (70 entries)  Prolog User
          rank: 274  [tied]         (1 entry)    Pure Data User
          rank: 172  [tied]         (3 entries)  Pure User
          rank: 109  [tied]         (7 entries)  PureBasic User
          rank: 274  [tied]         (1 entry)    Pyret User
          rank:   4               (299 entries)  Python User
          rank: 133  [tied]         (5 entries)  Q User
          rank: 153  [tied]         (4 entries)  QBASIC User
          rank: 207  [tied]         (2 entries)  Quackery User
          rank: 274  [tied]         (1 entry)    Quite BASIC User
          rank:  32                (39 entries)  R User
          rank:  53  [tied]        (23 entries)  Racket User
          rank:  43                (30 entries)  Raku User
          rank: 274  [tied]         (1 entry)    Ratfor User
          rank: 133  [tied]         (5 entries)  REALbasic User
          rank: 274  [tied]         (1 entry)    Reason User
          rank:  96  [tied]         (9 entries)  REBOL User
          rank: 207  [tied]         (2 entries)  Refal User
          rank: 274  [tied]         (1 entry)    Relation User
          rank: 274  [tied]         (1 entry)    Retro User
          rank:  44  [tied]        (29 entries)  REXX User
          rank: 274  [tied]         (1 entry)    Risc-V User
          rank: 207  [tied]         (2 entries)  RLaB User
          rank: 274  [tied]         (1 entry)    Robotic User
          rank: 172  [tied]         (3 entries)  RPG User
          rank: 207  [tied]         (2 entries)  RPGIV User
          rank: 207  [tied]         (2 entries)  RPL User
          rank:  14               (102 entries)  Ruby User
          rank: 153  [tied]         (4 entries)  Run BASIC User
          rank:  59  [tied]        (19 entries)  Rust User
          rank: 207  [tied]         (2 entries)  S-lang User
          rank: 207  [tied]         (2 entries)  Sage User
          rank: 274  [tied]         (1 entry)    Salmon User
          rank:  91  [tied]        (10 entries)  SAS User
          rank: 274  [tied]         (1 entry)    SASL User
          rank: 172  [tied]         (3 entries)  Sather User
          rank:  53  [tied]        (23 entries)  Scala User
          rank:  17  [tied]        (70 entries)  Scheme User
          rank: 153  [tied]         (4 entries)  Scilab User
          rank: 109  [tied]         (7 entries)  Scratch User
          rank:  47  [tied]        (26 entries)  Sed User
          rank: 207  [tied]         (2 entries)  Seed7 User
          rank: 121  [tied]         (6 entries)  Self User
          rank: 274  [tied]         (1 entry)    SenseTalk User
          rank: 172  [tied]         (3 entries)  SequenceL User
          rank: 274  [tied]         (1 entry)    Set lang User
          rank: 207  [tied]         (2 entries)  SETL User
          rank: 274  [tied]         (1 entry)    Shale User
          rank: 172  [tied]         (3 entries)  Shen User
          rank: 274  [tied]         (1 entry)    Sidef User
          rank: 274  [tied]         (1 entry)    SIMPOL User
          rank: 207  [tied]         (2 entries)  Simula User
          rank: 274  [tied]         (1 entry)    Sinclair ZX81 BASIC User
          rank: 274  [tied]         (1 entry)    SkookumScript User
          rank: 274  [tied]         (1 entry)    Slate User
          rank:  37  [tied]        (36 entries)  SmallTalk User
          rank: 274  [tied]         (1 entry)    Smart BASIC User
          rank: 172  [tied]         (3 entries)  Snobol User
          rank:  78  [tied]        (14 entries)  SNOBOL4 User
          rank: 207  [tied]         (2 entries)  SNUSP User
          rank: 172  [tied]         (3 entries)  SPARC Assembly User
          rank: 172  [tied]         (3 entries)  SPARK User
          rank: 274  [tied]         (1 entry)    Sparkling User
          rank: 274  [tied]         (1 entry)    Spin User
          rank: 207  [tied]         (2 entries)  SPSS User
          rank: 274  [tied]         (1 entry)    SQL PL User
          rank:   8               (158 entries)  SQL User
          rank:  67  [tied]        (17 entries)  Standard ML User
          rank: 207  [tied]         (2 entries)  Stata User
          rank: 274  [tied]         (1 entry)    Suneido User
          rank: 274  [tied]         (1 entry)    Superbase BASIC User
          rank: 274  [tied]         (1 entry)    SuperTalk User
          rank:  67  [tied]        (17 entries)  Swift User
          rank: 207  [tied]         (2 entries)  SystemVerilog User
          rank: 274  [tied]         (1 entry)    Tailspin User
          rank: 274  [tied]         (1 entry)    TAL User
          rank:  28  [tied]        (40 entries)  TCL User
          rank: 274  [tied]         (1 entry)    TechBASIC User
          rank: 172  [tied]         (3 entries)  Teco User
          rank: 274  [tied]         (1 entry)    Thistle User
          rank: 274  [tied]         (1 entry)    Thyrd User
          rank:  59  [tied]        (19 entries)  TI-83 BASIC User
          rank: 133  [tied]         (5 entries)  TI-89 BASIC User
          rank: 274  [tied]         (1 entry)    Tiny BASIC User
          rank: 274  [tied]         (1 entry)    TMG User
          rank: 274  [tied]         (1 entry)    Toka User
          rank: 153  [tied]         (4 entries)  TorqueScript User
          rank: 274  [tied]         (1 entry)    TPP User
          rank: 172  [tied]         (3 entries)  Transact-SQL User
          rank: 274  [tied]         (1 entry)    Trith User
          rank: 274  [tied]         (1 entry)    True BASIC User
          rank: 274  [tied]         (1 entry)    TUSCRIPT User
          rank: 207  [tied]         (2 entries)  TXR User
          rank:  96  [tied]         (9 entries)  TypeScript User
          rank:  83  [tied]        (12 entries)  Unicon User
          rank: 274  [tied]         (1 entry)    Uniface User
          rank:   9               (151 entries)  UNIX Shell User
          rank:  91  [tied]        (10 entries)  UnixPipes User
          rank: 274  [tied]         (1 entry)    Unlambda User
          rank: 274  [tied]         (1 entry)    Ursa User
          rank: 274  [tied]         (1 entry)    Ursala User
          rank: 207  [tied]         (2 entries)  UserRPL User
          rank: 274  [tied]         (1 entry)    V User
          rank: 153  [tied]         (4 entries)  Vala User
          rank: 172  [tied]         (3 entries)  VAX Assembly User
          rank: 133  [tied]         (5 entries)  VB6 User
          rank:  59  [tied]        (19 entries)  VBA User
          rank:  53  [tied]        (23 entries)  VBScript User
          rank: 274  [tied]         (1 entry)    Vedit macro language User
          rank: 133  [tied]         (5 entries)  Verilog User
          rank: 109  [tied]         (7 entries)  VHDL User
          rank: 121  [tied]         (6 entries)  Vim Script User
          rank:  33  [tied]        (38 entries)  Visual Basic .NET User
          rank:  16                (73 entries)  Visual Basic User
          rank: 274  [tied]         (1 entry)    Viua VM assembly User
          rank: 274  [tied]         (1 entry)    Wart User
          rank: 274  [tied]         (1 entry)    WDTE User
          rank: 274  [tied]         (1 entry)    WebAssembly User
          rank: 274  [tied]         (1 entry)    Whenever User
          rank: 207  [tied]         (2 entries)  Whitespace User
          rank: 274  [tied]         (1 entry)    Wisp User
          rank: 274  [tied]         (1 entry)    WML User
          rank: 172  [tied]         (3 entries)  Wolfram Language User
          rank:  22                (51 entries)  X86 Assembly User
          rank: 172  [tied]         (3 entries)  X86-64 Assembly User
          rank: 207  [tied]         (2 entries)  XBase User
          rank: 274  [tied]         (1 entry)    XLISP User
          rank: 172  [tied]         (3 entries)  Xojo User
          rank: 274  [tied]         (1 entry)    XPL0 User
          rank: 274  [tied]         (1 entry)    XProc User
          rank: 133  [tied]         (5 entries)  XQuery User
          rank:  53  [tied]        (23 entries)  XSLT User
          rank: 274  [tied]         (1 entry)    XTalk User
          rank: 207  [tied]         (2 entries)  XUL User
          rank: 274  [tied]         (1 entry)    Yacas User
          rank: 207  [tied]         (2 entries)  Yorick User
          rank:  59  [tied]        (19 entries)  Z80 Assembly User
          rank: 274  [tied]         (1 entry)    ZED User
          rank: 207  [tied]         (2 entries)  Zig User
          rank: 274  [tied]         (1 entry)    Zkl User
          rank: 274  [tied]         (1 entry)    Zoea User
          rank: 274  [tied]         (1 entry)    ZPL User
          rank: 153  [tied]         (4 entries)  ZX Spectrum Basic User
          rank: 274  [tied]         (1 entry)    µC++ User

                            ☼  end─of─list.  ☼

Stata

copy "http://rosettacode.org/mw/index.php?title=Special:Categories&limit=5000" categ.html, replace
import delimited categ.html, delim("@") enc("utf-8") clear
keep if ustrpos(v1,"/wiki/Category:") & ustrpos(v1,"_User")
gen i = ustrpos(v1,"href=")
gen j = ustrpos(v1,char(34),i+1)
gen k = ustrpos(v1,char(34),j+1)
gen s = usubstr(v1,j+7,k-j-7)
replace i = ustrpos(v1,"title=")
replace j = ustrpos(v1,">",i+1)
replace k = ustrpos(v1," User",j+1)
gen lang = usubstr(v1,j+1,k-j)
keep s lang
gen users=.

forval i=1/`c(N)' {
	local s 
	preserve
	copy `"https://rosettacode.org/mw/index.php?title=`=s[`i']'&redirect=no"' `i'.html, replace
	import delimited `i'.html, delim("@") enc("utf-8") clear
	count if ustrpos(v1,"/wiki/User")
	local m `r(N)'
	restore
	replace users=`m' in `i'
	erase `i'.html
}

drop s
gsort -users lang
compress
leftalign
list in f/50
save rc_users, replace

Output (2019-02-18)

     +----------------------------+
     | lang                 users |
     |----------------------------|
  1. | C                      391 |
  2. | Java                   276 |
  3. | C++                    275 |
  4. | Python                 262 |
  5. | JavaScript             238 |
     |----------------------------|
  6. | Perl                   171 |
  7. | PHP                    167 |
  8. | SQL                    138 |
  9. | UNIX Shell             131 |
 10. | BASIC                  120 |
     |----------------------------|
 11. | C sharp                118 |
 12. | Pascal                 116 |
 13. | Haskell                102 |
 14. | Ruby                    93 |
 15. | Fortran                 79 |
     |----------------------------|
 16. | Visual Basic            68 |
 17. | Prolog                  65 |
 18. | Scheme                  61 |
 19. | Common Lisp             58 |
 20. | AWK                     57 |
     |----------------------------|
 21. | Lua                     57 |
 22. | HTML                    52 |
 23. | Assembly                45 |
 24. | Batch File              44 |
 25. | X86 Assembly            44 |
     |----------------------------|
 26. | Bash                    43 |
 27. | Erlang                  40 |
 28. | Lisp                    39 |
 29. | MATLAB                  39 |
 30. | Forth                   38 |
     |----------------------------|
 31. | Ada                     36 |
 32. | Visual Basic .NET       36 |
 33. | Delphi                  35 |
 34. | J                       35 |
 35. | APL                     34 |
     |----------------------------|
 36. | Brainf***               34 |
 37. | Tcl                     34 |
 38. | Objective-C             33 |
 39. | Smalltalk               33 |
 40. | COBOL                   32 |
     |----------------------------|
 41. | R                       32 |
 42. | Go                      30 |
 43. | Mathematica             30 |
 44. | Perl 6                  29 |
 45. | Clojure                 27 |
     |----------------------------|
 46. | AutoHotkey              25 |
 47. | REXX                    25 |
 48. | LaTeX                   23 |
 49. | OCaml                   23 |
 50. | Sed                     23 |
     +----------------------------+

Wren

Library: libcurl
Library: Wren-pattern
Library: Wren-fmt

An embedded program so we can use the libcurl library.

We can in fact get all the information needed for this task just by parsing the 'Special:Categories' page. Note however that the HTML for this page contains some invisible Unicode right-to-left and left-to-right characters - a well known security risk but apparently harmless here - which need to be allowed for when extracting the number of users.

/* Rosetta_Code_Rank_languages_by_number_of_users.wren */

import "./pattern" for Pattern
import "./fmt" for Fmt

var CURLOPT_URL = 10002
var CURLOPT_FOLLOWLOCATION = 52
var CURLOPT_WRITEFUNCTION = 20011
var CURLOPT_WRITEDATA = 10001

foreign class Buffer {
    construct new() {}  // C will allocate buffer of a suitable size

    foreign value       // returns buffer contents as a string
}

foreign class Curl {
    construct easyInit() {}

    foreign easySetOpt(opt, param)

    foreign easyPerform()

    foreign easyCleanup()
}

var curl = Curl.easyInit()

var getContent = Fn.new { |url|
    var buffer = Buffer.new()
    curl.easySetOpt(CURLOPT_URL, url)
    curl.easySetOpt(CURLOPT_FOLLOWLOCATION, 1)
    curl.easySetOpt(CURLOPT_WRITEFUNCTION, 0)  // write function to be supplied by C
    curl.easySetOpt(CURLOPT_WRITEDATA, buffer)
    curl.easyPerform()
    return buffer.value
}

var p = Pattern.new(" User\">[+1^<]<//a>\u200f\u200e ([#13/d] member~s)")
var url = "https://rosettacode.org/w/index.php?title=Special:Categories&limit=5000"
var content = getContent.call(url)
var matches = p.findAll(content)
var over100s = []
for (m in matches) {
    var numUsers = Num.fromString(m.capsText[1])
    if (numUsers >= 100) {
       var language = m.capsText[0][0..-6]
       over100s.add([language, numUsers])
    }
}
over100s.sort { |a, b| a[1] > b[1] }
System.print("Languages with at least 100 users as at 3 February, 2024:")
var rank = 0
var lastScore = 0
var lastRank = 0
for (i in 0...over100s.count) {
    var pair = over100s[i]
    var eq = " "
    rank = i + 1
    if (lastScore == pair[1]) {
        eq = "="
        rank = lastRank
    } else {
        lastScore = pair[1]
        lastRank = rank
    }
    Fmt.print("$-2d$s  $-11s  $d", rank, eq, pair[0], pair[1])
}


We now embed this script in the following C program, build and run.

/* gcc Rosetta_Code_Rank_languages_by_number_of_users.c -o Rosetta_Code_Rank_languages_by_number_of_users -lcurl -lwren -lm  */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include "wren.h"

struct MemoryStruct {
    char *memory;
    size_t size;
};

/* C <=> Wren interface functions */

static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) {
    size_t realsize = size * nmemb;
    struct MemoryStruct *mem = (struct MemoryStruct *)userp;
 
    char *ptr = realloc(mem->memory, mem->size + realsize + 1);
    if(!ptr) {
        /* out of memory! */
        printf("not enough memory (realloc returned NULL)\n");
        return 0;
    }

    mem->memory = ptr;
    memcpy(&(mem->memory[mem->size]), contents, realsize);
    mem->size += realsize;
    mem->memory[mem->size] = 0;
    return realsize;
}

void C_bufferAllocate(WrenVM* vm) {
    struct MemoryStruct *ms = (struct MemoryStruct *)wrenSetSlotNewForeign(vm, 0, 0, sizeof(struct MemoryStruct));
    ms->memory = malloc(1);
    ms->size = 0;
}

void C_bufferFinalize(void* data) {
    struct MemoryStruct *ms = (struct MemoryStruct *)data;
    free(ms->memory);
}

void C_curlAllocate(WrenVM* vm) {
    CURL** pcurl = (CURL**)wrenSetSlotNewForeign(vm, 0, 0, sizeof(CURL*));
    *pcurl = curl_easy_init();
}

void C_value(WrenVM* vm) {
    struct MemoryStruct *ms = (struct MemoryStruct *)wrenGetSlotForeign(vm, 0);
    wrenSetSlotString(vm, 0, ms->memory);
}

void C_easyPerform(WrenVM* vm) {
    CURL* curl = *(CURL**)wrenGetSlotForeign(vm, 0);
    curl_easy_perform(curl);
}

void C_easyCleanup(WrenVM* vm) {
    CURL* curl = *(CURL**)wrenGetSlotForeign(vm, 0);
    curl_easy_cleanup(curl);
}

void C_easySetOpt(WrenVM* vm) {
    CURL* curl = *(CURL**)wrenGetSlotForeign(vm, 0);
    CURLoption opt = (CURLoption)wrenGetSlotDouble(vm, 1);
    if (opt < 10000) {
        long lparam = (long)wrenGetSlotDouble(vm, 2);
        curl_easy_setopt(curl, opt, lparam);
    } else if (opt < 20000) {
        if (opt == CURLOPT_WRITEDATA) {
            struct MemoryStruct *ms = (struct MemoryStruct *)wrenGetSlotForeign(vm, 2);
            curl_easy_setopt(curl, opt, (void *)ms);
        } else if (opt == CURLOPT_URL) {
            const char *url = wrenGetSlotString(vm, 2);
            curl_easy_setopt(curl, opt, url);
        }
    } else if (opt < 30000) {
        if (opt == CURLOPT_WRITEFUNCTION) {
            curl_easy_setopt(curl, opt, &WriteMemoryCallback);
        }
    }
}

WrenForeignClassMethods bindForeignClass(WrenVM* vm, const char* module, const char* className) {
    WrenForeignClassMethods methods;
    methods.allocate = NULL;
    methods.finalize = NULL;
    if (strcmp(module, "main") == 0) {
        if (strcmp(className, "Buffer") == 0) {
            methods.allocate = C_bufferAllocate;
            methods.finalize = C_bufferFinalize;
        } else if (strcmp(className, "Curl") == 0) {
            methods.allocate = C_curlAllocate;
        }
    }
    return methods;
}

WrenForeignMethodFn bindForeignMethod(
    WrenVM* vm,
    const char* module,
    const char* className,
    bool isStatic,
    const char* signature) {
    if (strcmp(module, "main") == 0) {
        if (strcmp(className, "Buffer") == 0) {
            if (!isStatic && strcmp(signature, "value") == 0)           return C_value;
        } else if (strcmp(className, "Curl") == 0) {
            if (!isStatic && strcmp(signature, "easySetOpt(_,_)") == 0) return C_easySetOpt;
            if (!isStatic && strcmp(signature, "easyPerform()") == 0)   return C_easyPerform;
            if (!isStatic && strcmp(signature, "easyCleanup()") == 0)   return C_easyCleanup;
        }
    }
    return NULL;
}

static void writeFn(WrenVM* vm, const char* text) {
    printf("%s", text);
}

void errorFn(WrenVM* vm, WrenErrorType errorType, const char* module, const int line, const char* msg) {
    switch (errorType) {
        case WREN_ERROR_COMPILE:
            printf("[%s line %d] [Error] %s\n", module, line, msg);
            break;
        case WREN_ERROR_STACK_TRACE:
            printf("[%s line %d] in %s\n", module, line, msg);
            break;
        case WREN_ERROR_RUNTIME:
            printf("[Runtime Error] %s\n", msg);
            break;
    }
}

char *readFile(const char *fileName) {
    FILE *f = fopen(fileName, "r");
    fseek(f, 0, SEEK_END);
    long fsize = ftell(f);
    rewind(f);
    char *script = malloc(fsize + 1);
    fread(script, 1, fsize, f);
    fclose(f);
    script[fsize] = 0;
    return script;
}

static void loadModuleComplete(WrenVM* vm, const char* module, WrenLoadModuleResult result) {
    if( result.source) free((void*)result.source);
}

WrenLoadModuleResult loadModule(WrenVM* vm, const char* name) {
    WrenLoadModuleResult result = {0};
    if (strcmp(name, "random") != 0 && strcmp(name, "meta") != 0) {
        result.onComplete = loadModuleComplete;
        char fullName[strlen(name) + 6];
        strcpy(fullName, name);
        strcat(fullName, ".wren");
        result.source = readFile(fullName);
    }
    return result;
}

int main(int argc, char **argv) {
    WrenConfiguration config;
    wrenInitConfiguration(&config);
    config.writeFn = &writeFn;
    config.errorFn = &errorFn;
    config.bindForeignClassFn = &bindForeignClass;
    config.bindForeignMethodFn = &bindForeignMethod;
    config.loadModuleFn = &loadModule;
    WrenVM* vm = wrenNewVM(&config);
    const char* module = "main";
    const char* fileName = "Rosetta_Code_Rank_languages_by_number_of_users.wren";
    char *script = readFile(fileName);
    WrenInterpretResult result = wrenInterpret(vm, module, script);
    switch (result) {
        case WREN_RESULT_COMPILE_ERROR:
            printf("Compile Error!\n");
            break;
        case WREN_RESULT_RUNTIME_ERROR:
            printf("Runtime Error!\n");
            break;
        case WREN_RESULT_SUCCESS:
            break;
    }
    wrenFreeVM(vm);
    free(script);
    return 0;
}
Output:
Languages with at least 100 users as at 3 February, 2024:
1    C            434
2    Java         326
3    Python       323
4    C++          306
5    JavaScript   287
6    PHP          188
7    Perl         181
8    SQL          166
9    UNIX Shell   146
10   Pascal       128
10=  BASIC        128
12   C sharp      124
13   Haskell      107
14   Ruby         101

zkl

Uses libraries cURL and YAJL (yet another json library)

const MIN_USERS=60;
var [const] CURL=Import("zklCurl"), YAJL=Import("zklYAJL")[0];

fcn rsGet{
   continueValue,r,curl := "",List, CURL();
   do{	// eg 5 times
      page:=("http://rosettacode.org/mw/api.php?action=query"
        "&generator=categorymembers&prop=categoryinfo"
	"&gcmtitle=Category%%3ALanguage%%20users"
	"&rawcontinue=&format=json&gcmlimit=350"
	"%s").fmt(continueValue);
      page=curl.get(page);
      page=page[0].del(0,page[1]);  // get rid of HTML header
      json:=YAJL().write(page).close();
      json["query"]["pages"].pump(r.append,'wrap(x){ x=x[1];
         //("2708",Dictionary(title:Category:C User,...,categoryinfo:D(pages:373,size:373,...)))
	 // or title:SmartBASIC
	 if((pgs:=x.find("categoryinfo")) and (pgs=pgs.find("pages")) and
	    pgs>=MIN_USERS) 
	   return(pgs,x["title"].replace("Category:","").replace(" User",""));
	   return(Void.Skip);
      });
      if(continueValue=json.find("query-continue",""))
        continueValue=String("&gcmcontinue=",
	   continueValue["categorymembers"]["gcmcontinue"]);
   }while(continueValue);
   r
}

allLangs:=rsGet();
allLangs=allLangs.sort(fcn(a,b){ a[0]>b[0] });
println("========== ",Time.Date.prettyDay()," ==========");
foreach n,pgnm in ([1..].zip(allLangs))
   { println("#%3d with %4s users: %s".fmt(n,pgnm.xplode())) }
Output:
========== Wednesday, the 20th of December 2017 ==========
#  1 with  373 users: C
#  2 with  261 users: C++
#  3 with  257 users: Java
#  4 with  243 users: Python
#  5 with  228 users: JavaScript
#  6 with  163 users: PHP
#  7 with  162 users: Perl
#  8 with  131 users: SQL
#  9 with  120 users: UNIX Shell
# 10 with  118 users: BASIC
# 11 with  113 users: C sharp
# 12 with  109 users: Pascal
# 13 with   98 users: Haskell
# 14 with   91 users: Ruby
# 15 with   71 users: Fortran
# 16 with   65 users: Visual Basic
# 17 with   60 users: Scheme