OCaml Users Survey 2023

Summary of Results
OCaml Software Foundation
Mar 10, 2026
349
Total Respondents
Across 50 countries worldwide
57
Questions
50 multiple choice, 7 open-ended
87%
Completion Rate
19893
Data Points
402 answer options analyzed

Analysis and Discussion

Executive Summary

What we learned from 349 OCaml users across 50 countries:

OCaml's technical foundation is exceptional: 87% of survey participants are satisfied with the language, 74% find OCaml code highly maintainable, and OCaml 5 adoption reached 35% already in early 2023. However, three ecosystem gaps limit broader adoption:

  1. Documentation (25% rank it top priority): Only 23% find libraries well-documented, down from 28% in 2022
  2. Onboarding friction (62% say tooling confuses newcomers): dune/opam relationship, unhelpful error messages
  3. Talent market deadlock (50% cite hiring difficulty): Companies struggle to hire, developers see few jobs, 41% work alone

These are coordination problems, not research problems. Small sustained contributions from library maintainers, educators, employers, and experienced developers have the potential to transform the ecosystem. We will follow up with specific actions and recommendations in the discussion of the survey results below.

Introduction

The OCaml Users Survey 2023 received 349 responses from developers across 50 countries between February 10 and March 10, 2023, a 25% increase from the 280 responses in 2022. Survey participants represent diverse backgrounds: 64% have 3+ years of OCaml experience, 46% use OCaml professionally in industry, 30% in research, and 55% as hobbyists. The geographic reach spans from established OCaml strongholds (France: 30%) to growing communities worldwide, with responses from every continent.

This is the third iteration of the OCaml Users Survey, following surveys in 2020 (745 responses) and 2022 (280 responses). Survey participation varied significantly: the 2020 survey attracted 745 responses with high novelty factor, 2022 saw a sharp 62% decline to 280 responses (attributed to reluctance to use Google Forms, geopolitical factors, and drift of Reason users away from OCaml as ReScript diverged), and 2023 recovered 25% to 349 responses. The 2023 recovery suggests stable core community engagement. The ability to track trends across three years reveals both sustained strengths and persistent challenges, helping the community prioritize efforts for maximum impact.

About this report: This analysis is based on survey data collected in February-March 2023 but is being published in Spring of 2026. While some specifics reflect 2023 conditions (compiler versions, specific tool usage), the underlying patterns (documentation challenges, onboarding friction, and talent market dynamics) remain relevant based on ongoing community discussions. We intend to publish future survey reports more promptly.

Key Findings

OCaml's core strengths remain exceptional. 87% language satisfaction, 74% find code highly maintainable, and the community successfully adopted multicore support within one year of OCaml 5.0's release. The compiler release cycle is healthy, core application domains are stable, and satisfaction metrics have remained consistently high across three years of surveys. OCaml's technical foundation is solid.

We're held back not by the language itself, but by ecosystem gaps that discourage the next wave of adoption. Three persistent barriers emerged:

1. Documentation (25% ranked it top priority): Only 23% find libraries well-documented, down from 28% in 2022, while 41% actively disagree that documentation is adequate.

2. Onboarding friction (62% agree tooling confuses newcomers): The dune/opam relationship remains opaque to new users, error messages are cited as unhelpful, and "getting started" experiences create unnecessary barriers.

3. Talent market deadlock (50% cite hiring difficulty as adoption barrier): Companies can't find OCaml developers to hire, developers see few job opportunities, and 41% work as the only OCaml user at their workplace.

These are coordination problems requiring sustained community effort. While the data we base this hypothesis on is from 2023, ongoing discussions suggest that the underlying patterns persist. The "Three-Year Survey Trends" section below analyzes these patterns in historical context, while later sections discuss each barrier in detail with potential paths forward.

Community Wins

Metric202020222023Trend
Language satisfaction85.7%86.4%86.8%→ Stable high
Code maintainability76.6%80.8%73.5%↑ then ↓
Library stability68.8%74.8%68.6%↑ then ↓
Feel welcome in community68.0%81.8%73.5%↑ then ↓ (but above 2020)

While the rest of this report is looking at the challenges OCaml faces, it's important to also recognize significant achievements from 2020-2023:

Multicore Success: OCaml 5.0's December 2022 release delivered multicore support, a years-long effort culminating in a major technical milestone. By early 2023, 35% had already adopted OCaml 5.x, an extraordinarily fast uptake for a major version with breaking changes. This demonstrates the community's ability to execute complex migrations successfully when the value proposition is clear.

Build Tool Consolidation: Dune achieved 93% adoption by 2023 (up from ~80% in 2020, 91% in 2022), with all alternatives combined representing less than 10% of users. This unified tooling reduces cognitive load for newcomers and simplifies CI/CD workflows. Makefile usage declined from 42.6% (2022) to 38.6% (2023), suggesting makefiles increasingly complement dune rather than compete with it.

Package Management Standard: Opam public repository usage reached 89.3% in 2023 (up from ~80% in 2020, 88.4% in 2022), establishing it as the de facto standard for OCaml package management.

Compiler Currency: The community keeps pace with releases. 89.7% used OCaml 4.13 or newer in early 2023 (including 46.3% already on OCaml 5.x released December 2022), and 47.1% test new releases within one month. The primary friction is dependency compatibility (41.8%), not language changes or compiler bugs, while 35.4% report upgrades are "perfectly smooth."

Language Satisfaction: 87% language satisfaction across three consecutive surveys proves OCaml delivers on its core promise. Users who commit to OCaml genuinely love it; this foundation enables growth.

Welcoming Community: 74% feel welcome (2023) with only 3% disagreement, up from 68% in 2020. The 2022 peak of 81.8% shows the community has made real progress on inclusivity. Online forums remain helpful, and experienced users actively support newcomers.

Stable Libraries: 69% satisfied with library stability (2023) shows the ecosystem produces reliable code. This conservative culture, while sometimes slowing feature adoption, creates production-worthy software.

Testing and Benchmarking Culture: Testing adoption increased from 2022 to 2023: separate unit tests grew from 67.3% to 73.1%, while expect tests (40.4% to 40.5%) and property-based testing (24.1% to 24.8%) remained stable. Among the 58% who benchmark (2023), 55.2% use whole-program measurements, comparable to 2022's 82% of those who benchmarked. The ecosystem demonstrates strong engineering practices with quality-conscious testing culture.

These achievements demonstrate the community's capability for coordinated effort. The analysis and recommendations in the following sections apply this same collaborative energy to remaining gaps.

OCaml's Primary Application Domains

Primary usage contexts show stable patterns:

Context202020222023Trend
Hobbyist56.7% ("at home")54.5%62.5%→ Stable majority
Industry work52.2%46.6%40.4%↓ Declining
Research26.7%30.5%29.8%→ Stable ~30%
Student10.2% ("at school")11.5%11.5%→ Stable ~11%

The hobbyist segment remains OCaml's largest user base (62.5% in 2023), while professional industry usage among survey respondents has declined from 52.2% (2020) to 40.4% (2023). This trend correlates with the workplace isolation increase.

Application types remain focused on core strengths:

Top applications in 2023 (% of 349 respondents):

The 2022 data showed similar patterns (developer tooling 39.1%, web backend 36.2%, web frontend 29.0%), confirming OCaml's strength in language tooling, web development, and formal verification.

Academic strength persists:

Domain20222023Trend
Academia/Research45.1%38.4%↓ Still dominant but declining
Web32.7%26.9%↓ Declining
Banking/finance14.0%14.0%→ Stable
Blockchain/cryptoN/A12.9%New significant presence
Education14.8%13.2%→ Stable
Security12.1%13.2%→ Stable

Academia remains the dominant domain (38.4% in 2023) but has declined from 45.1% (2022). The 2022 report noted: "OCaml seems still mainly used in an academic or R&D setting. As with the previous survey, the Web industry and financial industry are well represented." OCaml's academic strength provides stability but also highlights the challenge of expanding into mainstream industry adoption.

Cross-compilation gap narrows but persists:

PlatformDevelopment (2022)Development (2023)Deployment (2022)Deployment (2023)Gap (2023)
Linux83.4%84.0%91.3%92.0%+8.0pp
macOS28.5%33.0%42.5%42.4%+9.4pp
Windows9.4%8.0%30.5%21.5%+13.5pp

The Windows deployment gap, even though it improved from 21.1pp (2022) to 13.5pp (2023), remains the most pronounced: only 8% develop on Windows, yet 21.5% target it. This persistent cross-compilation challenge might explain the surge in cross-platform support priority (+10pp from 2022 to 2023, +14pp from 2020 to 2023).

Challenges and Outlook

The Documentation Crisis in Numbers

Documentation satisfaction has remained stubbornly low across all three surveys (23-28% satisfied), while active dissatisfaction has grown dramatically:

The widening gap between satisfaction and dissatisfaction tells the story:

Between 2022 and 2023, something changed. Dissatisfaction jumped 11 percentage points in a single year, the largest single-year movement of any metric across all three surveys. This suggests the community has reached a breaking point where documentation inadequacy has shifted from "annoying limitation" to "critical barrier."

The Onboarding Plateau

Tooling confusion has been essentially frozen at ~62% for three consecutive surveys:

During this period, significant tooling improvements were made: dune matured and became dominant (91% in 2022, 93% in 2023), OCaml Platform LSP improved, and new learning resources were created. Yet the perception of the newcomer experience has not improved.

This plateau reveals an important insight: tooling improvements alone don't solve onboarding problems. The dune/opam relationship, error messages, project setup, and getting-started documentation need coordinated attention. Considering the more recent changes to dune between March 2023 and today, we are curious to see if/how these numbers change with the next OCaml Users Survey.

Growing Workplace Isolation

Workplace isolation has increased steadily and dramatically across all three surveys:

This is one of the most concerning trends in the data. Nearly 41% of OCaml developers work in isolation, lacking local mentorship, unable to justify OCaml for new projects, and facing career risk from non-transferable skills. This pattern suggests OCaml is becoming more concentrated in specific organizations while simultaneously spreading to more isolated practitioners elsewhere.

Meanwhile, the opposite end of the spectrum has remained stable: those in OCaml-centric environments (>50% projects use OCaml) were 35.3% in 2022 and similar in 2023. This reinforces the "all or nothing" pattern identified in the 2022 report: OCaml appears to be an all or nothing solution.

The Talent Market Deadlock

The hiring challenge has remained stubbornly persistent across all three surveys:

The 2022 report captured the dynamic well: "In an industrial setting, the lack of OCaml developers is a clear pain point in starting a new project with OCaml. But more generally (whether in an industrial or in open source projects) respondents seem to indicate that they would not choose OCaml due to the lack of critical libraries. These proportions have not changed much since the last survey (50.4% for hiring OCaml developers and 51.1% for the lack of libraries)."

This creates a chicken-and-egg cycle: companies hesitate to adopt OCaml due to hiring concerns, few OCaml jobs get posted, developers avoid specializing in OCaml, and the small developer pool reinforces companies' hesitation. Breaking this cycle requires coordination: creating supply and demand simultaneously through educational partnerships, job visibility, training programs, and talent pipeline development.

Priorities for the OCaml Software Foundation

OCSF Priority202020222023Trend
Library/ecosystem support75.6%76.8%74.9%→ Stable high ~75%
Compiler/core tools support72.1%65.8%72.5%↓ then ↑ back to 2020
Industry promotion40.4%46.3%46.8%↑ Sustained increase
Student courses/education32.6%39.7%31.6%↑ then ↓ back to 2020
Animate community32.1%28.7%29.8%↓ then → Stable ~29%
Cross-platform support22.9%26.8%26.3%↑ then → Stable ~26%
Community diversity22.9%*21.3%19.3%↓ Declining slightly
Professional training19.4%19.5%18.1%→ Stable low ~19%

The three-year survey trends reveal:

An Invitation to Contribute to the OCaml Ecosystem

The survey reveals clear opportunities. Companies using OCaml can amplify their impact by funding initiatives, allocating engineering time to improve shared dependencies, publishing case studies that inspire others, and building OCaml teams. Individual contributors can make a difference through documentation improvements, mentoring newcomers, or creating tutorials.

Every contribution strengthens the whole: Sponsored maintainers ship better libraries. Published case studies help isolated developers find peers. Engineering time invested in documentation reduces onboarding friction. Teams built around OCaml create the collaboration that 40.5% of solo practitioners seek.

Join the conversation on discuss.ocaml.org. Share your perspective. Small, sustained actions build the thriving ecosystem we all want to see.

Responses

OCaml Usage

Q1. How long have you been using OCaml?

Type: single | Responses: 349 / 349 (100.0%) | No empty responses
I do not use OCaml 12 (3.4%)
12
3.4%
Less than 1 year 63 (18.1%)
63
18.1%
1-2 years 48 (13.8%)
48
13.8%
3-5 years 65 (18.6%)
65
18.6%
6-10 years 52 (14.9%)
52
14.9%
More than 10 years 105 (30.1%)
105
30.1%
Not sure 4 (1.1%)
4
1.1%

OCaml retains users exceptionally well: 64% have 3+ years experience, with 30% exceeding a decade. The small beginner cohort (18%) compared to veterans suggests OCaml attracts developers who commit long-term rather than experiment briefly. This experience distribution has remained remarkably stable across survey years, indicating consistent appeal to developers seeking production reliability over trend-driven adoption.

Q2. How do you rate your OCaml proficiency?

Type: single | Responses: 347 / 347 (100.0%) | Empty: 2
Beginner 78 (22.5%)
78
22.5%
Intermediate 109 (31.4%)
109
31.4%
Advanced 105 (30.3%)
105
30.3%
Expert 55 (15.9%)
55
15.9%

The gap between recent users (18% with <1 year from Q1) and self-identified beginners (22%) suggests either rapid confidence building or survivorship bias, as those who struggle may leave before taking surveys. The substantial advanced/expert cohort (46%) provides mentorship capacity, though this concentration of expertise may inadvertently create barriers for newcomers navigating an ecosystem designed by and for experts.

Q3. In which context do you use OCaml?

Type: multiple | Responses: 519 / 349 (148.7%) | No empty responses
As a hobbyist 218 (62.5%)
218
62.5%
For work, in industry 141 (40.4%)
141
40.4%
For work, in a research job→ Q3.a 104 (29.8%)
104
29.8%
As a student 40 (11.5%)
40
11.5%
For teaching→ Q3.b 10 (2.9%)
10
2.9%
Other→ Q3.c 6 (1.7%)
6
1.7%

The 62% hobbyist engagement significantly exceeds typical language surveys (20-40% hobby use), revealing OCaml's appeal extends beyond workplace requirements. Many users engage across multiple contexts (the percentages sum to >100%), with particular overlap between hobbyist and professional use. Despite strong academic roots, teaching represents only 3% of usage, suggesting OCaml's academic presence concentrates in specific institutions rather than broad curriculum adoption.

Q4. OCaml usage at your workplace:

Type: single | Responses: 333 / 333 (100.0%) | Empty: 16
Most (> 50%) software projects use OCaml 112 (33.6%)
112
33.6%
Many (> 20%) software projects use OCaml 24 (7.2%)
24
7.2%
Some (> 5%) software projects use OCaml 36 (10.8%)
36
10.8%
I am—or suspect that I am— the only OCaml user 135 (40.5%)
135
40.5%
I Don't know 26 (7.8%)
26
7.8%

The bimodal "all or nothing" pattern (34% in OCaml-heavy workplaces versus 41% as sole users) reveals OCaml's adoption challenge. Unlike gradual-adoption languages (Python, TypeScript), OCaml rarely expands from pilot projects (only 18% report partial adoption). This mirrors specialized tools like Erlang that require team-wide commitment. The pattern has persisted unchanged since 2022, suggesting structural rather than temporary barriers.

Q5. OCaml trend at your workplace:

Type: multiple | Responses: 335 / 328 (102.1%) | Empty: 21
OCaml usage is increasing 41 (12.5%)
41
12.5%
OCaml usage is decreasing 23 (7.0%)
23
7.0%
OCaml usage is stable 161 (49.1%)
161
49.1%
Unsure/I don't know 110 (33.5%)
110
33.5%

The 34% uncertainty about workplace trends reveals many OCaml developers operate in organizational blind spots, using the language in isolation without visibility into broader adoption patterns. Combined with the 41% working as sole OCaml users (Q4), this suggests a fragmented professional landscape where individual champions drive usage rather than organizational strategy.

Q6. How did you learn OCaml?

Type: single | Responses: 347 / 347 (100.0%) | Empty: 2
Self-taught 203 (58.5%)
203
58.5%
University, undergraduate level 76 (21.9%)
76
21.9%
University, graduate level 24 (6.9%)
24
6.9%
At Work 22 (6.3%)
22
6.3%
Via an online course 11 (3.2%)
11
3.2%
Other→ Q6.a 11 (3.2%)
11
3.2%

The 58% self-taught majority reveals OCaml attracts intrinsically motivated developers who seek it out for technical merits rather than external requirements. With only 6% learning at work (unusually low for programming languages), OCaml's growth depends on individual initiative rather than organizational training programs. This creates both a highly motivated user base and a limited growth pipeline.

Q7. If you learned in school or University, which one (optional, you may enter the name of your school/University or simply the country).

Type: text | Total Responses: 101 | Empty: 248 | → Q7

French institutions dominate responses, with ENS and grandes écoles appearing repeatedly. This concentration reflects OCaml's INRIA origins and integration into French CS curricula as the standard functional programming teaching language. International mentions (Cornell, Cambridge) appear sporadically, suggesting adoption depends on individual professors rather than systematic curriculum integration. The geographic concentration creates both stability (guaranteed pipeline) and vulnerability (dependent on French educational policies).

Q8. Which of these other programming languages are you fluent in?

Type: multiple | Responses: 1436 / 338 (424.9%) | Empty: 11
C 199 (58.9%)
199
58.9%
Python 183 (54.1%)
183
54.1%
Javascript / Typescript 149 (44.1%)
149
44.1%
Java 122 (36.1%)
122
36.1%
C++ 100 (29.6%)
100
29.6%
Rust 92 (27.2%)
92
27.2%
Haskell 71 (21.0%)
71
21.0%
Go 59 (17.5%)
59
17.5%
Coq, Lean, Agda, or Idris→ Q8.a 57 (16.9%)
57
16.9%
Scheme or a LISP dialect 50 (14.8%)
50
14.8%
Scala 40 (11.8%)
40
11.8%
PHP 40 (11.8%)
40
11.8%
Erlang or Elixir 36 (10.7%)
36
10.7%
F# 32 (9.5%)
32
9.5%
C# 31 (9.2%)
31
9.2%
Lua 28 (8.3%)
28
8.3%
Kotlin 21 (6.2%)
21
6.2%
Elm / Purescript 19 (5.6%)
19
5.6%
Perl 19 (5.6%)
19
5.6%
Ruby 17 (5.0%)
17
5.0%
R 14 (4.1%)
14
4.1%
Dart 10 (3.0%)
10
3.0%
Swift 8 (2.4%)
8
2.4%
Fortran 7 (2.1%)
7
2.1%
Julia 7 (2.1%)
7
2.1%
Other→ Q8.b 25 (7.4%)
25
7.4%

The polyglot profile reveals OCaml users work across abstraction levels, from systems (C at 59%, Rust at 27%) to high-level (Python 54%, JavaScript 44%). The 17% using formal verification tools (Coq, Lean, Agda, Idris) far exceeds general developer populations, indicating OCaml attracts those working on correctness-critical systems. This diverse language portfolio suggests OCaml often serves specialized roles within polyglot architectures.

Q9. Which types of software have you or do you currently develop with OCaml?

Type: multiple | Responses: 852 / 329 (259.0%) | Empty: 20
Developer tooling 128 (38.9%)
128
38.9%
Programming language implementations 128 (38.9%)
128
38.9%
Web back end 119 (36.2%)
119
36.2%
Formal methods tools 87 (26.4%)
87
26.4%
Web front end 85 (25.8%)
85
25.8%
Systems programming 82 (24.9%)
82
24.9%
Data processing applications 82 (24.9%)
82
24.9%
Numerical programs 42 (12.8%)
42
12.8%
Distributed applications (including blockchain) 37 (11.2%)
37
11.2%
Data analysis or machine learning 26 (7.9%)
26
7.9%
Other→ Q9.a 12 (3.6%)
12
3.6%
Learning/experimental projects→ Q9.b 8 (2.4%)
8
2.4%
Games→ Q9.c 6 (1.8%)
6
1.8%
Command-line tools→ Q9.d 4 (1.2%)
4
1.2%
Mobile applications→ Q9.e 3 (0.9%)
3
0.9%
Security tooling→ Q9.f 2 (0.6%)
2
0.6%
None→ Q9.g 1 (0.3%)
1
0.3%

Developer tooling and programming language implementations (both 39%) dominate use cases, reflecting OCaml's comparative advantage in building language infrastructure. Web development's strong showing (36% backend, 26% frontend) proves OCaml has expanded beyond traditional niches. However, minimal adoption in ML/AI (8%) reveals ecosystem gaps where OCaml cannot compete with specialized platforms.

Q10. In which domains is the software you develop used?

Type: multiple | Responses: 537 / 307 (174.9%) | Empty: 42
Academia / research 134 (43.6%)
134
43.6%
Web 94 (30.6%)
94
30.6%
Banking / finance 49 (16.0%)
49
16.0%
Education 46 (15.0%)
46
15.0%
Security 46 (15.0%)
46
15.0%
Blockchain / cryptocurrency 45 (14.7%)
45
14.7%
Other→ Q10.a 27 (8.8%)
27
8.8%
Embedded 26 (8.5%)
26
8.5%
Commerce / retail 22 (7.2%)
22
7.2%
Healthcare / medical 14 (4.6%)
14
4.6%
Gaming 12 (3.9%)
12
3.9%
Mobile 10 (3.3%)
10
3.3%
Personal/hobby projects→ Q10.b 9 (2.9%)
9
2.9%
Not applicable/not used→ Q10.c 3 (1.0%)
3
1.0%

While academia leads at 44%, commercial sectors show substantial presence: web (31%), finance (16%), blockchain (15%). The blockchain adoption notably includes Tezos, demonstrating OCaml's value for high-assurance systems. The overlap between academic and commercial use suggests many respondents straddle both worlds, using OCaml for research that transitions to production systems.

Q11. How did you first hear about OCaml?

Type: single | Responses: 346 / 346 (100.0%) | Empty: 3
At school 136 (39.3%)
136
39.3%
Websites/Blog posts 53 (15.3%)
53
15.3%
I don't recall 49 (14.2%)
49
14.2%
Word-of-mouth 29 (8.4%)
29
8.4%
Social media 26 (7.5%)
26
7.5%
At work 23 (6.6%)
23
6.6%
Online Videos or podcasts 22 (6.4%)
22
6.4%
At a scientific conference 8 (2.3%)
8
2.3%

Academic institutions remain OCaml's primary discovery channel (39%), creating dependency on university curriculum decisions. Online discovery (29% combined) provides an alternative growth path but remains secondary to formal education.

Q12. What is a pain point when learning the OCaml language?

Type: text | Total Responses: 223 | Empty: 126 | → Q12

This question generated the richest feedback (223 responses). Key pain points cluster around the dune/opam relationship confusion, uninformative error messages (especially versus Rust), and lack of practical examples. The absence of automatic derivation for basic operations (printing, equality) particularly frustrates developers from modern functional languages. These specific, actionable complaints provide a roadmap for ecosystem improvements.

The OCaml Software Foundation

Q13. Did you know about the OCaml Software Foundation (OCSF) before this survey?

Type: multiple | Responses: 347 / 347 (100.0%) | Empty: 2
Yes 223 (64.3%)
223
64.3%
No 124 (35.7%)
124
35.7%

One-third of respondents were unaware of the OCSF, suggesting room for improved visibility. Among survey-takers (likely more engaged than average users), this awareness gap may underrepresent the broader community's disconnection from Foundation activities.

Q14. What topics or actions would you like the OCSF to work on?

Type: multiple | Responses: 1105 / 342 (323.1%) | Empty: 7
Support the development and evolution of the wider OCaml library and tooling ecosystem 256 (74.9%)
256
74.9%
Support the development and evolution of the OCaml language, compiler and core tools 248 (72.5%)
248
72.5%
Promote the language in the industrial world (through conferences and events sponsorship) 160 (46.8%)
160
46.8%
Encourage & support OCaml courses for students (Universities, schools etc.) 108 (31.6%)
108
31.6%
Animate the OCaml community (conferences & events organization and sponsorship) 102 (29.8%)
102
29.8%
Fund better support across OSes and architectures 90 (26.3%)
90
26.3%
Increase the diversity of the OCaml community 66 (19.3%)
66
19.3%
Encourage & support OCaml training for professional developers 62 (18.1%)
62
18.1%
Other→ Q14.a 13 (3.8%)
13
3.8%

Ecosystem and tooling support dominated priorities (75%), significantly outweighing industrial promotion (47%) or education (32%). This reflects a "fix the product before promoting it" mentality. One telling quote: "I've tried several times over the past couple decades to get into [OCaml], but each time I bounce off. It's not the language that's hard, it's the tools, libraries, and documentation."

Community

Q15. Where do you interact with other members of the OCaml community?

Type: multiple | Responses: 904 / 326 (277.3%) | Empty: 23
discuss.ocaml.org 200 (61.3%)
200
61.3%
GitHub 170 (52.1%)
170
52.1%
X (formerly Twitter) 80 (24.5%)
80
24.5%
Discord 80 (24.5%)
80
24.5%
r/ocaml/ 76 (23.3%)
76
23.3%
Conferences (Academic) 66 (20.2%)
66
20.2%
Caml-list 66 (20.2%)
66
20.2%
Mastodon 39 (12.0%)
39
12.0%
Slack 38 (11.7%)
38
11.7%
IRC 20 (6.1%)
20
6.1%
matrix.org 20 (6.1%)
20
6.1%
Conferences (Industrial) 19 (5.8%)
19
5.8%
Telegram→ Q15.a 10 (3.1%)
10
3.1%
Other→ Q15.b 9 (2.8%)
9
2.8%
Zulip→ Q15.c 7 (2.1%)
7
2.1%
In person/at work→ Q15.d 4 (1.2%)
4
1.2%

While discuss.ocaml.org achieved primary platform status (61%), the 39% not using it indicates continued fragmentation. GitHub's role extends beyond code hosting (52% use it for interaction), while traditional channels like Caml-list persist (20%), showing generational diversity in communication preferences. No single platform captures the entire community.

Q16. Which of the following topics would you like to see more content about?

Type: multiple | Responses: 915 / 333 (274.8%) | Empty: 16
Best practices 192 (57.7%)
192
57.7%
Library walkthroughs 111 (33.3%)
111
33.3%
Debugging how-tos 107 (32.1%)
107
32.1%
Tooling choices 105 (31.5%)
105
31.5%
Performance analysis 98 (29.4%)
98
29.4%
Case studies 69 (20.7%)
69
20.7%
Web development 68 (20.4%)
68
20.4%
Beginner fundamentals 43 (12.9%)
43
12.9%
GUIs 37 (11.1%)
37
11.1%
Machine learning 36 (10.8%)
36
10.8%
Comparisons with other languages 35 (10.5%)
35
10.5%
Other→ Q16.a 14 (4.2%)
14
4.2%

Best practices content demand (58%) dramatically exceeds beginner fundamentals (13%), reflecting the experienced user base struggling with ecosystem navigation rather than language basics. The desire for library walkthroughs (33%), debugging how-tos (32%), and tooling choices (32%) reinforces that users need ecosystem guidance, not syntax tutorials.

Projects and Contributions

Q17. About how many OCaml Projects did you contribute to in the past year?

Type: single | Responses: 346 / 346 (100.0%) | Empty: 3
0 66 (19.1%)
66
19.1%
1 84 (24.3%)
84
24.3%
2-3 113 (32.7%)
113
32.7%
4-10 64 (18.5%)
64
18.5%
11+ 19 (5.5%)
19
5.5%

The contribution pattern (57% working on 1-3 projects) suggests focused engagement rather than shallow involvement. The 19% non-contributors likely include evaluators and students. The small highly-active cohort (5% with 11+ projects) represents the ecosystem's maintenance backbone, raising sustainability concerns about depending on few individuals.

Q18. How large was the largest OCaml project you contributed to in the past year?

Type: single | Responses: 318 / 318 (100.0%) | Empty: 31
Individual project (1 active contributor) 102 (32.1%)
102
32.1%
Small project (2-5 active contributors) 104 (32.7%)
104
32.7%
Medium project (6-20 active contributors) 62 (19.5%)
62
19.5%
Large project (21-50 active contributors) 24 (7.5%)
24
7.5%
Very large project (51-99 active contributors) 14 (4.4%)
14
4.4%
Extremely large project (100+ active contributors) 12 (3.8%)
12
3.8%

Project sizes cluster at small scale (65% with ≤5 contributors), reflecting both OCaml's niche status and the talent pool constraints identified in Q53. Large projects (>50 contributors) remain rare at 8%, suggesting OCaml rarely gets chosen for massive collaborative efforts, except notable examples like Tezos and the compiler itself.

Q19. In the past year, which plateform did you use to write OCaml code?

Type: multiple | Responses: 452 / 348 (129.9%) | Empty: 1
Linux 293 (84.2%)
293
84.2%
Mac OS 115 (33.0%)
115
33.0%
Windows 28 (8.0%)
28
8.0%
BSD 10 (2.9%)
10
2.9%
Other→ Q19.a 6 (1.7%)
6
1.7%

The Windows development gap (only 8% vs 84% Linux) creates a barrier for enterprise adoption where Windows dominates developer desktops. This disparity exceeds even typical open-source projects and directly contributes to the cross-platform concerns raised in Q14. Mac OS (33%) serves as a Unix-compatible compromise for developers needing desktop productivity.

Q20. In the past year, which platform(s) did you target?

Type: multiple | Responses: 618 / 342 (180.7%) | Empty: 7
Linux 321 (93.9%)
321
93.9%
Mac OS 148 (43.3%)
148
43.3%
Windows 75 (21.9%)
75
21.9%
BSD 36 (10.5%)
36
10.5%
Web/Browser→ Q20.a 16 (4.7%)
16
4.7%
Android 8 (2.3%)
8
2.3%
Unikernels→ Q20.b 5 (1.5%)
5
1.5%
Other→ Q20.c 5 (1.5%)
5
1.5%
iOS 4 (1.2%)
4
1.2%

The deployment reality (Windows targeted by 22% but developed on by only 8%) reveals cross-compilation burden. Mobile platforms see negligible targeting (3% combined), confirming OCaml's absence from mobile development. The 94% Linux deployment reflects server-side focus but also limits OCaml to Linux-centric organizations.

Compiler

Q21. Which of these language implementations are you currently using?

Type: multiple | Responses: 503 / 345 (145.8%) | Empty: 4
Vanilla OCaml 329 (95.4%)
329
95.4%
OCaml with js_of_ocaml 102 (29.6%)
102
29.6%
Melange 22 (6.4%)
22
6.4%
Reason 21 (6.1%)
21
6.1%
A public fork of the OCaml compiler 12 (3.5%)
12
3.5%
A private fork of the OCaml compiler 10 (2.9%)
10
2.9%
Other→ Q21.a 4 (1.2%)
4
1.2%
ReScript→ Q21.b 3 (0.9%)
3
0.9%

Vanilla OCaml's dominance (95%) demonstrates successful avoidance of implementation fragmentation that plagues some languages. js_of_ocaml (30%) enables web deployment without fragmenting the core language. Reason's modest adoption (6%) suggests alternative syntax experiments haven't displaced traditional OCaml. Low fork rates (6% total) indicate upstream development meets most needs.

Q22. Which version of the OCaml compiler do you currently use most?

Type: multiple | Responses: 339 / 339 (100.0%) | Empty: 10
4.02 1 (0.3%)
1
0.3%
4.04 1 (0.3%)
1
0.3%
4.07 1 (0.3%)
1
0.3%
4.10 3 (0.9%)
3
0.9%
4.11 7 (2.1%)
7
2.1%
4.12 9 (2.7%)
9
2.7%
4.13 14 (4.1%)
14
4.1%
4.14 133 (39.2%)
133
39.2%
5.0 38 (11.2%)
38
11.2%
5.1 119 (35.1%)
119
35.1%
trunk 4 (1.2%)
4
1.2%
Don't know 9 (2.7%)
9
2.7%

The 46% already on OCaml 5.x within months of release demonstrates successful multicore adoption, a major technical milestone. The 4.14 holdouts (39%) likely reflect production systems' conservative upgrade cycles. Minimal legacy version usage (≤4.13 at 11%) shows the community successfully migrates forward, avoiding version fragmentation.

Q23. What is the oldest version that you try to support in the software you develop?

Type: multiple | Responses: 308 / 308 (100.0%) | Empty: 41
Only the latest release 39 (12.7%)
39
12.7%
Debian stable 10 (3.2%)
10
3.2%
4.02 7 (2.3%)
7
2.3%
4.03 1 (0.3%)
1
0.3%
4.04 4 (1.3%)
4
1.3%
4.05 5 (1.6%)
5
1.6%
4.06 3 (1.0%)
3
1.0%
4.07 7 (2.3%)
7
2.3%
4.08 32 (10.4%)
32
10.4%
4.09 2 (0.6%)
2
0.6%
4.10 8 (2.6%)
8
2.6%
4.11 6 (1.9%)
6
1.9%
4.12 26 (8.4%)
26
8.4%
4.13 20 (6.5%)
20
6.5%
4.14 69 (22.4%)
69
22.4%
5.0 42 (13.6%)
42
13.6%
N/A 27 (8.8%)
27
8.8%

The 4.14 baseline (22%) emerging as the de facto minimum reflects a community balance between stability and progress. Those supporting only latest releases (13%) are likely application developers, while 4.08 support (10%) accommodates long-term support system users. This distribution helps library maintainers prioritize compatibility efforts.

Q24. Which installation methods do you use, for your development environment?

Type: multiple | Responses: 584 / 344 (169.8%) | Empty: 5
opam (using the public repository) 302 (87.8%)
302
87.8%
Distribution's package manager 48 (14.0%)
48
14.0%
opam (using a private repository) 48 (14.0%)
48
14.0%
Manual compilation and installation of source code 42 (12.2%)
42
12.2%
External package manager (e.g. Homebrew, MacPorts, Cygwin) 40 (11.6%)
40
11.6%
Nix packages 34 (9.9%)
34
9.9%
Monorepo 22 (6.4%)
22
6.4%
npm 19 (5.5%)
19
5.5%
Manual installation of pre-compiled binaries 13 (3.8%)
13
3.8%
esy 8 (2.3%)
8
2.3%
Other→ Q24.a 8 (2.3%)
8
2.3%

opam's dominance (88%) represents successful standardization comparable to Cargo in Rust. Alternative methods persist for specific needs: corporate environments (14% private repos), reproducible builds (10% Nix), and system integration (14% distribution packages).

Q25. How long do you typically wait after an OCaml release to test your codebase with the new version?

Type: multiple | Responses: 323 / 295 (109.5%) | Empty: 54
Less than a week 73 (24.7%)
73
24.7%
Less than a month 66 (22.4%)
66
22.4%
Less than three months 69 (23.4%)
69
23.4%
More than one release late (more than 6 months) 51 (17.3%)
51
17.3%
One release late (~6 months) 64 (21.7%)
64
21.7%

The split between early adopters (25% test within a week) and conservatives (39% wait 6+ months) creates a healthy ecosystem where issues surface quickly but production systems maintain stability. The 70% testing within one release cycle indicates most users keep reasonably current, avoiding accumulated breaking changes.

Q26. Once you test your code base to the new OCaml version, what is painful and requires adapting your project?

Type: multiple | Responses: 343 / 263 (130.4%) | Empty: 86
Working around incompatible dependencies 110 (41.8%)
110
41.8%
It's perfectly smooth each time! 93 (35.4%)
93
35.4%
Breaking changes 32 (12.2%)
32
12.2%
New compiler warnings 31 (11.8%)
31
11.8%
Reliance on compiler-internal APIs (compiler-libs) 25 (9.5%)
25
9.5%
Reliance on the Foreign Function Interface 13 (4.9%)
13
4.9%
Compiler bugs 10 (3.8%)
10
3.8%
Other→ Q26.a 29 (11.0%)
29
11.0%

Dependency incompatibility dominates upgrade friction (42%), revealing coordination challenges in the ecosystem. Yet 35% report "perfectly smooth" upgrades, suggesting problems concentrate in specific dependency trees rather than systemic issues. The compiler-internal API users (10%) represent advanced tool builders whose needs may conflict with stability goals.

Q27. How do you feel about the compiler's every-six-month release schedule?

Type: single | Responses: 335 / 335 (100.0%) | Empty: 14
It's just right 153 (45.7%)
153
45.7%
It's too slow 6 (1.8%)
6
1.8%
It's too fast 6 (1.8%)
6
1.8%
I was not aware of it 69 (20.6%)
69
20.6%
I'm indifferent or unsure 101 (30.1%)
101
30.1%

The 46% satisfaction with the six-month cadence validates the current schedule. More interesting: 50% are either unaware or indifferent to the release cycle, indicating a substantial user segment disconnected from compiler development. They use stable versions without tracking releases. Only 4% find the pace problematic.

Tooling

Q28. Which build tools do you use, in your current projects?

Type: multiple | Responses: 501 / 342 (146.5%) | Empty: 7
dune 317 (92.7%)
317
92.7%
makefiles 132 (38.6%)
132
38.6%
ocamlbuild 22 (6.4%)
22
6.4%
Other→ Q28.a 11 (3.2%)
11
3.2%
ninja 8 (2.3%)
8
2.3%
omake 4 (1.2%)
4
1.2%
buck 2 4 (1.2%)
4
1.2%
bazel 3 (0.9%)
3
0.9%

Dune's 93% adoption represents remarkable consolidation since its 2017 introduction. The persistent makefile usage (39%) suggests integration needs with non-OCaml components that dune doesn't fully address. One respondent's "dune for convenience but this tool is awful" highlights that monopoly doesn't equal satisfaction.

Q29. What kind of preprocessors do you use, in your current projects?

Type: multiple | Responses: 433 / 327 (132.4%) | Empty: 22
ppx extensions created by others 223 (68.2%)
223
68.2%
None 83 (25.4%)
83
25.4%
ppx created by yourself or for the project you're contributing to 64 (19.6%)
64
19.6%
cpp-style conditional-compilation directives 31 (9.5%)
31
9.5%
camlp4/camlp5 default preprocessors 16 (4.9%)
16
4.9%
Other→ Q29.a 10 (3.1%)
10
3.1%
Custom camlp4/camlp5 extensions 6 (1.8%)
6
1.8%

PPX dominance (68% using, 20% creating) confirms successful migration from camlp4/camlp5 (now 5%). The 25% using no preprocessors reveals a substantial "pure OCaml" cohort, either by preference or because their domains don't require metaprogramming. Active custom PPX development indicates healthy extensibility.

Q30. Which editors do you use, in your current projects?

Type: multiple | Responses: 439 / 347 (126.5%) | Empty: 2
VSCode or VSCodium 136 (39.2%)
136
39.2%
Vim (or vim-based such as Neovim) 136 (39.2%)
136
39.2%
Emacs (or emacs-based such as Aquamacs) 124 (35.7%)
124
35.7%
IntelliJ 16 (4.6%)
16
4.6%
Sublime Text 11 (3.2%)
11
3.2%
Helix→ Q30.a 7 (2.0%)
7
2.0%
Other→ Q30.b 7 (2.0%)
7
2.0%
Kakoune 2 (0.6%)
2
0.6%

The three-way editor tie (VSCode 39%, Vim 39%, Emacs 36%) reflects generational and philosophical diversity, as modern IDE users coexist with traditional Unix editor adherents. Multiple editor usage (totals exceed 100%) suggests context-dependent choices. Low IntelliJ adoption (5%) indicates the OCaml plugin hasn't achieved parity with mainstream editor support.

Q31. Where do you host your software sources, in your current projects?

Type: multiple | Responses: 471 / 337 (139.8%) | Empty: 12
GitHub 282 (83.7%)
282
83.7%
GitLab (on gitlab.com) 62 (18.4%)
62
18.4%
Other self-hosted forge 53 (15.7%)
53
15.7%
GitLab (self-managed) 51 (15.1%)
51
15.1%
Other SaaS forge 23 (6.8%)
23
6.8%

GitHub's dominance (84%) mirrors industry trends. The 31% using self-hosted solutions (GitLab self-managed + other forges) indicates significant enterprise or privacy-conscious usage requiring infrastructure control.

Q32. Which tools do you use to test OCaml code, in your current projects?

Type: multiple | Responses: 526 / 294 (178.9%) | Empty: 55
Separate unit tests (unit tests in a separate module, incl. using a custom testing framework) 215 (73.1%)
215
73.1%
Expect-style tests (recording the expected test output along with the test, incl. using a custom testing framework) 119 (40.5%)
119
40.5%
Inline unit tests (unit tests within the tested code, incl. using a custom testing framewor) 75 (25.5%)
75
25.5%
QuickCheck-style property-based tests (random testing, incl. using a custom testing framework) 73 (24.8%)
73
24.8%
AFL/Crowbar (whitebox fuzzing) 22 (7.5%)
22
7.5%
Other→ Q32.a 22 (7.5%)
22
7.5%

High testing adoption (84% use tools) reflects quality-conscious culture. Traditional unit tests dominate (62%) but expect-tests (34%) show dune's cram-style testing gaining traction. Property-based testing (21%) exceeds mainstream language adoption, reflecting functional programming's formal specification affinity. Low fuzzing use (6%) suggests untapped potential.

Q33. Which tools do you use to benchmark OCaml code, in your current projects?

Type: multiple | Responses: 302 / 203 (148.8%) | Empty: 146
Whole program time measurements (time, perf-stat, valgrind, gprof...) 112 (55.2%)
112
55.2%
Custom, project specific benchmarking tool 79 (38.9%)
79
38.9%
Microbenchmarking library (core_bench, benchmark, bench...) 46 (22.7%)
46
22.7%
Performance-monitoring libraries (landmark...) 32 (15.8%)
32
15.8%
Other→ Q33.a 24 (11.8%)
24
11.8%
Preprocessor-helped microbenchmarking (ppx_bench...) 9 (4.4%)
9
4.4%

The 42% not benchmarking likely includes domains where performance isn't critical. Among those who do, simple timing tools (55%) outweigh sophisticated microbenchmarking (23%), suggesting optimization focuses on algorithmic improvements over low-level tuning. Custom tooling proliferation (39%) indicates unmet needs in performance measurement.

Infrastructure

Q34. How do you deploy OCaml applications?

Type: multiple | Responses: 638 / 302 (211.3%) | Empty: 47
Via OPAM 118 (39.1%)
118
39.1%
As static binaries 115 (38.1%)
115
38.1%
As docker images 94 (31.1%)
94
31.1%
As source code in an archive file 72 (23.8%)
72
23.8%
Through the web (meaning the project is a Web App running in the user's browser) 66 (21.9%)
66
21.9%
As dynamically-linked binaries 58 (19.2%)
58
19.2%
As source code via a forge clone URL 46 (15.2%)
46
15.2%
Via the distribution's packaging systems 23 (7.6%)
23
7.6%
Other→ Q34.a 21 (7.0%)
21
7.0%
Via Nix packages (outside of NixOS) 17 (5.6%)
17
5.6%
Via an application store (such as Google Play Store, Apple App Store, Flathub, Snap store, …) 8 (2.6%)
8
2.6%

Deployment method diversity reflects different audience targets: opam for OCaml users (39%), static binaries for end-users without OCaml (38%), Docker for cloud deployment (31%). Source distribution remains surprisingly high (39% combined), indicating trust in users' build capabilities. Low system packaging (8%) limits mainstream Linux distribution inclusion.

Q35. If you deploy on the web, what platform(s) are you using?

Type: multiple | Responses: 221 / 166 (133.1%) | Empty: 183
Self hosted servers 90 (54.2%)
90
54.2%
Hosting provider 47 (28.3%)
47
28.3%
AWS 41 (24.7%)
41
24.7%
Other→ Q35.a 21 (12.7%)
21
12.7%
Google Cloud 15 (9.0%)
15
9.0%
Microsoft Azure 5 (3.0%)
5
3.0%
DigitalOcean 2 (1.2%)
2
1.2%

Self-hosted infrastructure preference (54%) reflects the community's technical sophistication and cost-consciousness. AWS's modest showing (25%) given market dominance suggests OCaml deployments skew small-scale where cloud premiums are hard to justify. Minimal Azure (3%) aligns with weak Windows ecosystem ties.

Feelings

Q36. I feel welcome in the OCaml community

Type: single | Responses: 345 / 345 (100.0%) | Empty: 4
Strongly agree 130 (37.7%)
130
37.7%
Agree 125 (36.2%)
125
36.2%
Neutral 55 (15.9%)
55
15.9%
Disagree 6 (1.7%)
6
1.7%
Strongly disagree 3 (0.9%)
3
0.9%
I don't know 26 (7.5%)
26
7.5%

The 74% feeling welcome with only 3% disagreement indicates genuinely inclusive community culture. The 16% neutral may represent passive inclusion: not unwelcome but not actively welcomed either. The 8% "don't know" likely includes lurkers consuming content without engaging, unable to assess community tone from passive consumption.

Q37. I am satisfied with OCaml as a language

Type: single | Responses: 347 / 347 (100.0%) | Empty: 2
Strongly agree 130 (37.5%)
130
37.5%
Agree 173 (49.9%)
173
49.9%
Neutral 33 (9.5%)
33
9.5%
Disagree 5 (1.4%)
5
1.4%
Strongly disagree 4 (1.2%)
4
1.2%
I don't know 2 (0.6%)
2
0.6%

The 87% language satisfaction dramatically exceeds typical programming language scores (60-75% in broader surveys) and represents OCaml's strongest metric. With only 3% dissatisfied, those who persist with OCaml genuinely find it meets their needs. This high satisfaction provides a foundation but shouldn't mask the ecosystem challenges revealed elsewhere.

Q38. OCaml tooling provides a comfortable workflow for me

Type: single | Responses: 345 / 345 (100.0%) | Empty: 4
Strongly agree 38 (11.0%)
38
11.0%
Agree 185 (53.6%)
185
53.6%
Neutral 64 (18.6%)
64
18.6%
Disagree 37 (10.7%)
37
10.7%
Strongly disagree 16 (4.6%)
16
4.6%
I don't know 5 (1.4%)
5
1.4%

Tooling satisfaction (65%) significantly lags language satisfaction (87%), identifying tooling as a relative weakness. The 15% dissatisfaction likely concentrates among Windows users, debugger seekers, and those needing IDE features. The 19% neutral may have adapted to limitations but wouldn't describe workflows as "comfortable."

Q39. OCaml tooling is confusing to newcomers

Type: single | Responses: 344 / 344 (100.0%) | Empty: 5
Strongly agree 68 (19.8%)
68
19.8%
Agree 145 (42.2%)
145
42.2%
Neutral 72 (20.9%)
72
20.9%
Disagree 25 (7.3%)
25
7.3%
Strongly disagree 3 (0.9%)
3
0.9%
I don't know 31 (9.0%)
31
9.0%

The 62% consensus that tooling confuses newcomers, despite 65% of experienced users finding it comfortable (Q38), reveals a steep but surmountable learning curve. With only 8% disagreeing, even advocates acknowledge the onboarding problem. This validates the documentation and tutorial demands seen throughout the survey.

Q40. What would you change?

Type: text | Total Responses: 179 | Empty: 170 | → Q40

Half of participants (179) provided feedback, with unified tooling (merging dune/opam for Cargo-like experience) as the dominant theme. Documentation, Windows support, debugging capabilities, and simpler project setup round out the wish list. These specific, repeated requests provide clear direction for ecosystem improvements.

Q41. I am satisfied with OCaml's package repositories

Type: single | Responses: 341 / 341 (100.0%) | Empty: 8
Strongly agree 47 (13.8%)
47
13.8%
Agree 184 (54.0%)
184
54.0%
Neutral 63 (18.5%)
63
18.5%
Disagree 28 (8.2%)
28
8.2%
Strongly disagree 4 (1.2%)
4
1.2%
I don't know 15 (4.4%)
15
4.4%

Package repository satisfaction (68%) aligns with general tooling satisfaction, confirming opam's core infrastructure works adequately. The 9% dissatisfaction is remarkably low for package management, an historically problematic domain. The 18% neutral suggests functional but unexceptional experience.

Q42. What would you change?

Type: text | Total Responses: 79 | Empty: 270 | → Q42

The 79 responses (23% participation) focus on performance (slow updates, compilation time) and discoverability (finding packages, assessing quality). A few responses raise security concerns (package signing, vulnerability tracking), suggesting growing production use where these matter.

Q43. I can find OCaml libraries for my needs.

Type: single | Responses: 342 / 342 (100.0%) | Empty: 7
Strongly agree 27 (7.9%)
27
7.9%
Agree 160 (46.8%)
160
46.8%
Neutral 87 (25.4%)
87
25.4%
Disagree 41 (12.0%)
41
12.0%
Strongly disagree 11 (3.2%)
11
3.2%
I don't know 12 (3.5%)
12
3.5%
I don't need libraries 4 (1.2%)
4
1.2%

Library availability shows the weakest satisfaction (55%) among ecosystem metrics, falling below tooling (65%) and repositories (68%). The 15% dissatisfaction represents users actively blocked by missing libraries. Combined with Q53 where 48% cite missing libraries as adoption barriers, this confirms library gaps as a critical growth constraint.

Q44. If you are not satisfied, which libraries are missing?

Type: text | Total Responses: 72 | Empty: 277 | → Q44

The 72 responses identify specific gaps: GUI frameworks, cloud SDKs (AWS, Azure), modern web frameworks, and data science tools. Notably, many complaints focus on documentation and maintenance uncertainty rather than absolute absence. Libraries exist but aren't discoverable or trustworthy. The repeated "blessed library" requests suggest decision paralysis from unclear quality signals.

Q45. OCaml libraries are well documented.

Type: single | Responses: 338 / 338 (100.0%) | Empty: 11
Strongly agree 6 (1.8%)
6
1.8%
Agree 73 (21.6%)
73
21.6%
Neutral 114 (33.7%)
114
33.7%
Disagree 83 (24.6%)
83
24.6%
Strongly disagree 43 (12.7%)
43
12.7%
I don't know 16 (4.7%)
16
4.7%
I don't need libraries 3 (0.9%)
3
0.9%

Documentation quality shows the worst metrics in the entire survey: only 23% satisfied versus 37% dissatisfied. This represents a clear community crisis and the most actionable improvement area. The dissatisfaction exceeds satisfaction by 14 percentage points, unique among survey metrics. The large neutral cohort (34%) may have adapted to reading source code as documentation.

Q46. OCaml libraries are stable enough for my needs.

Type: single | Responses: 338 / 338 (100.0%) | Empty: 11
Strongly agree 48 (14.2%)
48
14.2%
Agree 184 (54.4%)
184
54.4%
Neutral 66 (19.5%)
66
19.5%
Disagree 10 (3.0%)
10
3.0%
Strongly disagree 7 (2.1%)
7
2.1%
I don't know 20 (5.9%)
20
5.9%
I don't need libraries 3 (0.9%)
3
0.9%

Library stability satisfaction (69%) provides a bright spot: existing libraries are reliable even if poorly documented or insufficient in number. The 5% dissatisfaction is remarkably low, suggesting OCaml's conservative culture produces dependable code. This stable foundation could support growth if documentation and discovery improve.

Q47. I have a good understanding of OCaml best practices

Type: single | Responses: 347 / 347 (100.0%) | Empty: 2
Strongly agree 35 (10.1%)
35
10.1%
Agree 130 (37.5%)
130
37.5%
Neutral 92 (26.5%)
92
26.5%
Disagree 59 (17.0%)
59
17.0%
Strongly disagree 14 (4.0%)
14
4.0%
I don't know 17 (4.9%)
17
4.9%

Less than half (48%) feel confident about best practices, explaining why this topped content requests (55% in Q16). The 21% acknowledging ignorance shows healthy self-awareness. The large neutral group (27%) likely includes developers unsure whether their patterns align with community norms, a solvable problem through documentation.

Q48. Software written in OCaml is easy to maintain

Type: single | Responses: 344 / 344 (100.0%) | Empty: 5
Strongly agree 114 (33.1%)
114
33.1%
Agree 139 (40.4%)
139
40.4%
Neutral 48 (14.0%)
48
14.0%
Disagree 10 (2.9%)
10
2.9%
Strongly disagree 3 (0.9%)
3
0.9%
I don't know 30 (8.7%)
30
8.7%

Maintainability scores (74% agreement) rank among OCaml's strongest selling points, second only to language satisfaction. This validates OCaml's core value proposition: type safety and functional paradigms produce maintainable code. The 4% disagreement is negligible, confirming this as a genuine strength rather than community bias.

Q49. As a candidate, I can easily find OCaml jobs

Type: single | Responses: 336 / 336 (100.0%) | Empty: 13
Strongly agree 7 (2.1%)
7
2.1%
Agree 22 (6.5%)
22
6.5%
Neutral 47 (14.0%)
47
14.0%
Disagree 68 (20.2%)
68
20.2%
Strongly disagree 57 (17.0%)
57
17.0%
I don't know 135 (40.2%)
135
40.2%

The stark asymmetry (37% find jobs hard to locate versus 9% finding them easy) quantifies the employment challenge, though 40% selected "I don't know," likely reflecting those not actively job searching. Combined with Q53's hiring difficulties, this confirms the talent market deadlock.

Q50. As a hiring manager, I can easily find qualified OCaml candidates

Type: single | Responses: 302 / 302 (100.0%) | Empty: 47
Strongly agree 3 (1.0%)
3
1.0%
Agree 18 (6.0%)
18
6.0%
Neutral 32 (10.6%)
32
10.6%
Disagree 39 (12.9%)
39
12.9%
Strongly disagree 22 (7.3%)
22
7.3%
I don't know 188 (62.3%)
188
62.3%

The hiring manager perspective mirrors the candidate side: only 7% find it easy to hire qualified OCaml candidates, while 20% report difficulty. The dominant response is "I don't know" (62%), reflecting that most respondents are not in hiring positions. Among those with hiring experience, the difficulty outweighs ease by nearly 3:1, reinforcing the talent market deadlock seen in Q49.

Burning Desires

Q51. If I was granted up to three new language features today, I would ask for (no choice means "no new feature, please!"):

Type: multiple | Responses: 680 / 325 (209.2%) | Empty: 24
An effect system (a type system for side-effects) 184 (56.6%)
184
56.6%
A builtin "deriving" mechanism 158 (48.6%)
158
48.6%
Typeclasses/implicits 144 (44.3%)
144
44.3%
A more powerful module system 63 (19.4%)
63
19.4%
Namespaces 55 (16.9%)
55
16.9%
A complete redesign of the surface syntax 40 (12.3%)
40
12.3%
I don't know 36 (11.1%)
36
11.1%

An effect system (57%) tops the wishlist, followed closely by builtin deriving (49%) and typeclasses/implicits (44%). These three features share a common theme: reducing boilerplate while preserving type safety. The gap to the next tier is significant, with a more powerful module system (19%) and namespaces (17%) drawing far less demand. Only 11% selected "I don't know," suggesting most respondents have clear opinions on language evolution.

Q52. If one piece of the ecosystem could magically be made state-of-the-art, I would ask for:

Type: multiple | Responses: 320 / 320 (100.0%) | Empty: 29
Documentation for user libraries 79 (24.7%)
79
24.7%
A build tool 48 (15.0%)
48
15.0%
A package manager 40 (12.5%)
40
12.5%
A compiler 37 (11.6%)
37
11.6%
Documentation for the core language 35 (10.9%)
35
10.9%
Communication to outsiders (blog posts, conferences...) 35 (10.9%)
35
10.9%
My domain-specific library ecosystem 24 (7.5%)
24
7.5%
A language website 11 (3.4%)
11
3.4%
A support community 11 (3.4%)
11
3.4%

Documentation for user libraries dominates improvement priorities (25%), significantly exceeding build tools (15%) or package management (13%). This aligns with Q45's dissatisfaction metrics. The compiler (12%), core language documentation (11%), and communication to outsiders (11%) round out the top priorities, reinforcing the community's focus on documentation and outreach.

Q53. What do you think are the main pain points that prevent OCaml adoption for new projects?

Type: multiple | Responses: 525 / 282 (186.2%) | Empty: 67
Too hard to find and hire OCaml developers 142 (50.4%)
142
50.4%
Lack of critical libraries 136 (48.2%)
136
48.2%
Lack of critical developer tools 94 (33.3%)
94
33.3%
Too hard to learn 80 (28.4%)
80
28.4%
OCaml does not fit your environment constraints (hardware support, OS support, ...) 55 (19.5%)
55
19.5%
Lack of performance 13 (4.6%)
13
4.6%
Lack of backward compatibility 5 (1.8%)
5
1.8%

Hiring difficulty (50%) and missing libraries (48%) are the top two adoption barriers, creating interlocking constraints. Companies can't adopt without developers, developers won't specialize without jobs, and neither group invests in libraries for uncertain futures. Lack of developer tools (33%) and learning curve (28%) compound these primary barriers. Environment constraints (20%) and performance (5%) are cited far less, confirming problems lie in ecosystem rather than core language.

Q54. Anything to add? (in 255 characters or less)

Type: text | Total Responses: 75 | Empty: 274 | → Q54

The 75 free-text responses cover a wide range of topics. Recurring themes include appreciation for OCaml's type system and expressiveness, frustration with tooling and documentation gaps, and calls for better marketing and community outreach. Several responses highlight the tension between OCaml's technical strengths and its ecosystem challenges.

Demographics, Diversity and Inclusion

Q55. Which country do you live in?

Type: text | Total Responses: 339 | Empty: 10 | → Q55

Geographic concentration reveals both strength and vulnerability. France's 31% share provides a stable base but creates dependence on French institutions. The US (16%) and UK (8%) follow. The 50-country reach proves global interest exists despite concentration.

Q56. Do you consider yourself a member of an underrepresented or marginalized group in technology?

Type: multiple | Responses: 357 / 284 (125.7%) | Empty: 65
I don't consider myself part of an underrepresented or marginalized group in technology 190 (66.9%)
190
66.9%
Lesbian, gay, bisexual, queer or otherwise non-heterosexual 26 (9.2%)
26
9.2%
Older or younger than the average developers I know 19 (6.7%)
19
6.7%
Racial or ethnic minority 19 (6.7%)
19
6.7%
Other→ Q56.a 15 (5.3%)
15
5.3%
Political beliefs 14 (4.9%)
14
4.9%
Woman or perceived as a woman 13 (4.6%)
13
4.6%
Educational background 12 (4.2%)
12
4.2%
Trans 8 (2.8%)
8
2.8%
Religious beliefs 7 (2.5%)
7
2.5%
Cultural beliefs 7 (2.5%)
7
2.5%
Non-binary gender 7 (2.5%)
7
2.5%
Disabled or person with disability (including physical, mental, and other) 7 (2.5%)
7
2.5%
Language 7 (2.5%)
7
2.5%
Yes, but I prefer not to say which 6 (2.1%)
6
2.1%

Two-thirds (67%) do not consider themselves part of an underrepresented group. Among those who do, LGBQ+ identity is most reported (9%), followed by age-related underrepresentation (7%) and racial/ethnic minority status (7%). Women or those perceived as women represent 5% of respondents, and 3% identify as trans. The low representation of women and racial minorities compared to the broader tech industry suggests the OCaml community faces significant diversity challenges.

Q57. Do you feel your belonging to an underrepresented or marginalized group in technology makes it difficult for you to participate in the OCaml community?

Type: single | Responses: 288 / 288 (100.0%) | Empty: 61
Never 99 (34.4%)
99
34.4%
Sometimes 14 (4.9%)
14
4.9%
Often 2 (0.7%)
2
0.7%
N/A 173 (60.1%)
173
60.1%

Among those who belong to an underrepresented group, the majority (86%) say it never makes participation difficult. However, 14% report that it sometimes does, and 2% say it often does. The 60% selecting "N/A" are those who do not identify as part of an underrepresented group. While the absolute numbers are small (16 reporting any difficulty), these responses deserve attention to ensure the community remains welcoming to all.

Appendix: Detailed Responses

This section contains all consolidated answers and text responses referenced in the main report.

Q3: In which context do you use OCaml?

Q3.a: For work, in a research job

↑ Back to question

Showing 2 variants consolidated into this answer (104 total responses)

  • For work, in a research job 103 responses
  • For work, in a research-and-teaching job 1 response

Q3.b: For teaching

↑ Back to question

Showing 9 variants consolidated into this answer (10 total responses)

  • For teaching 2 responses
  • For work, in a research-and-teaching job 1 response
  • education 1 response
  • As a teacher 1 response
  • For work (education) and for personal projects 1 response
  • As educator. I teach a course in Compilers using OCaml as a language to write a compiler. I also use OCaml as a scripting language for grading and maintaining records in another course. My students also use OCaml for their Bachelor and Master projects. 1 response
  • For work: in a teaching job 1 response
  • Teaching 1 response
  • For teaching CS 1 response

Q3.c: Other

↑ Back to question

Showing 6 variants consolidated into this answer (6 total responses)

  • In a previous job 1 response
  • To do cool stuff in FP without Haskell 1 response
  • Some personal projects I am writing them in only Ocaml. 1 response
  • For work, in open source 1 response
  • Also used it at university that makes up 2 years 1 response
  • For work in academia (library) 1 response

Q6: How did you learn OCaml?

Q6.a: Other

↑ Back to question

Showing 10 variants consolidated into this answer (11 total responses)

  • In high school 2 responses
  • University, out of curriculum 1 response
  • Self-taught but used lecture material by Michael Ryan Clarkson 1 response
  • Self-taught at work. 1 response
  • University, undergraduate level + latter a friend made me try it again for a hobby project and teached me a lot 1 response
  • exercism.org and ocaml.org tutorials + self-taught 1 response
  • ocaml mooc 1 response
  • with books, online tutorials, and at work 1 response
  • French « prépa » 1 response
  • Preparatory school for Grande Ecole Engineering Schools 1 response

Q7: If you learned in school or University, which one (optional, you may enter the name of your school/University or simply the country).

↑ Back to question

Showing all 84 text responses

  • France 7 responses
  • Université Paris Diderot 3 responses
  • ENS Ulm 2 responses
  • ENSEEIHT 2 responses
  • French CPGE 2 responses
  • INSA Rennes 2 responses
  • Paris Diderot 2 responses
  • TUM 2 responses
  • Université Paris XI 2 responses
  • Université Paris-Sud 2 responses
  • École normale supérieure 2 responses
  • Aarhus University
  • Belarusian State University
  • Boston College
  • CEA
  • Classe préparatoire (Lycée Masséna, Nice, France)
  • Classes Prépas MPSI/MP - France
  • Classes prépa
  • Copenhagen University.
  • Cornell University
  • ENAC, France
  • ENS
  • ENS Cachan
  • ENS Lyon, France
  • ENS Paris Saclay
  • ENS Paris-Saclay
  • ENSEEIHT - France
  • ENSEEIHT, Toulouse, France
  • Ecole Normale Supérieure, Paris, France
  • Ecole Polytechnique
  • Ens lyon
  • Epita
  • Epitech Paris
  • FRANCE
  • French classe prepa
  • Germany
  • INSA de Rennes
  • INSA, France
  • Italy
  • Japan
  • Lycée Montaigne
  • MPRI (Parisian Master of Research in Computer Science)
  • Middlebury Colelge
  • Paris
  • Paris 6
  • Paris 7
  • Paris Cité (ex Paris 7 Diderot)
  • Paris Saclay
  • Paris Sud
  • Paris VI
  • Polytechnique University of Timisoara
  • Sorbonne University
  • Technical University of Wroclaw, Poland
  • The Johns Hopkins University
  • The University of Tokyo
  • Toulouse III (France)
  • Tsukuba
  • UPMC, Paris, France
  • Universite Louis Pasteur, Strasbourg, France
  • Universite Paris Sud
  • Universite Paris-Saclay
  • University of Beira Interior
  • University of Bologna
  • University of Cambridge, United Kingdom
  • University of Ljubljana, Faculty of Computer and Information Science, Slovenia
  • University of Luxembourg
  • University of Paris (Diderot), Sorbonne University
  • University of Tokyo
  • Université Paris Diderot, Université de Paris, Université Paris Cité
  • Université Paris Est Créteil
  • Université Paris Saclay, France
  • Université Paris-Saclay
  • Université Paris-Sud, France
  • Université Paul Sabatier - Toulouse
  • Université Toulouse 3 Paul Sabatier, France
  • Université de Lille 1, France
  • Université de Rouen (Faculté des Sciences et Techniques)
  • Université paris 7
  • epita
  • it was with François Pottier at Polytechnique a long time ago :)
  • p6
  • ÉNS Cachan – Antenne de Bretagne
  • École Normale Supérieure (Paris, France)
  • École Polytechnique

Q8: Which of these other programming languages are you fluent in?

Q8.a: Coq, Lean, Agda, or Idris

↑ Back to question

Showing 2 variants consolidated into this answer (57 total responses)

  • Coq, Lean, Agda, or Idris 56 responses
  • Why3 1 response

Q8.b: Other

↑ Back to question

Showing 24 variants consolidated into this answer (25 total responses)

  • Smalltalk 1 response
  • http://refpersys.org/ 1 response
  • Crystal 1 response
  • D 1 response
  • Matlab 1 response
  • VHDL, Verilog 1 response
  • SQL 1 response
  • COBOL, Ada 1 response
  • Ada 1 response
  • Pascal 1 response
  • Object Pascal 1 response
  • Forth 1 response
  • Unix shell, awk, Tcl, old Python and Perl, ... 1 response
  • Bash, SQL 1 response
  • Bash 1 response
  • bash 1 response
  • ReScript 2 responses
  • Rescript 2 responses
  • SML 1 response
  • Standard ML 1 response
  • Modula 3, Algol 68. 1 response
  • Futhark 1 response
  • Prolog 2 responses
  • Nix 2 responses

Q9: Which types of software have you or do you currently develop with OCaml?

Q9.a: Other

↑ Back to question

Showing 12 variants consolidated into this answer (12 total responses)

  • Cryptocurrency/blockchain 1 response
  • crypto 1 response
  • Simulation, optimization 1 response
  • hardware design 1 response
  • Toy package manager, audio tagger 1 response
  • Cloud functions 1 response
  • Custom algorithms 1 response
  • bindings 1 response
  • data structures & library code 1 response
  • MirageOS 1 response
  • Anything? 1 response
  • ) 1 response

Q9.b: Learning/experimental projects

↑ Back to question

Showing 8 variants consolidated into this answer (8 total responses)

  • Advent of Code 1 response
  • Toy programs 1 response
  • 99 ocaml problems 1 response
  • Mostly "experiments" or "toys" at this stage to be honest 1 response
  • just tinkering 1 response
  • hello worlds of different kinds 1 response
  • excercise 1 response
  • Fun programs 1 response

Q9.c: Games

↑ Back to question

Showing 4 variants consolidated into this answer (6 total responses)

  • Games 3 responses
  • Video games 1 response
  • gamedev 1 response
  • Retro games 1 response

Q9.d: Command-line tools

↑ Back to question

Showing 3 variants consolidated into this answer (4 total responses)

  • Command-line art creation tools 2 responses
  • CLIs 1 response
  • CLI 1 response

Q9.e: Mobile applications

↑ Back to question

Showing 2 variants consolidated into this answer (3 total responses)

  • Desktop application 2 responses
  • mobile applications 1 response

Q9.f: Security tooling

↑ Back to question

Showing 2 variants consolidated into this answer (2 total responses)

  • Security related tooling, e.g., code analysis or a fuzzer 1 response
  • static analysis tools 1 response

Q9.g: None

↑ Back to question

Showing 1 variant consolidated into this answer (1 total responses)

  • None. No jobs 1 response

Q10: In which domains is the software you develop used?

Q10.a: Other

↑ Back to question

Showing 30 variants consolidated into this answer (27 total responses)

  • Infra management 1 response
  • IT 1 response
  • Transport 1 response
  • Public Safety and Public Transport 1 response
  • work: Web/Education ocaml: small personal projects 1 response
  • Business analytics 1 response
  • Petroleum 1 response
  • Non destructive testing 1 response
  • Energy 1 response
  • Engineering 1 response
  • Libraries 1 response
  • I don't know 1 response
  • software engineering 1 response
  • I work on the OCaml compiler and on Js_of_ocaml 1 response
  • I do tooling, so its everything that uses ocaml. 1 response
  • Bots for messengers 1 response
  • High performance computing 1 response
  • Sports 1 response
  • System modeling and simulation 1 response
  • Industry hw and systems sw 1 response
  • Programmers 1 response
  • Industry 1 response
  • Open Source 1 response
  • The software we develop is cross-domain 1 response
  • as for OCaml, localhost only 1 response
  • Software development tools (other than security) 1 response
  • chem eng @ fluid dynamics 1 response
  • Agriculture 1 response
  • There is no requirement the users of my software to report. Often I find about uses by pure accident. 1 response
  • - 1 response

Q10.b: Personal/hobby projects

↑ Back to question

Showing 7 variants consolidated into this answer (9 total responses)

  • Personal 3 responses
  • Myself 1 response
  • Personal/home 1 response
  • Hobby Projects 1 response
  • personal tools 1 response
  • Home/learning 1 response
  • it's personal projects for fun. 1 response

Q10.c: Not applicable/not used

↑ Back to question

Showing 3 variants consolidated into this answer (3 total responses)

  • Not yet, haven't finished the projects or are not currently used 1 response
  • It's not 1 response
  • not used 1 response

Q12: What is a pain point when learning the OCaml language?

↑ Back to question

Showing all 219 text responses

  • None 4 responses
  • build system 2 responses
  • +. *. for float operations
  • - The absence of automatic derivation of printers, equality, comparison etc. from simple types is puzzling. - The fact that top-level statements are evaluated in order, and compilation units are evaluated in the order of linking, is not obvious at first.
  • - The syntax; especially, let's and let-in's and ;;'s - opam and especially dune are hard to use
  • 1) Compiler errors. Too many places you get stuck. 2) The standard library is limited. 3) Simple things can be quite tedious....ie simply printing a value. 4) So many design _choices_ when you also have have type safety level axis to consider.
  • 1. Installing latest version of OCaml on Windows. 2. Very few good books.
  • ;; Setting up new projects
  • A good online introduction step by step.
  • A lack of docs and quality condition of libraries
  • Absence/underdevelopment of the "OCaml by example"-type manual.
  • All the non-caml-light parts. And the lack of generic prettyprinting. But really: opam! Industry partners have great difficulty installing it, both for technical and corporate policy reasons. There has to be a common stable version in all the distros etc.
  • At first sight is hard to see the real value of the programming language and the people are not used to something for real different like common languages like C, JAVA etc.
  • Boilerplate for printing
  • Coming from TS/JS, understanding the tooling and how it all works together
  • Compared to languages such as Rust: 1) compiler error messages are very uninformative 2) type inference often picks the wrong solution on partially correct code, leading to more of (1) 3) this field only allows 255 chars and my list is far from done.
  • Compilation of projects
  • Compiler errors assuming a pre-existing knowledge/mental-model of the compilation process
  • Confusion about the many stdlib replacements. Lwt backtracked don't work by default. Type system cannot enforce lack of FD leaks. Some libraries are completely undocumented, or lack a basic example on how to get started with it.
  • Debugging is very limited and cumbersome, especially for someone coming from C#/Java/JavaScript
  • Debugging with Printf, messing up with ";", "let in" and the stranges error messages of the compiler
  • Deciphering errors, often on the line preceding that reported.
  • Difficult to run a REPL with specific libraries.
  • Dispersion of standard libraries
  • Documentation
  • Documentation and libraries. I especially found it excessively difficult to print out data structures, something that I now realize I take for granted in all recent languages; even Rust can do this. Also, there's no gdb support.
  • Documentation, tooling
  • Dune and OPAM being separate
  • Dune and ppx are really confusing to get into. There should be more tutorials that walk you through common use cases from start to finish - every single LoC should be shown (eg ppx_derive.show vs ppx_show in dune file etc. was not clear)
  • Error message, documentation of certain tool too academic, need adequate cs knowledge to grasp certain feature and strange jargon such effect, etc
  • Error messages
  • Error messages (mostly related to typing errors) a bit obscure (for example in the case of recursive functions). And adding hints would be great.
  • Error messages aren't (often) help especially exceptions--they provide no contexts whatsoever
  • Everything is slightly broken and incomplete. Multiple standard libraries. Documentation is missing or incomplete. There are no existing working workflows to work with OCaml.
  • Few medium-level overviews of opam/dune
  • Find out how to solve problems with tools like opam or editor support.
  • Finding real world examples to learn from
  • For advanced features, the lack of "by example" tutorials where examples : - are big enough to understand the actual purpose of the feature from a practical point of view, - point out how hard/bad it would have been to implement it *without* the feature.
  • Functional programming paradigm
  • Functors, references
  • Generic printing
  • Getting my head around the tooling
  • Getting syntax wrong, especially those around match statements results in incredibly difficult to understand error messages
  • How set up tool chain, where's the nix bits?
  • How to set up the development environment
  • I couldn't find any comprehensive spec of OCaml for functional programmers to learn it quickly, i.e. not in the style of a book. I just wanted to know the syntax.
  • I do not think of one.
  • I don't remember any
  • I don’t remember
  • I learned Standard-ML first. With the knowledge of SML learning OCaml became easy and straightforward to me.
  • I think for most people who are first exposed to object-oriented languages, it is difficult to accept functional concepts at the beginning.
  • In my opinion, this is an uncomplicated language with no pain points and a smooth learning path.
  • In the beginning, I think a pain point was setting up the environment, makefile, etc.
  • Initially steep learning curve due to advanced type system might discourage newcomers. It is important for them to learn to stick with it until it becomes easier.
  • Installation
  • It is too good!
  • It was long ago, I don't remember
  • It was the small stdlib and then some missing libraries.
  • Its syntax
  • Just the FP aspect of it
  • LSP and general devolver tooling was hard to get down. I still don’t feel fully productive in ocaml because of the LSP short comings.
  • Lack of Windows support
  • Lack of books.
  • Lack of copy&paste example to reuse/extend, compared to what exists for e.g. nodeJS
  • Lack of documentation and the code bases to read to (well documented, maintained)
  • Lack of documentation for the libraries
  • Lack of documentations of Ecosystems
  • Lack of easy project-based practical examples.
  • Lack of examples
  • Lack of examples for most libraries. Having to derive how to use a library from tests and function names/types is fairly annoying. Especially if it heavily uses advanced concepts.
  • Lack of generic printing
  • Lack of good debugging for native executables
  • Lack of good documentation
  • Lack of information online
  • Lack of integrated deriving mechanism
  • Lack of maturity of libraries and breadth of libraries
  • Lack of production-ready libraries for servers with multicore support
  • Lack of resources for intermediate level questions
  • Lack of runtime introspection (see Ian Taylor's libbacktrace)
  • Lack of tutorials for more advanced topics such as contravariance
  • Lack of tutorials for people who are used to a batteries included language.
  • Lack of tutorials to use intermediate/advanced level of OCaml language (for instance how to use the typing system to improve the code robustness)
  • Lack of unified tooling; Multiple standard libraries; Lack of documentation for advanced featrues.
  • Lack web framework tooling.
  • Learning functional patterns coming from a data analytics backgound
  • Learning resources for beginners, bad tooling (at that time), examples and tutorials around the web mostly uses utop which in my opinion is not useful if we want to build a decent sized project
  • Learning to interpret error messages with complex signature mismatch (although this is a blessing when you know how to read them)
  • Library conflicts, trying to get for example inline tests to work.
  • Library support
  • Mainly a lack of well-documented easy-to-use libraries for key use-cases
  • Missing Windows support
  • Mixture of std libs, with batteries
  • Module type syntax
  • Modules and the building systems
  • Multiple standard libraries
  • Multiple ways to do the same thing, the Stdlib is quite barren
  • My education at the time was focused towards low-level programming languages, and OCaml is very different than that. But it's not a bad thing to be different from that.
  • My familiarity with imperative programming, such as C, makes the syntax of OCaml less intuitive initially.
  • My work machine is windows and my server is windows. why does the latest version of rust work flawlessly on windows while ocaml only wsl
  • Never know which language extension to choose next
  • No Unicode support for identifiers, operators, or anything really. I feel very limited by ASCII in 2023--especially trying to teach students using non-Latin scripts in their daily lives. 2-space indentation is difficult to read.
  • No complete and authoritative beginners' reference with all the language/tooling gotchas. RWO is traditionally recommended. it teaches vastly different idioms from Stdlib. Exercism relies on Base and directs learners to RWO, so it was confusing.
  • No great way to discover widely used packages/standards
  • Non "mainstream-like" syntax (mostly C-like) and lack of on-the-shelf tooling.
  • Non optimal tooling when I started using OCaml, would have been easier if the currently available tooling was already there.
  • Non-currified type constructors, non-overloading of operators
  • Non-informative syntax errors
  • None, I found it easy if I remember well (long time ago!)
  • Not having other ocaml programmers around me. I use online resources for learning any language, but I find not having functional programmers around me forces me to rely on the discourse forum.
  • Not knowing where the latest docs are
  • Not sure, but arcane opam/dune commands (that are not so well documented) can stop beginners from making progress (with no clear hint of why the tool is unhappy)
  • Nothing that I recall
  • Nothing, the language is awesome
  • OCaml's debugger is not handy as GDB. And it is very awful to insert pretty printer in some program points.
  • OCaml's treatment of "type variables" (that are actually meta variables) is very confusing for beginners
  • Opam / Dune distinction
  • Opam, utop markup in docs look overwhelming for beginners, windows
  • Operator underloading (+. operators etc.). Functors took me a while to understand.
  • Parameterized modules and types The programmer tendency not to provide explicit types for functions. Finding and using packages in the public Ocaml libraries.
  • Poor documentation
  • Poor libraries documentation without examples of usage
  • Poor official documentation
  • Poor windows support
  • Poor/confusing error messages
  • Project setup, building on anything other than a Linux box where the user can sudo
  • Reference documentation can be very terse
  • Searching stuff is hard. Sometimes things that should be easy feel hard, like reading a file. Or getting data from a DB.
  • Shadowing
  • So many let in
  • Starting a new project
  • Syntax that seems ambiguous or inconsistent at first.
  • Syntax. Reason syntax help newcomers, but it's not integrated (doesn't appear on any official docs). Also, currying. And piping with |> to the last argument (which goes against type inference, that flows left to right).
  • That "REAL WORLD OCAML" is so distant from the real world (unless you're at JaneStreet Capital)
  • The ambiguous syntax requiring ( and ) around conditional and case expressions.
  • The colleagues who don't want you to use it
  • The compiler errors are often quite cryptic/don't point to the actual place the error occured
  • The compiler output.
  • The convention of not writing function type signatures outside of module definitions
  • The different notation for integer multiplication and float multiplication.
  • The different paradigm as to what I was used to
  • The different paradigm from C/C++ and Python
  • The documentation is often confusing.
  • The existence of 2 standard libraries (the official one, and the one from Jane Street)
  • The fact that you don't know OCaml yet!
  • The fragmented ecosystem
  • The functionnal programation (I was used to OOP)
  • The lack of "intermediate" documentation for developers who are already fluent in other languages. Lacking an intuition of when to use refs, different data structures, streams, etc. Confusion over the standard library
  • The minimal stdlib
  • The module system
  • The role and interactions of the tooling (OPAM, Dune, etc)
  • The semicolon dichotomy between utop and files. No decent debugger (ocamlearlybird is a good start). Dune is not very beginner-friendly.
  • The shift to fp languages
  • The syntax (implicitly terminated constructions, identical "let" keyword in declarations and expressions, …)
  • The tooling (dune, opam) and dependencies are far too complex. That is, they have too many pieces.
  • The tooling is solid, but makes thr simple case more difficult than necessary (dune needs a full doc readthrough to be useful; opam switch workflow is verbose and not terribly well explained; compiler's messages are RIGHT but nit as helpful as rustc's)
  • The tooling. With rust projects, I can `cargo init`, then `cargo build` or `cargo run`, and I can `cargo install` dependencies that are managed in an easy-to-read TOML project file. I always have to google how to use library dependencies with OCaml.
  • The warnings/errors raised by the compiler are not very helpful to understand what is missing or from which point of the program a type was inferred.
  • There always has been a feeling of too hard to even know the answer to simple things and that the community and language is full of arcane ways of doing things. When I tried to learn more last time it was basically impossible to even start.
  • There is no way to "just print".
  • There is plenty of good learning material it’s just spread out a bit.
  • There's a lot of documentation but it's all very technical -- this is good but it'd be nice if there were some "dumbed-down" alternatives
  • Thinking in terms of recursion instead of iteration, but it wasn't that bad.
  • To feel alone, the difference of level with the other
  • Tooling (dune)
  • Tooling / waiting for builds, ecosystem in flux so not clear what tools to use
  • Tooling and dependency management. Both got dramatically better now.
  • Tooling compared to Rust for example
  • Tooling, how to install, double semicolon used in utop, but not in source code, function types (partial application returns a new function because of lambda calculus, but it is not obvious), no authoritative source, shifting to functional paradigm
  • Tooling, syntax
  • Tooling.
  • Tooling; language was easy, finding a good development feedback loop was hard
  • Toplevel let versus let-in
  • Type checker + Syntax (20 odd yrs ago)
  • Type error messages
  • Type inference is nice when it works, but maybe a style typing explicitly the functions could also be advocated to prevent typing error messages that are sometimes difficult to analyse.
  • Type matching and a somewhat smaller community
  • Unclear spread-out tooling, i.e., nothing like Go where a single tool ('go') handles everything.
  • Unhelpful syntax errors
  • Verbosity of module language
  • Windows environment
  • Windows support
  • [In 2017] Initial development environment setup, selection of tools
  • a nice IDE that is neither emacs nor vs code
  • accessibility of dune docs. terse documentation of many libraries. still relatively persistent belief in the community that types are almost sufficient as documentation
  • bad docs
  • best way to do things. downloading ocaml packages is slow
  • compiler error messages, build ecosystem
  • docs
  • documentation
  • dune
  • dune has a lot of unnecessary warnings and option flags enabled by default which makes it annoying to start new projects.
  • dune not finding my modules...
  • either short intro or full book, no complete tutorial
  • finding examples to compare what i'm doing and if doing in the right way, also the right ide to develop
  • foreign syntax compared to C-style languages, currying gotchas
  • heavy inference / non-declarative of types combined with no parens makes it hard to read at first.
  • i would love for there to be an equiv for hoogle
  • insufficient documentation
  • it is hard to learn OCaml alone, compiler error are confusing at first
  • lack of docs and well maintained package
  • modules
  • no interactive debugger
  • non unified tooling (yet)
  • none
  • none, I love ocaml from the beginning
  • not integrated with usual tooling
  • nothing specific
  • opam
  • opam: things get simpler when one understand that one does not have to use it
  • polymorphic variants
  • real world examples in web development
  • sometimes there is a lack of simple examples for a feature and people automatically present something super difficult/complex to show off the language, which isn't super beginner friendly
  • standard library (stdlib/base/core/containers???)
  • syntax
  • syntax quirks
  • syntax surprises, imperfect IDE support, Windows support, dune
  • the tools are too different from more mainstream languages
  • tooling
  • ugly concrete syntax

Q14: What topics or actions would you like the OCSF to work on?

Q14.a: Other

↑ Back to question

Showing 13 variants consolidated into this answer (13 total responses)

  • Support WASM / web support in particular 1 response
  • See http://refpersys.org/ and https://github.com/RefPerSys/RefPerSys/ 1 response
  • The on-ramp to the Ocaml language is sadly quite poor. I am someone strongly inclined to like Ocaml, and have tried several times over the past couple decades to get into it, but each time I bounce off. It's not the language that's hard, it's the tools, libraries, and documentation. 1 response
  • Designate an official and actual leader of the community. Could be an elected position if the benevolent-dictator-for-life model doesn't work. 1 response
  • Promote its own roadmap and do not let companies like Tarides or Jane Street imposing their vision on e.g. the OCaml Platform or prevent them to add useless things like analytics to the website. 1 response
  • No particular opinion 1 response
  • Make OCaml ecosystem stand up to that python and rust have. 1 response
  • Get out of the blockchain game 1 response
  • more stuff for hobbyists 1 response
  • hire me 1 response
  • expand scope of ocaml to machine learning 1 response
  • Documentation 1 response
  • Documentation, and good documentation, feels crucial 1 response

Q15: Where do you interact with other members of the OCaml community?

Q15.a: Telegram

↑ Back to question

Showing 6 variants consolidated into this answer (10 total responses)

  • telegram 4 responses
  • Telegram 2 responses
  • University, books, functional programming groups in telegram 1 response
  • Telegram chat 1 response
  • telegram chats 1 response
  • QQ, Telegram 1 response

Q15.b: Other

↑ Back to question

Showing 9 variants consolidated into this answer (9 total responses)

  • I don't 1 response
  • StackOverflow 1 response
  • XMPP 1 response
  • my personal website 1 response
  • https://discuss.tchncs.de/c/ocaml 1 response
  • tezos-dev Slack 1 response
  • Twitch 1 response
  • - 1 response
  • Cohost 1 response

Q15.c: Zulip

↑ Back to question

Showing 2 variants consolidated into this answer (7 total responses)

  • Zulip 6 responses
  • The Zulip at https://caml.zulipchat.com 1 response

Q15.d: In person/at work

↑ Back to question

Showing 4 variants consolidated into this answer (4 total responses)

  • with OCaml users at my place 1 response
  • IRL, at work & with friends 1 response
  • work/real life 1 response
  • At work 1 response

Q16: Which of the following topics would you like to see more content about?

Q16.a: Other

↑ Back to question

Showing 14 variants consolidated into this answer (14 total responses)

  • All of the above. One way to help would be to provide guidance and templates on how to painlessly publish an OCaml project, especially for everything else than the bare-bone OCaml implementation. 1 response
  • Discussion about the future development of the language 1 response
  • No opinion 1 response
  • Theory (type, monad, etc) 1 response
  • Mirage, Interop with Coq or F*, effect system, how to contribute to compiler 1 response
  • Some tutorials on the applicability and pitfalls for advanced features like GADTs, existential types, etc. might be helpful 1 response
  • Design patterns, eli5 explanations of language features that are less used / considered "advanced" 1 response
  • Compiler back end 1 response
  • topics around formal proof 1 response
  • Advanced language features 1 response
  • Compilers 1 response
  • Examples of how to use language features. The documentation rarely contains examples of how things are used. 1 response
  • No single thing - all could be better - though beginner material seems in good shape 1 response
  • Effective architecture and domain modeling in ocaml 1 response

Q19: In the past year, which plateform did you use to write OCaml code?

Q19.a: Other

↑ Back to question

Showing 6 variants consolidated into this answer (6 total responses)

  • Linux embbed in a chromebook 1 response
  • I used to use Arch, btw 1 response
  • illumos 1 response
  • WSL 1 response
  • Android 1 response
  • Windows (WSL2) 1 response

Q20: In the past year, which platform(s) did you target?

Q20.a: Web/Browser

↑ Back to question

Showing 10 variants consolidated into this answer (16 total responses)

  • Web 6 responses
  • web 2 responses
  • JavaScript 1 response
  • web broswers 1 response
  • web (with js_of_ocaml) 1 response
  • Browser 1 response
  • browser 1 response
  • Our OCaml code is translated to JavaScript and used in the web 1 response
  • Browser (javascript) 1 response
  • Cloudflare Worker 1 response

Q20.b: Unikernels

↑ Back to question

Showing 4 variants consolidated into this answer (5 total responses)

  • unikernels 2 responses
  • Unikernel, Cosmopolitan 1 response
  • MirageOS 1 response
  • Would like to see a barebones version of mirageos 1 response

Q20.c: Other

↑ Back to question

Showing 5 variants consolidated into this answer (5 total responses)

  • Web, Android and iOS via JSOO 1 response
  • still trying to target Windows, but still fail 1 response
  • FPGA 1 response
  • illumos 1 response
  • Actually I am at the code that is truly cross-platform, and it mainly is. 1 response

Q21: Which of these language implementations are you currently using?

Q21.a: Other

↑ Back to question

Showing 4 variants consolidated into this answer (4 total responses)

  • C++ and http://refpersys.org/ 1 response
  • The Wasocaml compiler 1 response
  • We are using OCaml and js_of_ocaml, but I don't know if there is a pack "OCaml with js_of_ocaml" 1 response
  • Brr 1 response

Q21.b: ReScript

↑ Back to question

Showing 3 variants consolidated into this answer (3 total responses)

  • ReScript 1 response
  • rescript 1 response
  • Rescript 1 response

Q24: Which installation methods do you use, for your development environment?

Q24.a: Other

↑ Back to question

Showing 8 variants consolidated into this answer (8 total responses)

  • guix 1 response
  • whatever-the-heck is the current giant ball of mud that is used for OCaml's toolchain 1 response
  • Git submodules 1 response
  • dune 1 response
  • opam-nix 1 response
  • Guix packages 1 response
  • See http://refpersys.org/ 1 response
  • some vendored libraries, via dune (no need to install them) 1 response

Q26: Once you test your code base to the new OCaml version, what is painful and requires adapting your project?

Q26.a: Other

↑ Back to question

Showing 29 variants consolidated into this answer (29 total responses)

  • Stdlib changes 1 response
  • Waiting for external dependencies to update 1 response
  • We did not upgrade to a new version of OCaml for long time 1 response
  • Waiting for 3rd party libraries 1 response
  • Since OCaml 5: performances 1 response
  • Nothing terribly difficult, but there is churn 1 response
  • I've honestly only used 5.0 and 5.1, and don't want to skew results here 1 response
  • Changes of the AST 1 response
  • less true now, but in the past: tooling not up-to-date yet (merlin) 1 response
  • ocaml-lsp bugs on osx :( 1 response
  • Never did that yet 1 response
  • Ppxlib.. 1 response
  • Differences in garbage collection performance (specific to 5.0/5.1) 1 response
  • Changes that can affect performance (like the GC compaction regression in 5.x) 1 response
  • it's now too difficult to access github: need a smartphone (I don't have one) 1 response
  • For my fork of OCaml, internal changes take time to check. For other projects, it is smooth every time. 1 response
  • Loss of efficiency / more memory consumption 1 response
  • N/A 1 response
  • Some libraries like Facile just don't exist in newer versions of OCaml 1 response
  • Never done this 1 response
  • It's very smooth since I got rid of camlp4 and ppx 1 response
  • Other contributors do it, I have never. 1 response
  • Not concerned 1 response
  • It's usually smooth. The number of issues increases with project size. 1 response
  • n 1 response
  • Editor support seems to lag or requires a re-install 1 response
  • We don't use opam, we use an internal package manager (dpkg-based) for both external and internal OCaml packages, and version upgrades are still manual, so a new OCaml version can be problematic if external packages drop support and need to be upgraded. 1 response
  • I never code with borderline features so compiler changes are mostly smooth (but not each time though). 1 response
  • I do not do it myself, so I don't know how painful it is 1 response

Q28: Which build tools do you use, in your current projects?

Q28.a: Other

↑ Back to question

Showing 11 variants consolidated into this answer (11 total responses)

  • OCamlMakefile 1 response
  • guix 1 response
  • my own front-end to ocaml-makefile adding dune-like features 1 response
  • nix 1 response
  • Nix flakes 1 response
  • For my Compiler class, I wrote my own build tool 1 response
  • A shell script that runs the compiler directly to recompile everything. 1 response
  • b0 1 response
  • Mostly dune for convenience but this tool is awful. 1 response
  • ocamlfind 1 response
  • drom 1 response

Q29: What kind of preprocessors do you use, in your current projects?

Q29.a: Other

↑ Back to question

Showing 10 variants consolidated into this answer (10 total responses)

  • custom 1 response
  • Ocamllex, Menhir, ATD, project-specific code generators written in OCaml 1 response
  • Code generation with custom dune targets 1 response
  • They are all horrible 1 response
  • http://refpersys.org/ 1 response
  • Jane street ppx and base 1 response
  • custom ocamlc -pp commands 1 response
  • Custom preprocessor 1 response
  • Custom preprocessor. 1 response
  • I've intentionally moved away from all ppx use due to brittleness in the development experience. 1 response

Q30: Which editors do you use, in your current projects?

Q30.a: Helix

↑ Back to question

Showing 3 variants consolidated into this answer (7 total responses)

  • Helix 3 responses
  • helix 3 responses
  • helix (helix-editor.com) 1 response

Q30.b: Other

↑ Back to question

Showing 7 variants consolidated into this answer (7 total responses)

  • Rider with Reason plugin 1 response
  • ocamleditor . Maybe Gnome-builder soon 1 response
  • KATE Editor 1 response
  • but I would like to use IntelliJ if better supported 1 response
  • Kate 1 response
  • I use Emacs, but it is a very heavily modified Emacs, with completely different bindings, and many different modes 1 response
  • Pycharm for Python 1 response

Q32: Which tools do you use to test OCaml code, in your current projects?

Q32.a: Other

↑ Back to question

Showing 22 variants consolidated into this answer (22 total responses)

  • System integration testing using cram-like tests (either custom made or using dune cram tests) 1 response
  • regression tests 1 response
  • nothing 1 response
  • Haven’t done to much test yet 1 response
  • I live dangerously 1 response
  • REPL 1 response
  • cram 1 response
  • Mostly Tezt that is a nice Swiss army knife 1 response
  • Cram tests 1 response
  • manual or selenium 1 response
  • Jest (obviously after compiling to JS) 1 response
  • ThreadSanitizer 1 response
  • See http://refpersys.org/ 1 response
  • Alcotest! 1 response
  • Integration tests with Tezt 1 response
  • custom one, and sometimes I just test with examples 1 response
  • Dune cram tests 1 response
  • Tester c'est douter :-) 1 response
  • our own non-regression test tool 1 response
  • Cram tests. Also note that AFL/Crowbar is a greybox fuzzing tool, not a whitebox one. 1 response
  • External tests infrastructure 1 response
  • Assert 1 response

Q33: Which tools do you use to benchmark OCaml code, in your current projects?

Q33.a: Other

↑ Back to question

Showing 22 variants consolidated into this answer (24 total responses)

  • N/A 2 responses
  • current-bench 2 responses
  • nothing 1 response
  • Criterion (yes, Haskell) + lsp-test (yes, Haskell too) 1 response
  • Na 1 response
  • developer choice paralysis.... 1 response
  • I haven't, yet 1 response
  • only rust developers need to benchmark hello worlds to make it blazig fast 1 response
  • None 1 response
  • apm 1 response
  • ocurrent-bench 1 response
  • None of those 1 response
  • Sys.time/Unix.gettimeofday/mirage-time ... very crude 1 response
  • I never benchmarked them 1 response
  • trace, tracy, in general manual instrumentation based tracing tools 1 response
  • we don't use these. 1 response
  • n/a 1 response
  • Bechamel 1 response
  • never did 1 response
  • I rarely do this. 1 response
  • none 1 response
  • Never done that 1 response

Q34: How do you deploy OCaml applications?

Q34.a: Other

↑ Back to question

Showing 21 variants consolidated into this answer (21 total responses)

  • JS (via Node) 1 response
  • As esy packages. 1 response
  • guix 1 response
  • MirageOS unikernels 1 response
  • Linux VirtualBox Vm to be run on Windows 1 response
  • I don't 1 response
  • Github release tags 1 response
  • a python wheel which is pip-installable 1 response
  • I believe it should be spelled opam. 1 response
  • (b) using distribution packages (by hosting a binary package repository) 1 response
  • symbolic link in my PATH 1 response
  • As files in a file system. 1 response
  • N/A 1 response
  • wrangler cloudflare 1 response
  • REPL driven development 1 response
  • Via Guix 1 response
  • With 0install 1 response
  • (a) as virtual machines (MirageOS unikernels) 1 response
  • Not my job for the collaborative projects I'm collaborating to, source code otherwise 1 response
  • Homebrew and Pip for now, not sure about NPM, and hopefully all of the package managers in the future when we can afford it regardless of the programming language they were designed for 1 response
  • Never done that 1 response

Q35: If you deploy on the web, what platform(s) are you using?

Q35.a: Other

↑ Back to question

Showing 18 variants consolidated into this answer (21 total responses)

  • N/A 2 responses
  • (k8s as a platform) 1 response
  • client-side only web applications 1 response
  • cloudflare workers 1 response
  • Vercel 1 response
  • Not my job for the projects I'm collaborating to 1 response
  • Vercel, Netlify 1 response
  • Static site on Github Pages 1 response
  • Vultr 1 response
  • digital ocean, github pages 1 response
  • Never done 1 response
  • Railway 1 response
  • fly 1 response
  • cant remember, prob AWS 1 response
  • Fly.io 1 response
  • n 1 response
  • Clever Cloud 1 response
  • none 1 response

Q40: What would you change?

↑ Back to question

Showing all 179 text responses

  • - Make Reason a first-class citizen in the OCaml ecosystem, support its maintenance, integrate in official docs - Opam lock files (like npm or esy) - Allow using markdown instead of ocamldoc
  • 1) Dune + opam in one tool (likely dune) 2) Better/simpler integration of test frameworks such as Tezt with dune 3) The default linker used by `dune` is very slow
  • A bit of verbose syntax choices here and there, painful project setup, missing features (e.g. type classes)
  • A more modern package management + much more discoverability of functionality in dune
  • A more unified platform with a single entry point. I am optimistic about the current plans to have dune serve this purpose.
  • A single tool like Rust's Cargo would be less confusing.
  • A standardised single tool for each task, at least for newcomers.
  • Add Eliom support in Merlin
  • Add ability to add opam packages from the dune CLI, reduce number of places dependencies need to be listed
  • Add more documentation and tutorials
  • Add more tutorials to understand the need for OCaml and how to learn quickly Ocaml
  • Add per-project dependency management
  • Ambiguous grammar requiring ( and ).
  • As an emacs user, the fact that a lot of OCaml tools don't follow emacs guideline. I had a problem with auto-completion where I was told that I needed to add a prefix and a delay for it to work while it works perfectly without that for other languages
  • Being able to show all references (to functions, variables, etc), not only in the same file but project-wide, would be amazing
  • Better Dune docs would go a long way -- especially for projects that involve complex build processes.
  • Better Dune documentation. Stronger commitment to an ecosystem-wide versioning policy (like the Rust ecosystem advice around using SemVer), including clearer documentation/advice about when to bump version number components.
  • Better LSP support. It’s very difficult to navigate unfamiliar or large projects.
  • Better compiler output format and information
  • Better debugger support. "Virtual environment-like" opam switches?
  • Better debugging tools, get a pretty printer that works (aka deal with type erasure), develop documentation similar to Elixir (i.e. hexdocs) or Python.
  • Better documentation on how to set up your first project. Something like this: https://hirrolot.github.io/posts/compiler-development-rust-or-ocaml.html#appendix-getting-started-with-ocaml
  • Better dune documentation. I know there are a lot of work going on, but it's still very hard to get what I want.
  • Better dune init, better documentation, don't need to juggle dune and opam
  • Better indentation with VSCode, and snippet to prevent autocompleting `in` with `in_channel`.
  • Better integration with VsCode and more extensions for it
  • Better static linking, and better integration with nix
  • Book with exemple to develop an application
  • Clearer and unified intro into the language.
  • Clearer docs on ocaml.org for Dune, tighter integration between Dune and Opam. The ability to write Dune files with json, yaml, or toml.
  • Debugging
  • Debugging integration
  • Documentation is sparse in terms of examples: figuring out things like how to get dune to do what I want is often impossible to figure out from the surprisingly extensive yet uninformative docs, and I instead rely on finding examples or SO answers.
  • Documentation on how to set up new projects, to make it easier.
  • Dune + ocamlformat = at least 4 files just for basic programming!
  • Dune as a cargo like experience
  • Dune docs are slightly confusing
  • Dune documentation
  • Dune documentation Increase Stdlib features
  • Dune is pretty complicated while trying to duplicate the opam files & such?
  • Dune is pretty much the only one I use so IDK
  • Dune is too opinionated and it makes easy things easy and hard things impossible (e.g. when mixing different programming languages or porting previous code)
  • Dune isn't very beginner-friendly
  • Dune needs sane defaults (e.g. warnings) and editor support.
  • Dune should have a more beginner friendly web page.
  • Dune sometimes feels silly that I need to specify dependencies in the dune-project and then again in each dune file
  • First class support for local switches (no need to re-eval), ability to run individual tests.
  • Go all in making sure the main site is rhe only resource one should need to learn and get all necessary answers for learning and be productive in the language. I'm still scared about understanding the different preludes that exist.
  • Have a deriving mechanism
  • Have a working debugger with vscode
  • Have binary to do one thing (like in python), make support of editors better (should work out of the box), don't force lsp with dune but make them separate, wish using ocamlbuild was easier (_tags file and less noise output, only one error currently)
  • Have some "standard" debugging/logging/benchmarking selected for newcomers to begin with
  • How to start new projects
  • I don't know
  • I had a lot of issues with static binaries missing libraries, opam/dune generating errors with ppx preprocessors. I would love if adding preprocessors was smoother.
  • I think the direction of dune doing everything is the right one. Our competitors offer ease of use, and if we want to win over programmers, we require ease of use as well.
  • I want more OCaml libraries that uses OCaml Multicore
  • I would add an easy way to pin the dependency version
  • I would like the foundation to take the lead for any political decision and not let companies like Jane Street/Tarides impose their vision.
  • I would like to change the format of the dune file to something like YAML or TOML if possible
  • I would like to see unification between dune and opam (a cargo like experience, yeah, it is not very original)
  • I'd replace opam with guix
  • Idealy get docker image with pre-installed library
  • Improve Dune documenation
  • Improve Windows support, Enrich Desktop Gui solutions
  • Improve documentation, add more examples + monorepo + clear hierarchy of tools
  • Include concrete examples in the documentation, and make it less dune-centric so users can grasp and customize build processes for OCaml projects
  • Installation story on Windows
  • Integrate the build system with the one installing/publishing packages. There can/must be escape hatches but a blessed single tool should be promoted.
  • Is there an OCaml debugger ?
  • It should be more like Cargo. S-expressions are OK though. There needs to be a Hoogle-equivalent.
  • It would be great to have something like cargo to build and handle packages.
  • Leadership. So that all the missing things are taken care of and not dismissed because the surviving* community members don't need them. *as in "survivorship bias"
  • Less "you should use dune" for beginners (in docs, tutorials and discuss)
  • Less promotion of opam
  • Lisp expression for dune file is a bold choice I wouldn’t necessarily push today.
  • Make Dune configuration easier.
  • Make Dune feel like a tool, not a magic wand
  • Make a unified tool to replace dune and opam
  • Make dune the dependency management tool
  • Make it more convenient to use Makefiles and other universal build tools.
  • Make lsp work better. dune can't run in batch mode and be used to run tests at the time as dune locks the project.
  • Make sure the tools work without much effort. Unify the different tools.
  • Make the relationship between Dune and OPAM less confusing.
  • Merge Dune and OPAM
  • Merge Opam (the tool) and Dune
  • More community promotion and use in industry
  • More concise resources on opam+dune workflow and package management
  • More documentation and more examples
  • More documentations
  • More dune tutorials
  • More libraries, syntax could be closer to C style languages
  • More unified tooling, less friction to publish on OPAM, better support for profiling
  • Need more documentation, guides, more active community
  • Nothing
  • Nothing specifically comes to mind
  • Nothing, but more beginner friendly tutorial and that show OCaml is not only an academic langage. More documentation and tutorial on how to use libraries
  • OCaml Platform roadmap is a good start
  • OCaml evolutions should be guided by prized contests with a clear quality/usage improvement objectives.
  • ONE tool. Optimize for the 95% case of "I want to build a library or executable with these third-party dependencies", and make the 5% case of "I have some weird bespoke compilation setup" the second-class citizen instead of the other way around.
  • Officially deprecate the tools that are already deprecated de-facto.
  • Only a few things are similar to what exist in other ecosystems.
  • Opam
  • Opam and Dune both have some things that are unintuitive, and don't compose very nicely.
  • Opam and dune
  • Opam and dune should be more unified. Better integration of opam monorepo. Slow GitHub Action that takes up a lot of space and rebuilds too many things from scratch.
  • Opam is not great at all. I would also like to be able to link against two different versions of a library (for example, if two of my immediate deps depend on a different version).
  • Out-of-the-box support for cross compilation
  • Plenty of things, but I think tooling is confusing by nature, its a lot of work to make it nice.
  • Probably just better documentation.
  • Probably listen to beginers need ; I am quite fine personally
  • Project templates would be a good idea.
  • Provide a deb repository with current versions of opam, dune, merlin, etc.
  • Provide any labor force within our capabilities
  • Provide resources to bootstrap, maybe something similar to the LISP cook book https://lispcookbook.github.io/cl-cookbook/ to show how to do common tasks
  • Rationalize Dune, it's very confusing to do many things
  • Really wish compiler errors were better
  • Redownloading packages for new opam switches.
  • Relationship between OPAM and Dune is confusing to beginners
  • See http://refpersys.org/ and add libbacktrace features to Ocaml
  • Setting up Dune as a beginner is a bit confusing, LSP server has some bugs and doesn't support certain actions (like, workspace symbol search).
  • Simple native Windows executable (even WSL might be complex to be used in industry)
  • Simpler out-of-the-box workflow
  • Single tool for building and packing
  • Some binaries are poorly documented
  • Some sort of setup wizard (see nextjs and astro.build). Automatic updates of opam file when library installed from opam.
  • Standardize build and package management. Dune and opam are terrible.
  • Support Windows natively instead of cygwin, i.e. trying to turn it into Linux
  • Take a step back, and make the 90% most common tasks not just easier, but trivial
  • Teach ppx derivers early, showcase ppx_expect, document a development loop
  • The `dune init proj` project structure is too complex, I never know where to put what. That particular structure also does not seem to be popular on GitHub projects. A good video tutorial on how to get started with projects would be great.
  • The available tutorials are good, but they are mostly documentation or blog-post esque walkthroughs. Seeing someone use OCaml tooling to build a simple project with some dependencies, multiple files, pps etc. while explaining their reasoning would be rad
  • The developers of OCaml tools have a high expectation of skills/knowledge of their users. Their documentation and the language they speak to users can be hard to get started with and to follow.
  • The dune and OPAM documentation needs to be updated
  • The just published roadmap seems about right.
  • The main issue is "too many names" - (a) opam package name (b) ocamlfind names (c) module names -- this is hugely confusing (and I've no clue why https://github.com/ocaml/RFCs/pull/17 doesn't get adaption)
  • The perception that OCaml is more confusing to newcomers than other languages. It's natural for newcomers to anything to be confused.
  • The tooling is well documented, but feels academic. More basic tutorials and adherance to principal of least surprise.
  • There are many ways to document OCaml projects. For instance mli files can be disregarded because they can be generated from ml files, while I consider them as the main place to document a program. Documentation-finding (or -enforcing) tooling could help.
  • There are too many pieces. A simple `ocaml --build` in a project root should build the entire project without any configuration, fetching dependencies as needed. Using and configuring opam switches and dune build environment is too much.
  • There has been dramatic improvement since 2017, especially jbuilder/dune. But I am currently contemplating migration to Buck2 due to lacking polyglot integration facilities with non-OCaml code.
  • There is some redundancy between dune (which did greatly improve the ecosystem) and opam which I'd like to get rid of
  • There needs to be a better way to debug programs than printing and dune utop
  • Tooling and documentation.
  • Tools should generate web pages containing OCaml code with inferred types visible via mouse hover tooltips.
  • Unification and official tooling (like Rust)
  • Unification of tooling, and more documentation for dune for newcomers.
  • Until recently `opam` was a complete minefield and almost any time I ran any command at all I would end up my entire switch. This has improved but the traumatic memories remain. Also, this field is limited to 255 characters but I only just got started..
  • User surveys. Development seems very much in the right way. But we only do "what does cargo do", instead of watching a friend/colleague/peer trying things out.
  • Windows support and easy up and running
  • better documentation and tutorial step like go or svelte in their language introduction
  • better support for windows
  • cargo or npm like tooling experience. opam switch and stuff like that is confusing
  • development environment
  • doc of Dune for getting started
  • dune in particular is confusing and poorly documented, I wish there was a tool with a similar functionality that does not hide so much stuff from you, does not use a bespoke configuration format and does not force so much bureaucracy on you
  • dune is good for the basic use-cases but anything slightly out of the ordinary (e.g., process some markdown files which depend on some OCaml files) causes the complexity to spike. I'd probably try to add support for more generic build rules.
  • dune: single point of entry.
  • focus on dune as the one single tool to do everything (I think the new roadmap goes in the right direction mostly). Opam is confusing, sometimes slow, and far too stateful. I want lockfiles and per-directory state at most.
  • generally, declutter and clean up the language
  • have opam lock files for every project. downloading entire tool chain for every project is a nightmare
  • https://github.com/ocaml/RFCs/blob/master/rfcs/ocamlib.md
  • https://github.com/ocaml/dune/issues/9209
  • initial env variable / opam switch setup might be confusing to newcomers
  • introduce a build system that looks native, like in SML
  • less redundancy between dune and opam specs, simplify all the edge cases related to opam pin
  • make it easier to print custom data types
  • more documentation and examples of how to use dune, opam to build a small project with some source code and tests
  • more plug and play setup experience like ReScript, make dune like cargo
  • no more .exe in dune executables, binary left in current directory by default (for beginners)
  • ocaml documentation for beginners
  • ocamldebug tends to be slower; I still observe ocamldebug segfaults (e.g. when printing non-evaluated lazy values); debugging of plugins however improved
  • opam should be able to use shared package repository (a la Nix or cabal) to prevent bandwidth and storage waste caused by same package versions not being shared among different local projects
  • the base for the code community is github which became difficult too access (need a smartphone)
  • the belief that types suffice for documentation library docs need to be written like Python's. full of examples
  • the opam/dune split and confusing slow work flow around opam and opam switches are confusing
  • unified and up-to-date getting started
  • unify opam & dune, include many sane defaults for those who don't need the flexibility, rules based on patterns for dune (like make's rules)
  • update tutorial

Q42: What would you change?

↑ Back to question

Showing all 78 text responses

  • I think opam has not learned from the security problems and incidents of larger repositories and has escaped incidents of its own simply by being too obscure to be a popular target. 2 responses
  • As a user it's great, but it seems to require too much human energy to maintain
  • Being able to C/C repo with Opam Switches
  • Better handling of breaking changes
  • Blessed packages. More domains covered.
  • Compiling from source code consumes a lot of time and machine resources
  • Docs, support
  • Documentation is often kept to a low level in our community. I understand why and I don't blame anyone, but I notice how difficult it can be to use a new library. Something on the line of documentation.divio.com could help.
  • Documentation isn't always rendered on ocaml.org. Very few opam packages are actually available in Fedora/Debian, see what Go does with importing packaged with a Lua macro in specfiles.
  • Don't rely on GitHub as much
  • Ease to package/distribute binaries
  • Encourage tools that support multiple package repositories: make opam less centered around one single public repository, but use on-demand domain-specific ones (possibly managed by distinct communities — for some the publication process could be simpler).
  • Encouraging the community to work together in writing more packages.
  • For a casual developer, creating packages is troublesome (xxx-release tools are too brittle). Using opam packages is a problem because that updated package dependencies always break the build. I'd need a DOCUMENTED EASY way to create locked packages.
  • Get rid of the Lwt/Async split and avoid creating a new Eio/something else one
  • I am fine with basic usage of opam but advanced usage may need to be explained more clearly : why would is it useful being the first question.
  • I am less and less sure that Opam should continue to keep all old versions of packages since a lot of them are in fact broken at some point. This is not a big problem but could save time.
  • I find the integration of documentation with the package repositories to be lacking.
  • I have a hard time seeing how the current repository maintenance method can scale. We need automation on everything, with minimal human intervention. Right now, people are getting burnt out doing the jobs of machines.
  • I prefer using the distribution's package manager rather than language-specific package repositories
  • I think more authentication libraries would be good. Overall though the web ecosystem is suprisingly strong now with Dream! I am very impressed.
  • I want more OCaml libraries that uses OCaml Multicore
  • I would like the opam repository to be handled only by people paid by the foundation.
  • I would like to introduce a “strict mode” of OPAM that forces package developers to use semver and creates lock files by default
  • I'd replace opam with guix
  • It is very hard to find anything and documentation is most of the time missing. And when there is documentation is usually generated from code making it useless for learning about the package.
  • It's getting slow -- it is always increasing, which does not scale and puts lots of resources on the solver. I'd welcome very much any work to remove packages (that are not relevant) from the repository, or have a "expiry" date on each package.
  • It;s difficult finding packages from their descriptions.
  • Make OPAM update faster.
  • Make all libraries work with both Async and Lwt.
  • Maybe something like https://github.com/tarides/dune-release should be integrated inside opam.
  • Missing review of the code, automated vulnerability detection, package reputation score.
  • Module names sometimes do not match opam package naming. Make an index (like sherlocode?)
  • More contributors to nixpkgs
  • More libraries, better documentation.
  • More mature libraries in the web space
  • N/A
  • Not sure what this question is about. Here's are major resource-consuming problems we spend a lot of energy on so can test and distribute binaries: lack of cross-compilation, slowness of building project dependencies from source.
  • Nothing
  • Opam is now standard while Dune is becoming standard, yet only for the OCaml community. More generally, installing an OCaml application with dependencies for a non-OCaml user (e.g., a sysadmin) is a pain and, sometimes, just a no-go for deploying a tool.
  • Opam is too slow
  • Opam should take inspiration from `Crates.io`. For example, having the readme on the frontpage is nice. Also the ergonomy of `crates.io` feels better to me.
  • Opam, the way packages need to be installed is confusing.
  • Package removal & ease publication process (may take some du to human validation & no so much people behind, ci issues, etc.)
  • Package signing, a plan for explosion of packages and versions
  • Packages should have associated tags, indicating not only their category (e.g. "parsing", "numerical computing") but also their status (e.g. "legacy", "actively developed", etc).
  • Propose pre-built versions of central libraries or tools (compiler, base, coq, coq-stdlib...)
  • Publishing takes too long
  • Quality of Standard Library.
  • Reduce the supported compiler versions, have stable curated releases of compatible packages
  • Relocatable compiler allowing less duplication across OPAM switches.
  • Small ecosystem means few packages (and bad developer tooling means small ecosystem)
  • Small packages that fulfill some niche / more maintained bindings to C libs.
  • Somehow improve opam depext to allow constraints on external dependency versions
  • Standard Priority Queue
  • There is a lack of well documented libraries compared to more popular languages. I'm not sure this can be fixed without wider adoption.
  • Throw out opam and restart from first principles. Opam is slow, too centralized, and too much code. In my project, I should be able to say module Foo is "example.com/foo.git@1.0.1" and Bar is "example.org/projects/bar@master"
  • Trying to keep alive old unmaintained stuff is heresy. There should be a canonical repository with quality-checked packages and contribs with the actual repository. In both case, we should be able to forget dead packages to encourage OCaml liveness.
  • Use infrastructure which does not depend on Github or other services owned by Microsoft / Google / Apple / Meta.
  • Windows support for opam
  • Wish to have more. Standard library is a mess. Documentation could benefit from examples.
  • Would make it easier to create and add private opam repositories.
  • an opam switch should very often be recompiled because of "upstream changes" in opam-repository
  • better stability. No sha or tgz changing or disappearing
  • create a pulse/deprecation mechanism in the repos
  • hackage analog. Also Cargo-class package handling is desired.
  • it's sometimes very slow to release on opam-repo because of the high quality checks. I understand why it's done but it can be frustrating.
  • merge the windows and unix opam repositories
  • more options on depopts
  • more packages for web use
  • n/a
  • no way to plug in standard industry level tools (SBOM formats, etc.)
  • nothing
  • opam is pretty greedy in terms of cpu time and disk place, there is room for improvement here
  • opam itself seems to work fine, but I've only used it in basic ways
  • requires too much space, and opam grew with too many deps, and is hosted on github which became difficult to access
  • speed (opam updates take ages)
  • speed of updating / upgrading in opam

Q44: If you are not satisfied, which libraries are missing?

↑ Back to question

Showing all 71 text responses

  • Web stuff, terminal user interfaces, data format interchanges, fancy data structures of various shapes 2 responses
  • 1) A standard way to manipulate slices (not directly Bytes.t but subpart of it) 2) A convenient P2P library (probably inspired by lib-p2p) 3) A standard library implementing cryptographic interfaces in a common way (currently this is split into multiple libraries with different undocumented interfaces sometimes). 4) Good drawing library such as manim
  • 15 years ago students complained they don't have bindings for their game project for thiers studies, but I made bindings for SFML, Allegro, SDL2, and others, and 15 years later there is no projects made with it, this is disapointing
  • A better SQL API (probably a DSL on top of Caqti)
  • A lot of small things often miss: A convenient diff library, a web-midi library, one recommended configuration management library, good audio processing libraries etc. Just things that someone would quickly develop and publish if OCaml was widely used.
  • A more definitive standard for an HTTP Client
  • A standard library that does the things most people would expect. I'm asking for official recommendations of what libraries and tools are endorsed by the OCaml leadership, or what they need to get there. Whoever contributes to them is a separate issue.
  • AI, LLM langchain, good web framework that supports eio.
  • All libraries not available on windows
  • Cloud SDKs
  • Cloud services like AWS SDKs
  • Coming from the TS/Js world it is sometimes harder to find libraries, or figure out which is the "best" or "blessed" package to use.
  • Core stuff like db drivers etc.
  • Datascience/plotting. Probabilistic programming, discrete event simulation
  • Easy to use TUI libraries
  • FreeType, Harfbuff, OpenGL, OpenAL
  • GUI, signal processing, concurrency-enabled web development using effects. Regarding the first two, libraries exist but are hobbyist projects of disputable quality.
  • Gui toolkits, less libraries that only work with lwt or the Jane street async library
  • HTTP/3 client/server. Working gRPC.
  • I don't have enough experience with OCaml, but for my pet project i couldn't find a good string fuzzy matching library.
  • I have some concerns around maturity (e.g., EIO); some difficulty finding libraries which support certain networking features, e.g., mTLS.
  • I miss a library for ONNX
  • I would love to have more OAuth2 related libraries
  • I would prefer Haskell’s approach to a standard library. Instead of Ocaml’s very limited standard library and multiple alternatives (Jane street etc)
  • I've yet to find a good DB managment library and a nice web framework.
  • IO is a just a huge mess. EIO looks huge as well.
  • Industrial needed RFC compliant stuff. Well documented and USER FRIENDLY libraries.
  • It is not so much that things are missing, rather that some libraries that are available look not very well maintained, and when there are several it is hard to know which to pick. For instance, if I want a JSON library, I tend to stick to Yojson, but it is hard to know if this is the best choice. Similarly for unicode support.
  • It's hard to answer this because entire ecosystem branches are missing. Machine learning is virtually non-existent for example. You make do with what you have, but I don't even try to do many things in OCaml because there's nothing there.
  • It's not so much mising libraries as struggling to find the right libraries. Recently trying to write a small program that makes a few RPC calls to a public API found libraries with no documentation, libraries with a full http server implementation, and a few other libraries that were not quite what I was looking for.
  • Its not so much that there aren't libraries for creating things like GUIs or Games, but they are cryptic, under documented, and lack a present userbase to ask questions to
  • Libraries can quickly be outdated and broken unfortunately
  • Libraries dealing with CAS or other central auth method
  • Machine learning and deep learning, computer vision, big data processing, GPGPU, GUI, Web (front-end), numerical analysisand scientific computing etc.
  • Machine learning, Crypto libraries for some blockchains
  • Machine learning, gui
  • Many libraries in scientific computing (and I mean interoperable libraries, not a monolithic system such as owl).
  • More diversity
  • My problem is more about the lack of well-written documentation than missing libraries. Websocket is a area which is not very good
  • Network and security protocols, e.g. wireguard - file systems, e.g. ext4, zfs, ...
  • Not necessarily missing, but often unmaintained: PRs remain open for long time with no feedback.
  • PostgreSQL has no native client lib (that supports current "scram" authentication/tls etc) and in general the PostgreSQL types are poorly represented in Ocaml. This is partly due to the lack of a wide-ranging standard library giving no obvious "default type" to map PostgreSQL types to.
  • Printing common data types like list is a pain
  • Probably not missing, but too difficult to find and use them.
  • Pure OCaml SAT solver
  • QT Gui libraries
  • Scientific computing libraries. There is owl, but not much else
  • Some bindings to js libraries
  • Some libraries are LWT specific and others are Async specific. Would be great if they were agnostic and easily specialized to both.
  • Some libraries are missing relative to some other languages, but still more than more niche ones.
  • Sometimes the libraries exist, but are not complete, or not up to date
  • The lack of focus on performance means that many libraries present a tradeoff between not writing my own code and running code that is slower than it needs to be.
  • UI, C library wrappers
  • Web dev and machine learning libs
  • Web development libraries like auth, or bindings to popular services like supabase.
  • Web development, database access
  • Web development. There are great libraries for that (js_of_ocaml, Ocsigen, tyxml, etc.), but I feel that they mostly reach what could be done in Vanilla JavaScript (with inductive types!): I feel that a lot of libraries could be done, inspired from what has already been done in JavaScript.
  • Web libraries. Http, ssl, websockets, graphql, etc. these seem underdeveloped.
  • XML parsing is not obvious what is the standard
  • a blessed standard collection of libraries easily produce platform-native guis massive parallelization
  • basic stuff like xml, http, json, etc. If there is a library, the documentation is usually useless.
  • good, widely used libraries for more efficient general purpose data structures than linked lists and mutable arrays
  • gui native frameworks
  • lean, maintained libraries for autodifferentiation, optimization and machine learning. unfortunately, owl has been a big effort in this direction but after an initial period of activity now feels half finished, stagnating and at risk of being insufficiently maintained.
  • libraries for asynchronous programming and compatible with Multicore
  • modern GUI/TUI libraries (not that it's clear what that would look like).
  • n/a
  • production ready libraries with multicore support
  • reactive GUIs
  • some flakyness with http, TLS
  • web frameowrk, backend framework, orm, auth

Q54: Anything to add? (in 255 characters or less)

↑ Back to question

Showing all 75 text responses

  • "What do you think are the main pain points that prevent OCaml adoption for new projects?" Lack of external communications to market the language to more people
  • "state-of-the-art build tool" - I think dune is already great, but it would be nice if it could easily handle cross-compilation. "Too hard to learn" - I don't think it's actually hard to learn, but it is unfamiliar for many devs because it is ML-based.
  • #1 issue is perception. It is not in management list of approved tech
  • 1. Make sure ocaml always supports non-Dune build systems. 2. odoc desperately needs ocamldoc-style indexes (values, type, modules, ...).
  • 255 characters is not enough for me to rant about a language.
  • A lot of the questions don't really apply if you aren't using it in a work context. The final question for example.
  • A missing piece in the ecosystem is a good IDE like IntelliJ IDEA. For large projects editors like emacs and vscode are not sufficient enough.
  • A proper debugger and profiling tools that know about the GC would be a great thing to have, and something that is really missed I think.
  • Adoption of a language or not has also an important cultural component...
  • Answer to "If one piece of the ecosystem could magically be made state-of-the-art, I would ask for:" A good debugger.
  • Better error messages and a workable stack traceback mechanism would be great.
  • Compilation is slow; CI is too slow
  • Convince the world that an effective usage of OCaml and FP is not "hard" in general, at least not harder than main stream imperative languages.
  • Data structures with lots (hundreds) of large (>10MB) int arrays are really slow, because the garbage collector always scans this data.
  • Developers of OCaml libraries are a nich. Previously, these developers were willing to help users who had questions using these libraries. Since they were hired by consulting firms, it seems that we have to pay these firms to get their help.
  • Documentation is hard but languages like rust encourages and provides nice tools to make top notch documentation breeze! Ocaml should learn from rust and provide 100% documentations to stdlib with examples (i cannot stress this enough, with examples!)
  • For me the lack of SQL DB libraries and performance profiling tools has been a pain.
  • For the last question: the main pain point is managing to convince decision makers (like investors) that it is the right choice. We need more communications more visibility.
  • For the question above, my only answer would be "too hard to install OCaml applications"
  • Great community and great language. Thank you for your hard work.
  • I am coming mostly from a Polars/Data Science background. I believe OCaml has the potential to be great in this space and I'm sure it is used in this way in certain companies already. There is a learning curve to get over that initial hump
  • I believe the current direction is great. Multicore needs time, but was a significant stopper for ocaml adoption.
  • I find go steals the show. It's so much easier to learn, however it looks so ugly.
  • I suggest electing official OCaml community leaders with specific titles and duties.
  • I think it comes across as a odd at a 10000ft view which makes industry not consider it.
  • I think what stops adoption is a lack of frameworks that keep you on rails. Starting a project or using libs feel like: here's the docs/source. Good luck
  • I truly think that the type system and lack of implicits is keeping adoption lower (coupled woth tooling being "weird".
  • I was seduced by the essence of functional programming through OCaml.
  • I would like to be able to compile mirageos directly on windows, while mirageos runs as an exe and can be compiled to other targets as well, hopefully next year we will see bare metal running!
  • I would willingly contribute to OCaml compiler/tools but I am not sure how to start with and where my skills could be the most adapted.
  • I'd love to see more stuff in the "official" standard library and far less reliance on things like Jane Street libraries. Jane Street does great things for the community, but I trust third party groups less than the core language to be long-term stable.
  • I'm mostly waiting for Flambda2 to be upstreamed.
  • I've found performance profiling hard.
  • It is hard to find a OCaml job that is not crypto scam
  • It would be great to have a breaking version that isn't backward compatible and changes the syntax, adds modular implicits and, maybe, handles UTF-8 natively and other things that don't seem to be the priority for the OCaml maintainers
  • It's important that the Wasocaml become an official compiler backend and not relegated to second-party status like js_of_ocaml. More focus on debugging tools and workflows.
  • Lack of a good debugger is a major pain point. I would love to have a state of the art debugger.
  • Lack of online training courses (there used to be a MOOC). Companies might be happy to pay for training but there isn't any available beyond books (e.g. LinkedIn Learning, PluralSight, etc)
  • Long live OCaml
  • Missing transparency in e.g. "The OCaml platform" which just recently "roadmap got adopted" - by whom? why?
  • More smaller binary size.
  • Most people are pragmatic and don't see the point of learning ocaml when there's a golang. Ocaml is useful, but only after understanding functional paradigm and syntax. Practicality must be stressed more. And more marketing.
  • Most people haven't even heard of OCaml, so: lack of awareness.
  • Need more libraries that support ocaml-multicore/eio
  • OCaml community has been very welcoming, I am most interested in it because of it's practicality. For developers who haven't used a FP language before, it is attractive that it is a flexible language
  • OCaml does so many amazing things on DX side like the fast feedback. What is not clear is how OCaml measures up to Rust for performance, I know Jane street use it, would love to see what they do to get great performance and how you can tune critical paths
  • OCaml is really a good choice for us, but we see more and more people switching to, e.g., Rust.
  • OCaml shouldn't be lumped in the same camp as Haskell just because it's a functional programming language. Destigmatize OCaml. It should be competing with C/C++/Rust instead.
  • OCamlers need to start more projects and companies
  • Ocaml is the best! :-)
  • On the question of the new features I would like to see: there is currently duplication of (public) type declarations between ml and mli. Also it would be nice to use the declared types in the mli to typecheck the ml, no the other way around.
  • Seeking ITEA partners for http://refpersys.org/
  • Single (and not only multi) thread performance and zero cost abstraction are essential for numerical code.
  • Stdlib is stagnated. It should develop as e.g. Rust's does. Good example is Base/Core. Base way better now. And it vaguely is what Stdlib should be.
  • Tab indentation support in the ecosystem (language already supports) would help accessibility for readers.
  • Thank you
  • Thank you OCaml !
  • Thanks for sending out the survey every year!
  • The OCaml community is dominated by a low quality mindset. Bad syntax, bad tooling, bad documentation, incomplete libraries and packages, etc.
  • The foundation should help projects with communications, showing the assets of the language (multi-tier prog, unikernel, multicore, etc) People don't know about this, even within the community, just because authors of these tools don't communicate enough
  • The mess between compiler units/modules/libraries/packed modules, dune units/modules/libraries/packages, opam libraries etc. must be fixed, starting from the compiler itself.
  • The split between core/syd and async/lwt has been harmful.
  • The standard library is way too minimal
  • Tools
  • We lack documentation (and maybe, consensus) for best practices in architecting large OCaml projects
  • Windows support is very very bad. Fewer libraries compared to Java or Python. Outdated tooling. No IDE. No gaming framework. No 3D graphics framework. Poor performance.
  • Would be nice to have : - a no-GC feature (along with builtin cross-compilation) to match Rust on embedded systems. Don't mind if it implies to restrict to a sub-language. - include synchroneous/reactive stuff from (Lucid/Reactive ML)
  • build system is already SOTA, we have more issues with package management imho :). Also with the discrepancies between module names, findlib names, opam names (which goes with namespaces in the compiler/language?)
  • modular implicits BE the key feature of ocaml among other languages
  • opam requires too much space, and has too much deps, and it became hard to access github
  • syntax
  • the managers don't see the value of OCaml in the long term and sometimes it's a problem for adoption / contributions to the project.
  • transparent ascription, robust memory & gc profiler, first-class debugger & testing & (post-)deployment tooling, examples in docs, unboxing and vectorisation apis, smaller installs & easy project init, dce/ts, modular explicits, more powerful repl & ide
  • Ça tue OCaml
  • “There is no intrinsic strength to truthful ideas. And that is probably the most depressing sentence of all philosophy” Bourdieu

Q55: Which country do you live in?

↑ Back to question

Showing all 50 text responses

  • France 106 responses
  • United States 55 responses
  • United Kingdom 26 responses
  • Germany 25 responses
  • Japan 11 responses
  • Canada 10 responses
  • Portugal 7 responses
  • Denmark 7 responses
  • China 7 responses
  • Czech Republic 6 responses
  • Sweden 6 responses
  • Russian Federation 6 responses
  • Brazil 4 responses
  • Italy 4 responses
  • Spain 4 responses
  • Norway 3 responses
  • Netherlands 3 responses
  • Austria 3 responses
  • Mexico 3 responses
  • Kazakhstan 3 responses
  • India 3 responses
  • Belgium 2 responses
  • Ireland (Republic of) 2 responses
  • Indonesia 2 responses
  • Switzerland 2 responses
  • South Africa 2 responses
  • Egypt 2 responses
  • Uruguay 2 responses
  • Finland 2 responses
  • Uzbekistan
  • South Korea
  • Nigeria
  • Nepal
  • Israel
  • Serbia
  • Ukraine
  • Bulgaria
  • Argentina
  • Australia
  • Algeria
  • Estonia
  • Thailand
  • Poland
  • United Arab Emirates
  • Malawi
  • Croatia
  • Romania
  • Slovakia
  • Slovenia
  • Taiwan

Q56: Do you consider yourself a member of an underrepresented or marginalized group in technology?

Q56.a: Other

↑ Back to question

Showing 15 variants consolidated into this answer (15 total responses)

  • autistic+adhd 1 response
  • ASD, though it's less underrepresented in computer science than elsewhere 1 response
  • Windows user :-) 1 response
  • The question is bizarre 1 response
  • I don't know. Strangely, economical background variables are rarely mentioned in so called "diversity and inclusion" surveys. 1 response
  • All groups are proportionally represented. 1 response
  • I don't really understand the "consider yourself" part of this question. Either you are a gay developer or you aren't. If you are you are either know a lot of other gay developers or you don't. Surely the key question is whether you think you've been treated negatively because of X? 1 response
  • We are all unique :) 1 response
  • I'm a logician :p 1 response
  • bipolar person without diploma (self taught) 1 response
  • The group of people who don't reason by putting people into groups but rather think that everyone is different. 1 response
  • cloud-averse, allergic to containers, minimalist greybeard 1 response
  • Please don't... 1 response
  • Why do you care? This should not be part of the user survey. 1 response
  • neurodiverse 1 response