Rosetta Code/Rank languages by number of users: Difference between revisions
Thundergnat (talk | contribs) (→{{header|Perl 6}}: Add a Perl 6 example) |
m (→{{header|Wren}}: Minor tidy) |
||
(42 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. Then download and parse each language users category to count the users. |
|||
;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. |
|||
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: |
|||
<pre>Language Users |
|||
-------------------------- |
-------------------------- |
||
C |
C 391 |
||
Java 276 |
|||
C++ 275 |
|||
Python |
Python 262 |
||
JavaScript |
JavaScript 238 |
||
Perl 171 |
|||
PHP 167 |
|||
SQL |
SQL 138 |
||
UNIX Shell |
UNIX Shell 131 |
||
BASIC |
BASIC 120 |
||
C sharp |
C sharp 118 |
||
Pascal |
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| |
=={{header|Raku}}== |
||
(formerly Perl 6) |
|||
{{works with|Rakudo|2017.11}} |
{{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. |
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. |
||
Line 32: | Line 657: | ||
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'''. |
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'''. |
||
<lang |
<syntaxhighlight lang="raku" line>use HTTP::UserAgent; |
||
use URI::Escape; |
|||
use JSON::Fast; |
use JSON::Fast; |
||
my $client = HTTP::UserAgent.new; |
|||
my $url = 'https://rosettacode.org/w'; |
|||
my $start-time = now; |
|||
say "========= Generated: { DateTime.new(time) } ========="; |
say "========= Generated: { DateTime.new(time) } ========="; |
||
Line 44: | Line 676: | ||
.say for |
.say for |
||
mediawiki-query( |
mediawiki-query( |
||
$url, 'pages', |
|||
:generator<categorymembers>, |
|||
gcmtitle => "Category:Language users", |
|||
:gcmtitle<Category:Language users>, |
|||
prop => 'categoryinfo')\ |
|||
:gcmlimit<350>, |
|||
:rawcontinue(), |
|||
:prop<categoryinfo> |
|||
) |
|||
.map({ .<categoryinfo><pages> || 0, |
.map({ %( count => .<categoryinfo><pages> || 0, |
||
.<title>.subst(/^'Category:' (.+) ' User'/, ->$/ {$0}) }) |
lang => .<title>.subst(/^'Category:' (.+) ' User'/, ->$/ {$0}) ) }) |
||
.sort( { - |
.sort( { -.<count>, .<syntaxhighlight lang="text"> } ) |
||
.map( { last if |
.map( { last if .<count> < $minimum; display(.<count>, .<syntaxhighlight lang="text">) } ); |
||
say "========= elapsed: {(now - $start-time).round(.01)} seconds ========="; |
|||
sub display ($count, $which) { |
sub display ($count, $which) { |
||
if $last != |
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; |
sprintf "#%3d Rank: %2d %s with %-4s users: %s", $lang++, $rank, $tie, $count, $which; |
||
} |
} |
||
Line 63: | Line 701: | ||
sub mediawiki-query ($site, $type, *%query) { |
sub mediawiki-query ($site, $type, *%query) { |
||
my $url = "$site/api.php?" ~ uri-query-string( |
my $url = "$site/api.php?" ~ uri-query-string( |
||
:action<query>, :format<json>, : |
:action<query>, :format<json>, :formatversion<2>, |%query); |
||
my $continue = ''; |
my $continue = ''; |
||
my $client = HTTP::UserAgent.new; |
|||
gather loop { |
gather loop { |
||
my $response = $client.get("$url&$continue"); |
my $response = $client.get("$url&$continue"); |
||
my $data = from-json($response.content); |
my $data = from-json($response.content); |
||
take $_ for $data.<query>.{$type}.values; |
take $_ for $data.<query>.{$type}.values; |
||
$continue = uri-query-string |($data.<query-continue>{*}».hash.hash or last); |
$continue = uri-query-string |($data.<query-continue>{*}».hash.hash or last); |
||
} |
} |
||
Line 78: | Line 713: | ||
sub uri-query-string (*%fields) { |
sub uri-query-string (*%fields) { |
||
%fields.map |
join '&', %fields.map: { "{.key}={uri-escape .value}" } |
||
}</syntaxhighlight> |
|||
} |
|||
sub uri-encode ($str) { |
|||
$str.subst(/<[\x00..\xff]-[a..zA..Z0..9_.~-]>/, *.ord.fmt('%%%02X'), :g) |
|||
}</lang> |
|||
{{out}} |
{{out}} |
||
<pre>========= Generated: |
<pre>========= Generated: 2022-09-02T20:59:20Z ========= |
||
# 1 Rank: 1 with |
# 1 Rank: 1 with 441 users: C |
||
# 2 Rank: 2 with |
# 2 Rank: 2 with 321 users: Java |
||
# 3 Rank: 3 with |
# 3 Rank: 3 with 319 users: Python |
||
# 4 Rank: 4 with |
# 4 Rank: 4 with 314 users: C++ |
||
# 5 Rank: 5 with |
# 5 Rank: 5 with 291 users: JavaScript |
||
# 6 Rank: 6 with |
# 6 Rank: 6 with 190 users: PHP |
||
# 7 Rank: 7 with |
# 7 Rank: 7 with 186 users: Perl |
||
# 8 Rank: 8 with |
# 8 Rank: 8 with 167 users: SQL |
||
# 9 Rank: 9 with |
# 9 Rank: 9 with 151 users: UNIX Shell |
||
# 10 Rank: 10 with |
# 10 Rank: 10 with 133 users: Pascal |
||
# 11 Rank: 11 with |
# 11 Rank: 11 with 132 users: BASIC |
||
# 12 Rank: |
# 12 Rank: 11 T with 132 users: C sharp |
||
# 13 Rank: 13 with |
# 13 Rank: 13 with 115 users: Haskell |
||
# 14 Rank: 14 with |
# 14 Rank: 14 with 107 users: Ruby |
||
# 15 Rank: 15 with |
# 15 Rank: 15 with 94 users: Fortran |
||
# 16 Rank: 16 with |
# 16 Rank: 16 with 75 users: Visual Basic |
||
# 17 Rank: 17 with |
# 17 Rank: 17 with 72 users: Scheme |
||
# 18 Rank: 18 with |
# 18 Rank: 18 with 70 users: Prolog |
||
# 19 Rank: 19 with |
# 19 Rank: 19 with 68 users: AWK |
||
# 20 Rank: |
# 20 Rank: 19 T with 68 users: Lua |
||
# 21 Rank: 21 with |
# 21 Rank: 21 with 66 users: Common Lisp |
||
# 22 Rank: 22 with |
# 22 Rank: 22 with 61 users: HTML |
||
# 23 Rank: 23 with |
# 23 Rank: 23 with 55 users: X86 Assembly |
||
# 24 Rank: 24 with |
# 24 Rank: 24 with 50 users: Forth |
||
# 25 Rank: 25 with |
# 25 Rank: 25 with 49 users: Batch File |
||
# 26 Rank: 26 with |
# 26 Rank: 26 with 47 users: Assembly |
||
# 27 Rank: 27 with |
# 27 Rank: 27 with 45 users: Bash |
||
# 28 Rank: |
# 28 Rank: 27 T with 45 users: MATLAB |
||
# 29 Rank: 29 with |
# 29 Rank: 29 with 42 users: Lisp |
||
# 30 Rank: |
# 30 Rank: 30 with 41 users: APL |
||
# 31 Rank: |
# 31 Rank: 30 T with 41 users: Erlang |
||
# 32 Rank: 32 with |
# 32 Rank: 32 with 40 users: Delphi |
||
# 33 Rank: |
# 33 Rank: 32 T with 40 users: R |
||
# 34 Rank: |
# 34 Rank: 34 with 39 users: J |
||
# 35 Rank: |
# 35 Rank: 34 T with 39 users: Visual Basic .NET |
||
# 36 Rank: |
# 36 Rank: 36 with 38 users: Go |
||
# 37 Rank: |
# 37 Rank: 36 T with 38 users: Tcl |
||
# 38 Rank: 38 with |
# 38 Rank: 38 with 37 users: COBOL |
||
# 39 Rank: |
# 39 Rank: 39 with 36 users: Smalltalk |
||
# 40 Rank: 40 with |
# 40 Rank: 40 with 35 users: Brainf*** |
||
# 41 Rank: |
# 41 Rank: 40 T with 35 users: Objective-C |
||
# 42 Rank: |
# 42 Rank: 42 with 34 users: Clojure |
||
# 43 Rank: 43 with |
# 43 Rank: 43 with 33 users: Mathematica |
||
# 44 Rank: |
# 44 Rank: 44 with 30 users: OCaml |
||
# 45 Rank: 45 with |
# 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 ''Rosetta Code categories'' and |
|||
<br>''Rosetta Code Languages'' were downloaded to local files. |
|||
<br>This program reads the ''Languages'' file (looking for a language user) and uses the contents of <br>that file for a validation of the ''categories'' file. |
|||
<br>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 |
|||
<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 (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 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 '''Perl 6''' ──► '''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= 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= 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}}== |
||
< |
<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 163: | 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> +---------------------+ |
<pre> +----------------------------+ |
||
| |
| lang users | |
||
|---------------------| |
|----------------------------| |
||
1. | |
1. | C 391 | |
||
2. | |
2. | Java 276 | |
||
3. | |
3. | C++ 275 | |
||
4. | |
4. | Python 262 | |
||
5. | JavaScript |
5. | JavaScript 238 | |
||
|---------------------| |
|----------------------------| |
||
6. | |
6. | Perl 171 | |
||
7. | |
7. | PHP 167 | |
||
8. | |
8. | SQL 138 | |
||
9. | UNIX Shell |
9. | UNIX Shell 131 | |
||
10. | |
10. | BASIC 120 | |
||
|---------------------| |
|----------------------------| |
||
11. | |
11. | C sharp 118 | |
||
12. | |
12. | Pascal 116 | |
||
13. | Haskell 102 | |
|||
+---------------------+</pre> |
|||
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(); |
|||
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())) }</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
========== 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 |
|||
</pre> |
Latest revision as of 17:26, 3 February 2024
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
"""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)
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
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