WARNING

Note: As of today (April 2021) the ℂDuce compiler is under extensive rewriting in particular to separate the type library from the rest of the compiler and add type reconstruction. Therefore, it may not compile with the lastest versions of OCaml. Below we list some workarounds to compile (1) the old monomorphic version of ℂDuce (2) a new monomorphic version of ℂDuce compatible with the latest verions of OCaml (3) a new polymorphic version of ℂDuce compatible with the latest verions of OCaml (4) the old and buggy experimental polymorphic version of ℂDuce (it implements run-time lazy type substitutions)

Old monomorphic ℂDuce (version 0.6.1-rc1)

sudo apt install opam
opam init
eval $(opam env)
opam switch create 4.06.0+default-unsafe-string
opam install ocamlfind num pcre pxp ulex 
git clone https://gitlab.math.univ-paris-diderot.fr/cduce/cduce.git
cd cduce
git checkout --track origin/0.6.1-rc1
./configure
make cduce

New Monomorphic ℂDuce (version 0.7.0-rc11)

sudo apt install opam
opam init
eval $(opam env)
opam install ocamlfind num pxp dune
opam pin add cduce-types 'git+https://gitlab.math.univ-paris-diderot.fr/cduce/cduce#monomorphic
opam pin add cduce 'git+https://gitlab.math.univ-paris-diderot.fr/cduce/cduce#monomorphic
opam pin add cduce-tools 'git+https://gitlab.math.univ-paris-diderot.fr/cduce/cduce#monomorphic

New Polymorphic ℂDuce (version 0.1.0-rc11)

sudo apt install opam
opam init
eval $(opam env)
opam install ocamlfind num pxp js_of_ocaml-ppx dune
opam pin add cduce-types 'git+https://gitlab.math.univ-paris-diderot.fr/cduce/cduce#polymorphic'
opam pin add cduce 'git+https://gitlab.math.univ-paris-diderot.fr/cduce/cduce#polymorphic' 
opam pin add cduce-tools 'git+https://gitlab.math.univ-paris-diderot.fr/cduce/cduce#polymorphic' 

OLD Polymorphic ℂDuce (version 1.0.0-devel-4d5a2afd)

sudo apt install opam
opam init
eval $(opam env)
opam switch create 4.06.0+default-unsafe-string
opam install ocamlfind num pcre pxp ulex
git clone https://gitlab.math.univ-paris-diderot.fr/cduce/cduce.git
cd cduce
git checkout --track origin/cduce-next
./configure
make cduce

What is ℂDuce ?

ℂDuce is a modern XML-oriented functional language with innovative features. A compiler is available under the terms of an open-source license. ℂDuce is type-safe, efficient, and offers powerful constructions to work with XML documents.

Trying ℂDuce online:

Spin-offs:

For more information, you can contact info@cduce.org.

Latest News

2019, January: The theoretical bases for gradual typing in polymorphic ℂDuce are being presented at POPL 2019 in the paper Gradual Typing: a New Perspective.

2018, October:If you want to know the dirty details of implementation of ℂDuce typing and subtyping algorithms you can find it in this paper: Covariance and Contravariance: a fresh look at an old issue (a primer in advanced type systems for learning functional programmers).

2017, September: The theoretical bases for gradual typing in monomorphic ℂDuce are being presented at ICFP 2017 in the paper Gradual Typing with Union and Intersection Types.

2016, September: Type inference for ℂDuce polymorphic types is being presented at ICFP 2016 in the paper Set-Theoretic Types for Polymorphic Variants. You can also try the online prototypes for an OCaml-like language using this inference. There are two versions: a classic inference that implements the inference of the paper and a biderectional inference which allows the programmer to add explicit type annotations to help the inference algorithm.

2016, August: Try our subtyping constraint resolution algorithm, by using the debug tallying directive in the CDuce toplevel (development version). This finds a principal set of substitutions that solves a set of type constraints of the form {t1<:s1; ... ; tn<:sn}. For the syntax of this and other directives enter in the CDuce toplevel #help debug.

2016, January: Experimental implementation of Polymorphic ℂDuce is available on CDuce gitlab repository. For the latest developments use the cduce-next branch:
git clone https://gitlab.math.univ-paris-diderot.fr/cduce/cduce.git
git checkout cduce-next
./configure && make
The only difference in your programs: use 'a for type variables (see the summary of the type syntax at the end of this page).

2015, January: The theoretical bases of CDuce are being presented at POPL, the ACM Symposium on Principles of Programming Languages, in two papers: Polymorphic Functions with Set-Theoretic Types. Part 1: Syntax, Semantics, and Evaluation (in POPL '14) and Polymorphic Functions with Set-Theoretic Types. Part 2: Local Type Inference and Type Reconstruction (in POPL '15).

2014, April 9: EAPLS Best Dissertation Award for polymorphic ℂDuce. The European Association for Programming Languages and Systems conferred the 2013 Best Dissertation Award to the thesis Parametric Polymorphism for XML Processing Languages which provides the foundations for the (ongoing) polymophic extension of ℂDuce. See the official announcement.

2014, March 5: ℂDuce 0.6.0 is out. See the Download page for download information, or the CHANGES file to know what's new.

2013, July 14: Server migration is over. We finally moved all ℂDuce servers and everything is working again. Please signal us any problem.

2013, July 12: Navigational ℂDuce (or, ℂDuce+XPath). ℂDuce currenty provides a limited form of navigational patterns which does not comply with the XPath standard. We are implementing a new version which integrates with ℂDuce patterns, is XPath-compliant, and is precisely typed even for backward axes. Details in this paper.

2013, May 30: Zhiwu Xu's PhD defense. The thesis, titled Parametric Polymorphism for XML Processing Languages, provides the foundations for a polymophic extension of ℂDuce. More details in this page.

2013, March 15-23: cduce.org not reachable. Moving all the servers (see news below) was not painless and caused cduce.org to disappear for a week. We set up a temporary mirror site and redirected towards it while the problems with Paris Diderot DNS server are not solved. Until then online demos of ℂDuce will not work and svn site cannot be accessed: we apologize for the problem.

2013, February 2nd: We are moving. The PPS Lab (with all its servers) is moving to a new building. Online demos of ℂDuce may not work in next weeks.

2012, June 7th: Post-doc position open position at Paris Diderot to implement the (forthcoming) polymorphic extension of ℂDuce
The research will take place in the context of the ANR project Typex: Typeful and Certified XML.
See Polymorphic Functions with Set-Theoretic Types and Set-theoretic Foundation of Parametric Polymorphism and Subtyping for the theoretical foundation of this work.
For more information, contact info@cduce.org.

Older News ... .

ℂDuce: the research project

The ℂDuce project is a spin-off of a research effort split amongst two CNRS labs: the PPS laboratory of University of Paris Diderot - Paris 7 and the Toccata Group in LRI laboratory of University Paris 11 (past contributors to this project include the Languages group of ENS in Paris and the Gallium project in INRIA).

Currently most of the research and developpment on ℂDuce is done in the TYPEX project. Have a look at the list of available and expected deliverables.