1. A computer-implemented method for checking that a to-be-compiled program is well-typed such that the program is secure in a semi-honest model, the method being executed by one or more processors and comprising: receiving, by the one or more hardware processors, the program, the program being provided in a human-readable, domain-specific programming language and comprising two or more protocols to provide secure computation based on inputs provided by two or more parties; processing, by the one or more processors, the program in view of a type system to determine whether the program is secure in the semi-honest model, the type system comprising a secure type system extension provided as a set of typing rules that describe security types that can be assigned to one or more entities of the program; and compiling, by the one or more processors, the program to generate a computer-executable program in response to determining that the program is secure in the semi-honest model.