ABSTRACT We propose to use X10 (http://x10-lang.org) to program distributed machine learning applications. Designed for the productivity of Java-like languages, and the performance of MPI-like libraries, at scale, X10 is built around a few core programming constructs for concurrency and distribution. X10 is a statically typed, garbage-collected, parallel, object-oriented programming language that supports dynamic, asynchronous, state-full computations running in a single global address space, partitioned over a cluster of tens of thousands of cores. Programs can run either natively (single binary, running on each node in a cluster), or in a managed environment (cluster of JVMs), either on commodity networks, or high performance networks (e.g. infiniband), or supercomputers such as Blue Gene/Q, IBM P775, or the Japanese K computer. X10 is particularly useful for building libraries / application frameworks involving distributed/global data-structures. In earlier work we have developed high performance, in-memory implementations of application frameworks such as Hadoop Map Reduce, a global matrix library, and a library for globally load-balancing highly irregular computations. Application and libraries such as a non-resilient version of Pregel, or distributed version of the DBScan clustering algorithm, an expectation-maximization algorithm for HMM training etc have been developed in a few hundred lines of code. Additionally, X10 is being used to develop distributed SAT solvers (e.g. Sat X10, DDX10 based on decision diagrams) and adaptive solvers using local search.