Introducing Vetted.ai Logo
Vetted.ai Logo

The Slant team built an AI & it’s awesome

Find the best product instantly

Add to ChromeAdd to EdgeAdd to FirefoxAdd to OperaAdd to BraveAdd to Safari
Try it now
4.7 star rating
Slant logo
0
Log in • Sign up

What is the best alternative to Pony?

Ad
Here’s the Deal
Slant is powered by a community that helps you make informed decisions. Tell us what you’re passionate about to get your personalized feed and help others.
Ad

ATS

All
7
Experiences
Pros
6
Cons
1
Monika
gilch
Top Pro

Built-in formal specification

ATS has a theorem-proving type system powerful enough to prove that its functions meet their specifications. This happens at compile time with no performance impact at runtime. This can be used to prove that an ATS program doesn't have bugs commonly found in C++ programs, like "this function never leaks memory" or "this program never attempts to divide by zero" or "this buffer never overflows" or to verify pointer arithmetic, etc. See More
gilch
Top Con

No Windows version

But it does run on Cygwin. See More
Monika
gilch
Top Pro

Free and open-source compiler

The compiler (ATS/Postiats) is GPLv3. See More
Monika
gilch
Top Pro

Functional programming

The syntax is ML-like with the usual functional language features like pattern matching and tail-call optimization. See More
gilch
Top Pro

High-performance systems language

ATS works as a low-level systems language. ATS programs have performance and footprint comparable to programs written in C/C++. See More
gilch
Top Pro

Good module system

Similar to Modula-3. This makes ATS a viable choice even for large-scale projects. See More
gilch
Top Pro

Safe concurrency

ATS can prove its concurrent programs have no deadlocks or race conditions. See More
HideSee All Experiences
10 1

Swift

All
12
Experiences
Pros
10
Cons
1
Specs
Slimothy
Top Pro

Modern syntax

See More
thermoplastics
Amanda Frisk
Top Con

Swift is a moving target

They've released 1.2 so far, and 2.0 is coming soon. Every small update brings adjustments to paradigms (such as how to do type casting) that can be a little frustrating to absorb. Objective C was also constantly updating, however, but not at the same rate these days. See More
Matthew
BraveMagec
Top Pro

Swift is closer to other platforms

Apple’s modern programming language is easier to understand for non-iOS developers and minimizes time for additional explanations and clarifications. Moreover, Swift can be used as a script language. It is an interesting solution for the iOS community to unify writing of build scripts. At the time being iOS developers are split up in regard to this activity. Some of them write build scripts in Bash, others use Ruby, Python, etc. Swift gives an amazing opportunity to be applied to all iOS programming needs. More details can be found here https://mlsdev.com/blog/51-7-advantages-of-using-swift-over-objective-c See More
Slimothy
Top Pro

Works with Apple's Cocoa and Cocoa Touch frameworks

See More
Slimothy
Top Pro

Can be used as a Just-In-Time language

See More
Slimothy
Top Pro

Inherent parallelism

See More
Slimothy
Top Pro

Low memory footprint due to reference counting

See More
Slimothy
Top Pro

Backed by Apple

See More
Slimothy
Top Pro

Performance speed comparable to native C

See More
thermoplastics
Amanda Frisk
Top Pro

Swift has some clever tricks up its sleeve

Due to having elements of a functional programming language. Things like 'map' and 'filter' for example. See More
Slimothy
Top Pro

Uses LLVM compiler and Obj-C runtime allowing C, Objective-C, Objective-C++ and Swift code to run side by side within a single program

See More
Specs
Platforms:Mac, Linux
HideSee All Experiences
80 60

Go

All
33
Experiences
Pros
18
Cons
14
Specs
Ray
Michael Murphy
Top Pro

Exceptionally simple and scalable multithreaded and concurrent programming

Goroutines are "lightweight threads" that runs on OS threads. They provide a simple way for concurrent operations — prepending a function with go will execute it concurrently. It utilizes channels for communication between goroutines which aids to prevent races and makes synchronizing execution effortless across goroutines. The maximum number of OS threads goroutines can run on may be defined at compile time with the GOMAXPROCS variable. See More
Endi Sukaj
Top Con

Hard to abstract even the simplest notions

Go is famously regarded as very simple. However, this simplicity becomes problematic in time. Programmers who use Go find themselves over and over again writing the same thing from a very low point of view. Domains not already served by libraries that are easy to glue are very difficult to get into. See More
Slimothy
Michael Murphy
Top Pro

The go compiler compiles binaries instantly — as fast as a scripting language interpreter

Compiled binaries are fast — about as fast in C in most cases. Compiles on every OS without effort — truly cross-platform compiler. As a result of the fast compilation speed, you can use the gorun program to use go source code as if it was a scripting language. See More
gilch
Top Con

Designed to make the programmer expendable

Go was designed for large team projects where many contributors may be incompetent. That Go can still get things done under these conditions is a testament to its utility in this niche. Go's infamously weak abstraction power is thus a feature, not a bug, meant to prevent your teammates from doing too much damage. This also means any team member can be easily replaced by another code monkey at minimum cost. Good for the company, bad for you. The more talented programmers, on the other hand, will be very frustrated by having one hand tied behind their back. See More
Slimothy
Michael Murphy
Top Pro

Simplified C-like syntax that is as easy to read and write as Python

The language is designed in a manner that seems logical. Syntax is simplified to reduce burden on the programmer and compiler developers. See More
Monika
MightyHedetet
Top Con

Forces K&R style and won't allow Allman style

Golang developers were extremely short-sighted and biased by forcing the K&R style, which should never have happened. Basically kicking Allman style users out of their language. See More
Ray
Michael Murphy
Top Pro

Programmers don't have to argue over what 10% subet of the language to implement in their software project

The language promotes programming in a specific idiomatic style, which helps keep every programmer on the same page. See More
CourteousFujin
Top Con

Doesn't have true enums

Golang does weirdness with const versus having real enums, like other languages. This reflects the stubbornness and shortsightedness of the core developers, similar to the issue with generics, where it was denied that it was needed until it became too obvious that it should have been added years ago. See More
Monika
Paolo
Michael Murphy
Top Pro

Demonstrates a unique, simple concept to object-oriented programming

All types are essentially objects, be they type aliases or structs. The compiler automatically associates types to their methods at compile time. Those methods are automatically associated to all interfaces that match. This allows you to gain the benefits of multiple inheritance without glue code. As a result of the design, classes are rendered obsolete and the resulting style is easy to comprehend. See More
CourteousFujin
Top Con

Golang controlled by Google

Solves Google problems, which might not be your or the majority of user's problems. Was created for the benefit and purposes of Google, so is less flexible in language direction and options. See More
Endi Sukaj
Top Pro

Great team working behind it

Go has a solid team of engineers working on it (some of the best networking engineers in the world are working on Go). Up until now, the great engineering of the language has compensated for its lack of power. See More
Ray
Mario Ray Mahardhika
Top Con

Easy to shadow variable

Due to single character only difference, declare and assign statement can easily shadow variable from outer scope unconsciously. Example: err := nil if xxx { err := somefunctionthatreturnsanerr } return err // always return nil See More
Monika
Ray
Michael Murphy
Top Pro

API documentation is rich in content; easy to memorize

Only features deemed critical are added to the language to prevent cruft from working its way into the language. The language is small enough to fit inside one's head without having to repeatedly open documentation. Documentation is hosted on an official webpage in a manner that is simple to read and understand. See More
Monika
RickZeeland
Top Con

No forms designer

Those who are used to Visual Studio can feel the lack of a forms designer for rapid development. See More
Paolo
Ray
Michael Murphy
Top Pro

Supports functional programming techniques such as function literals

This naturally also supports first class and high order functions, so you may pass functions as variables to other functions. See More
NonchalantDercetius
Top Con

Bizarre syntactic choices like a unique date format.

See More
Paolo
Endi Sukaj
Michael Murphy
Top Pro

Multiple variables may be assigned on a single line

This conveniently eliminates the need to create temporary variables. Fibonacci example: x, y = y, x+y See More
Monika
CourageousBaalHammon
Top Con

It appears Google uses position to snuff out or suppress other languages

Newer languages that could threaten Golang (or other Google controlled languages) appear to have suppressed search results on Google and YouTube. Dangerous situation where large company can manipulate user choice and market share. The freedom to freely choose and user rights need to be protected. See More
Craig Weber
Top Pro

Performance is on the order of C and Java

Go is blazing fast, but easier to write than Python, JS, Ruby, or many other dynamic languages. See More
meikl
Top Con

Changing visibility requires renaming all over the code

See More
Ray
Laura Kyle
Michael Murphy
Top Pro

Built-in unit testing

The idiomatic approach to writing a Go software project is to perform test-driven development with unit testing. Every source code file should have an associated *_test.go file which tests functions in the code. See More
CourteousFujin
Top Con

Lacks support for immutable data

Only way to prevent something from being mutated is to make copies of it, and to be very careful to not mutate it. See More
Ray
Michael Murphy
Top Pro

Provides tools for automatically formatting code for your entire software project

This helps keep every programmer on the same page in a project and eliminates arguments over formatting styles. See More
CourteousFujin
Top Con

Does not have sum types

Makes it harder to have functions of different parameters types in a non OOP language. Thus messy generics and interfaces, and more confusion, where sum types could have solved a number of issues. See More
Ray
Michael Murphy
Top Pro

Easy to install and configure; simple to compile software

Go software can be immediately installed, regardless of your operating system, package manager, or processor architecture with the go get command. Software is compiled statically by default so there is no need to worry about software dependencies on the client system. Makefiles and headers are no longer necessary, as the package system automatically resolves dependencies, downloads source code and compiles via a single command: go build. See More
Endi Sukaj
Top Con

Performance slowdown because of indirect calls and garbage collection

Practically no meaningful Go application can be written without indirect function calls and garbage collection, these are central to Go's core infrastructure. But these are major impediments to achieving good performance. See More
Monika
Ray
Michael Murphy
Top Pro

Automatically generates API documentation for installed packages

Godoc is provided to automatically generate API documentation for Go projects. Godoc also hosts its own self-contained web server that will list documentation for all installed packages in your Go path. See More
Ray
Mario Ray Mahardhika
Top Con

Implementation of interfaces are difficult to figure out

Finding out what interfaces are implemented by a struct requires a magic crystal ball. They are easy to write, but difficult to read and trawl through. See More
Endi Sukaj
Top Pro

Great language for building networking services

Go was started as a systems language but now it has fully committed in the niche of networking services. This has been a brilliant move by Go because it allows them to capitalize on the immense talent of the Go engineering team (who are in the most part network engineers). In a world dominated by Java EE and slow scripting language, Go was a breath of fresh air and it continues to be one of the most powerful languages if you want to build networking services. See More
Monika
Michael Murphy
Top Pro

Supports 'modules' in the form of packages

Every Go source file contains a package line that indicates which package a file belongs to. If the name of the package is 'main', it indicates that this is a program that will be compiled into a binary. Otherwise, it will recognize that it is a package. See More
Laura Kyle
Michael Murphy
Top Pro

Supports splitting source code into multiple files

As long as every source code file in a directory has the same package name, the compiler will automatically concatenate all of the files together during the compilation process. See More
Ray
Michael Murphy
Top Pro

Syntax for exported code from a package is simplified to be less verbose than other languages

Any variable, type and function whose name begins with a capital letter will be exported by a project, while all other code remains private. There is no longer a need to signify that a piece of code is 'private' or 'public' manually. See More
Specs
Platforms:Windows, Linux, Mac etc.
Developer:Google with Ken Thompson, Robert Griesemer, Rob Pike
Current stable version:1.18
GZipped size:115 MB (installer)
HideSee All Experiences
921 228

Elixir

All
12
Experiences
Pros
9
Cons
2
Specs
Joe Seeley
Top Pro

Great for concurrency

Leverages the existing Erlang BEAM VM See More
Hilko
Top Con

Deployment is still not as easy as it should be

See More
Endi Sukaj
Gage Peterson
Top Pro

Great getting started tutorials

The tutorials are very clear and concise (even for a person not used to functional programming). Plus they are also very mobile friendly. See More
Endi Sukaj
Top Con

Some design choices may seem strange

Some design choices could have been a little more appealing, for example: using "do...end" comes natural in Ruby for blocks but Elixir uses them for everything and it looks pretty weird: Enum.map [1, 2, 3], fn(x) -> x * 2 end or receive do {:hello, msg} -> msg {:world, msg} -> "won't match" end See More
Matthias Schuster
HumbleCelaeno
Top Pro

Powerful metaprogramming

Write code that writes code with Elixir macros. Macros make metaprogramming possible and define the language itself. See More
Matthias Schuster
Top Pro

Full access to Erlang functions

You can call Erlang functions directly without any overhead: https://elixir-lang.org/getting-started/erlang-libraries.html See More
Svjatoslavs Krasnikovs
BraveMagec
Top Pro

Scalability

Elixir programming is ideal for applications that have many users or are actively growing their audience. Elixir can easily cope with much traffic without extra costs for additional servers. More details can be found here. See More
GraciousQuetzalcoatl
Top Pro

Great as a first functional programming language!

See More
Endi Sukaj
Gage Peterson
Top Pro

Great documentation

Elixir's documentation is very good. It covers everything and always helps solving any problem you may have. It's also always available from the terminal. See More
Paolo
Endi Sukaj
Gage Peterson
Top Pro

Syntax is similar to Ruby, making it familiar for people used to OOP

All of the benefits of Erlang; without as steep a learning curve of prolog based syntax. Elixir is heavily inspired by Ruby's syntax which many people love. See More
Gage Peterson
Top Pro

Easy to download libraries

Comes with built in build tool called "mix". This will automatically download libraries and put them in the scope of the application when you add them to the "deps" function and run mix deps.get See More
Specs
Current stable version:1.11.2
GZipped size:3.61 MB (without required Erlang VM)
Site:https://elixir-lang.org
HideSee All Experiences
492 182

Nim

All
14
Experiences
Pros
13
Specs
Glerin
Top Pro

Great metaprogramming features

There are generics, templates, macros in Nim. They can allow you to write new DSL for your application, or avoid all boilerplate stuff. See More
Endi Sukaj
Анатолий Галиулин
Top Pro

Strict typing

Checks your code at compile time. See More
Monika
Glerin
Top Pro

Easy to read

Nim has a lot of common with Python in terms of syntax. Indentation-based syntax, for/while loops. See More
Monika
Glerin
Top Pro

Easy to integrate with another languages

You can use Nim with any language that can be interfaced with C. There's a tool which helps you to create new C and C++ bindings for Nim - c2nim. Also, you can use Nim with Objective C or even JavaScript (if you're compiling for these backends). See More
Monika
Glerin
Top Pro

Type interferencing

You only need to specify types in your procedures and objects - you don't need to specify type when you're creating a new variable (unless you're creating it without initialization). See More
Monika
JM80
Glerin
Top Pro

Compile-time execution

Nim has a built-in VM, which executes macros and some other code at compile time. For example, you can check if you're on Windows, and Nim will generate code only for it. See More
Monika
Andrew Penkrat
Top Pro

Really cross-platform

The same code can be used for web, server, desktop and mobile. See More
Endi Sukaj
Анатолий Галиулин
Top Pro

Multi paradigm

Imperative, OOP, functional programming in one language. See More
Monika
Glerin
Top Pro

Built-in Unicode support

You can use unicode names for variables, there is "unicode" module for operations with unicode. See More
Monika
Glerin
Top Pro

Garbage-collected

You don't need to deal with all those manual memory allocations, Nim can take care of it. But also you can use another GC, or tweak it for your real-time application or a game. See More
Monika
Glerin
Top Pro

Has built-in unittest module

With built-in "unittest" module you can create test with a very readable code. See More
Glerin
Top Pro

Supports UFCS (Unified Function Call Syntax)

writeLine(stdout, "hello") can be written as stdout.writeLine("hello") proc add(a: int): int = a + 5 can be used like 6.add.echo or 6.add().echo() See More
Glerin
Top Pro

Has built-in async support

Nim has "asyncdispatch" module, which allows you to write async applications. See More
Specs
Platforms:Windows, MacOS/iOS, Linux /Android/Termux, *BSD, Solaris/SmartOS, HaikuOS, lots of others
License:MIT
CPU:All CPU architectures that have an ANSI C compiler
Current stable version:1.6.6
See All Specs
HideSee All Experiences
447 184

D

All
22
Experiences
Pros
16
Cons
5
Specs
Nicolay Giraldo
Top Pro

Easy to read and understand code

See More
Endi Sukaj
Dominic Mazzoni
Top Con

Poor adoption even after many years of existence

There's a widely accepted perception of D as a language that has been poorly adopted. Since adoption is driven by perception this becomes a fact. So managers and engineers start becoming nervous in adopting a language that has such a perception among the community and that has been so unsuccessful for so long. See More
Endi Sukaj
Top Pro

Very fast compilation

D is usually up to 10 times faster than C++. Having a language that compiles this fast means that you are free to write highly optimized code because of the relatively low cost of experimentation. See More
JoyfulTonacacihuatl
Top Con

Garbage Collection

Memory is not managed directly. See More
Slimothy
he_the_great
Top Pro

Unit testing built-in

D provides unittest blocks to insert code that verifies functions preform their expected behavior and document edge cases. Since these are enabled with a compiler switch, there is no need to teach new programmers how to install new libraries and import modules, instead training on test driven design can start from the very first function. See More
Endi Sukaj
Top Con

Lack of vision

D is community-driven and lacks the support of any large corporation. While this increases the amount of talent and engineering abilities of the people working on D, it also brings a severe lack of charisma, leadership and vision. See More
Endi Sukaj
Wyatt Epp
Top Pro

Doesn't force you to deal with memory management

When you're just starting out, dealing with manual memory management and its bugs is a huge pain! D is garbage collected by default, which removes a huge class of things that could go wrong. And later on, if you decide you don't want or need the GC, you can turn it off. See More
Simona
TranquilMaui
Top Con

Failed at becoming alternative to C or C++

Almost as confused and complicated as C++, but without the popularity and widespread corporate usage. Also failed at becoming a good cross-platform GUI application development language like Object Pascal. Many missed past opportunities, and now newer languages are better alternatives. See More
Slimothy
Tom Raleigh
he_the_great
Top Pro

Has an improved C subset

With few exceptions, D will either compile C code to work exactly as when compiled as C, or it won't compile - it won't quietly change the semantics of C code and give unexpected results. This means that D contains an improved C, as it fails compilation where type safety is missing in C. This allows learning the same machine operations available in C and other low-level languages. See More
Endi Sukaj
Top Con

All the downsides of garbage collection without any of its benefits

When D decided to implement garbage collection it instantly alienated a large community of developers (C and C++ programmers). For them, the official policy has been: "Don't want garbage collection? Use D with RAII or manual management style!". While true, it's also absolutely pointless because there's little to none support for alternate memory management styles in the standard library, which means that a new user will have to start with a language that is stripped down of the core infrastructure. On the other hand, for those people who want to use garbage collection, the implementation of it is lackluster. See More
Endi Sukaj
Top Pro

Provides a powerful data structure on top of C's arrays called slices

D provides a structure that builds on C's arrays called slices. A slice is a segment of an array that tracks the pointer and the length of the segment. Slices are extremely powerful because they combine the protection of knowing the length of the data with the garbage collector that manages the memory backing that data, thus avoiding most memory corruption issues. See More
Yoshiyuki
InquisitiveAtropos
Top Pro

It's a state-of-art evolution of C

See More
Slimothy
Tom Raleigh
he_the_great
Top Pro

Static with type inference

For a new user adding types can feel tedious, and takes focus off the meaning of the code, but they are also important for checking logic. D provides static types, and a good system to infer types, so types are checked when calling functions, but do not need to be specified everywhere, making it feel more dynamic. See More
Nicolay Giraldo
Top Pro

Provable purity and immutability

The compiler can check that functions don't have side effects, extremely important for functional programming in concurrent scenarios, and can check immutability. Therefore, the compiler will prove that your programs are functionally pure and respect immutable data, if you want it to. See More
Slimothy
Framer
Top Pro

Compile-time Function Execution

See More
Slimothy
Framer
Top Pro

Built-in Unicode support

See More
Nicolay Giraldo
Top Pro

Industrial quality

See More
Endi Sukaj
Michael Murphy
Top Pro

Asynchronous I/O that doesn’t get in your way

Because all types can be treated as objects, all files can call functions in the same manner -- even stdin and stdout. stdout.writeln(); stdin.readln(); file.writeln(); file.readln(); See More
Endi Sukaj
Top Pro

Easy to integrate with C and C++

D practically has the same memory structure as C and C++; all D does it build a structure around that. The entire C standard library is accessible at no cost (syntactic or speed) and it's being worked on allowing the same for the C++ standard library. See More
Endi Sukaj
Michael Murphy
Nicolay Giraldo
Top Pro

Designed for concurrency and parallelism

Supports first-class functionality for both concurrency and parallelism, offered as part of the standard library. See More
Endi Sukaj
Michael Murphy
Top Pro

Supports calling functions from types in an object-oriented manner.

if (exists(file)) {} may be written as if (file.exists) {}. writeln(file); may be written as file.writeln(); isDivisibleBy(10, 2); may be written as 10.isDivisibleBy(2); writeln(isEven(add(5, 5))); may be written as 5.add(5).isEven().writeln(); See More
Specs
Current stable version:2.101.2
Site:https://dlang.org/
Latest beta version:2.102.0-rc.1
HideSee All Experiences
171 84

Rust

All
22
Experiences
Pros
13
Cons
8
Specs
Endi Sukaj
Slimothy
Eonil
Top Pro

Catch errors at compile-time

Since Rust is statically typed, you can catch multiple errors during compile time. This is extremely helpful with debugging, especially compared with dynamically typed languages that may fail silently during runtime. See More
MellowCottyto
Top Con

Long compile times

Way longer to compile than other languages. See More
Eonil
Top Pro

Threads without data races

Unique ownership system guarantees a mutable data to be owned and mutated by only one thread at a time, so there's no data race, and this guarantee is checked at compile time statically. Which means easy multi-threading. Of course, immutable data can be shared among multiple threads freely. See More
Simona
CromulentFides
Top Con

Low readability

Harder to read and understand language. See More
Endi Sukaj
Top Pro

Compiles to machine code allowing for extra efficiency

Rust uses LLVM as a backend, among other things this allows Rust code to compile down to machine languages. This allows developers to write programs that run as efficiently as possible. See More
CourteousFujin
Top Con

Low productivity

The compiler is strict, such as ownership and borrowing checkers. See More
Endi Sukaj
Slimothy
Eonil
Top Pro

Generics support

You don't have to write same array and dictionary classes hundreds and thousands times for strong type check by compiler. See More
Monika
MellowCottyto
Top Con

Very ugly and verbose syntax

Compared to many languages. One tool needed to be productive is the language to be pleasing and effective, yet Rust friction is as high as its safety. See More
Endi Sukaj
Top Pro

Built-in concurrency

Rust has built-in support for concurrency. See More
VigilantHotuMatua
Top Con

Significant time required to understand the language fully

There's the infamous borrow checker for example. See More
Endi Sukaj
Top Pro

Makes developers write optimal code

Rust is a modern programming language written around systems. It was designed from the ground up this way. It's language design makes developers write optimal code almost all the time, meaning you don't have to fully know and understand the compiler's source code in order to optimize your program. Furthermore, Rust does not copy from memory unnecessarily, to give an example: all types move by default and not copy. Even references to types do not copy by default. In other words, setting a reference to another reference destroys the original one unless it's stated otherwise. See More
Monika
MellowCottyto
Top Con

Steep learning curve

Pretty strict and hard to adapt for beginners. See More
Endi Sukaj
Top Pro

Easy to write understandable code

While not as verbose as Java, it still is much more verbose than languages like Go and Python. This means that the code is very explicit and easy to understand. See More
SophisticatedMayahuel
Top Con

Rust not as safe as it pretends to be

Rust problems: 1) Massive undisclosed usage of unsafe. 2) Massive amounts of memory safety CVEs - see details. 3) Large bloated Rust binaries increase attack surface for exploits. 4) Many corporate types claiming Rust is safe, don't actually program or use it (have some quiet financial interest to push it). See More
Endi Sukaj
Top Pro

Supports cross compilation for different architectures

Since Rust 1.8 you can install additional versions of the standard library for different targets using rustup/multirust. For example: $ rustup target add x86_64-unknown-linux-musl Which then allows for: $ cargo build --target x86_64-unknown-linux-musl See More
VigilantHotuMatua
Top Con

Low-level programming language

This means that it encourages the programmer to be very careful in terms of how memory is allocated, etc. Most applications can run without exceeding the capacity of the server, even with an inefficient dynamic scripting language. See More
Endi Sukaj
Slimothy
Eonil
Top Pro

Support for macros

When you identify a part of your code which gets repeated often, which you cannot abstract using functions or classes, you can use Rust's built-in Macros. See More
Mateusz Kubaszek
Top Pro

Big community

The biggest community contributing to language. See More
Maxwell Anderson
Top Pro

Official package manager and build tool

Cargo is the official package manager for Rust. It comes with the language and downloads dependencies, compiles packages, and makes and uploads distributable packages See More
Simona
Mateusz Kubaszek
Top Pro

Functional programming

Very easy to create functional with some additional from structure application. See More
Akash Sharma
Top Pro

Zero-cost futures or Async IO

See More
Specs
Platforms:Linux, MacOS X, Windows, BSD
License:MIT/Apache
Current stable version:1.66
HideSee All Experiences
573 307

V

All
17
Experiences
Pros
14
Cons
2
Specs
teadan
Monika
prohyon
Top Pro

Fast like C

V is easier than C and fast like C. See More
YUART
Simona
FascinatingAdapa
Top Con

Rapid changes in a language syntax/features

Since V language under a continuous development and core syntax and features will be "frozen" in a version 1.0.0, updating from older version of a language can cause a code rewrite of previously working program. See More
VivaciousVainamoinen
Top Pro

C Interop

Can import C libraries, structs, and headers. See More
Simona
AdaptablePereplut
OpinionatedFortuna
Top Con

V 1.0 release was planned for December 2019

See More
Monika
prohyon
Top Pro

Simplicity

V is simple and powerful. See More
AdaptablePereplut
RickZeeland
Top Pro

Can create multi-OS GUIs

Multi-OS GUI creation is more integrated into the language than others. See More
Monika
prohyon
Top Pro

Generics

V has generics. See More
Simona
CromulentFides
Top Pro

Cross-platform

Compile to many OSes. See More
Simona
CromulentFides
Top Pro

Clear syntax

Highly understandable language. See More
Simona
DedicatedSet
Top Pro

Sum types

V has Sum Types. See More
PhilosophicalGyges
Top Pro

Closures

V has closures, which gives the user additional options and usefulness. See More
Simona
ReveredBunjil
Top Pro

Single paradigm

Follows the philosophy that there should be only one way to do something, as opposed to multi-paradigm languages like C++. See More
IntelligentMwari
Top Pro

Safety

V is very safe. See More
CourteousFujin
Top Pro

Supports concurrency and channels

Can run functions concurrently that communicate over channels. See More
ColorfulPhobos
YUART
Top Pro

Friendly and helpful community

Just check the V Discord channel or their GitHub Discussions and you will see by yourself. See More
Simona
CromulentFides
Top Pro

Inline assembly

Can add Assembly code. See More
Specs
Platforms:Windows, Linux, Mac
License:MIT
Supported platforms:Windows, Mac, Linux, FreeBSD, OpenBSD, NetBSD, DragonflyBSD, Solaris, Android, iOS
Developer:Alexander Medvednikov
See All Specs
HideSee All Experiences
138 40

Pascal / Object Pascal

All
30
Experiences
Pros
24
Cons
5
Specs
Mr Bee
actionless
Top Pro

Understanding of basics

Because of the verbosity and easy syntax, Pascal language is relatively easier to be learned and understood, even for someone who has no programming knowledge. It's said that Pascal code —if written well— is like reading pseudo code. See More
cdt5050
dbohdan
actionless
Top Con

Niche language

Most use of this language will be found in jobs supporting legacy code. It will be hard to find things to do with this language outside of that niche. See More
Ray
John Parsons
Jesper Dam
Top Pro

Clear syntax

Pascal's syntax is clear and concise, for example: procedure test(); begin DoSomething(); end; See More
John Parsons
Ray
Mr Bee
Top Con

No up-to-date version of language standards

In 1983, and update in 1990, the language was standardized with two standards: ISO/IEC 7185:1990 Pascal and ISO/IEC 10206:1990 Extended Pascal. However, Object Pascal extensions to the language have no official standards but in 1993, a draft proposal for object oriented Pascal standard was re; for review purposes only. There are no standards for modern features and enhancements, thus various Pascal dialects like Delphi or HP Pascal has their own enhancements and features. See More
Thomas
actionless
Top Pro

Easy

Pascal / Object pascal was used in schools during the 2000's to teach kids the basics of object oriented programming. See More
Simona
NonchalantDercetius
Top Con

Effectively obsolete

While this may have been an ok choice 25 years ago, it no longer is. Consider Python, Go or Clojure. See More
Bert Visscher
Andrea Terenziani
Top Pro

Flexible

Using the Free Pascal Compiler (the main Pascal distribution) you can code in a language that can be procedural and imperative now, but it can became object-oriented simply adding a directive at the start of the source See More
ExcitedThoon
Top Con

Unnecessary heavy syntax

Begin.. end. Pascal would have been great with curly braces.. but then again, that's what C is for. It's an academic language which was used in the past, but not much anymore today. See More
Aubrey
Mr Bee
Top Pro

Cross platform

Pascal development tools are available almost on every available platform, especially using Free Pascal. Pascal language is available on desktop like Mac, BSD, Linux, Windows, Solaris, etc.; on mobile like iOS, Android, etc.; also on managed environments like Java Virtual Machine (JVM) and .Net/Mono framework . There are even some Pascal to JavaScript transpilers such as Smart Pascal, so you can write client side web app using Pascal as well, if you really want to. See More
Simona
LivelyLiTieguai
Belle
Top Con

All variables, types, constants and functions must be declared at the beginning of the code

See More
Mr Bee
Bryan
actionless
Top Pro

Tons of academic reading

Being known as the programming language for education, especially in the 90's, there many academic reading and tutorials available on the internet. See More
CaringChemosh
Thomas
Top Pro

Fast compilation

The compiler is fast, really fast. Compared to C/C++, the delphi compiler is designed to compile a decent sized desktop application in seconds rather than minutes. See More
Mario Ray Mahardhika
Top Pro

Rich existing libraries

Both shipped with implementations and spread all over the web. Both natively written or bindings to libraries written in other languages. Typically to build non-trivial applications there's no need to surf the web as many things are implemented already. Streaming, output templating, socket & networking, web, database, image manipulation, high performance graphics, (de)compression, (de|en)cryption, regex, unit testing, json manipulation, google API, indexing, multithreading, external process management, the list just goes on and on! See More
Mario Ray Mahardhika
Top Pro

Enforces good programming practice

Numerous strong compile time checks with optional runtime checks ensure one doesn't do stupid things and even when one does (because the compiler can't prove it at compile time), the binary will check and report it at runtime. Correct modular programming implementation with proper namespacing, no file inclusion hack. See More
Ray
Peter Dunne
IntuitivePatollo
Top Pro

Easy GUI creation

Visual Basic may have predated Delphi but Delphi was the ground breaking visual designer which set the standards expected today by most GUI developers. Its rich component set was well designed, structured and extensible, it even has the ability to display live data from the attached database in its data controls. See More
Thomas
Top Pro

Still active

From the early roots of Pascal, Delphi has been developed and is still actively supported. It is used in many desktop applications today, and even supports multi platform coding. See More
ResoluteKullervo
AmbitiousHonos
Top Pro

Reliable language and code base

Most code from the Turbo Pascal days in the 80s still compiles, yet the language has since been adapted and extended with modern concepts, introducing OOP and interfaces, exception handling, native Unicode support, anonymous methods, generics, ARC and more. See More
Jon Aasenden
Top Pro

Language depth

Object Pascal is being used to write custom kernels (Ultibo) and operating-systems for various ARM boards. So the way you work with the code scales from low-level to pure OOP high-level. Object Pascal has the same level of depth that you find in C/C++ but with added productivity. See More
Marcus Fernström
Top Pro

Incredible GUI design tools

Lazarus and Delphi are both incredible GUI design tools, making rapid development a reality. Making changes to a GUI doesn't mean switching tools or waiting for things to load, it's right there as part of your core tools. See More
Simona
CromulentFides
Gerhard Eichhorn
Top Pro

Dynamic evolution of language

Object Pascal language still evolving and being updated by Delphi (Embarcadero) and Free Pascal team (Lazarus). See More
Paolo
Edgar Fernando Rodriguez Pacheco
Top Pro

Assembler Code and DLL/SO creation

You can put Assembler code in Intel or AT&T formats, to achieve great results of speed and accuracy. It is possible to create Dynamic Link Libraries or their equivalent in Unix-like systems so it's relatively easy to use and powerful. See More
Paolo
BraveElegua
Top Pro

Well balanced for desktop development

For desktop development, Delphi is productive, the code is easy to understand, compilation speed is blazing, and it produces well performing applications that are easy to deploy. The perfect balance between C# and C++. See More
Peter Dunne
Top Pro

Extensive third party libraries

There are large collections of third party components, many free which enable developers to add wide ranging and complex functionality to their code with ease See More
CaringChemosh
Top Pro

Fast execution

The compiler generates fast and optimized code. No stop-the-universe garbage collection. See More
Simona
ConsiderateShaushka
Top Pro

Automatic memory management

The new Delphi compilers are powered by Automatic Reference Counting to ease development. See More
Simona
Gerhard Eichhorn
Top Pro

Excellent database development

See More
Marcus Fernström
Top Pro

Available on a ridiculous number of platforms

FreePascal is available on/for Intel x86 (including 8086), AMD64/x86-64, PowerPC, PowerPC64, SPARC, ARM, AArch64, MIPS and the JVM. Supported operating systems include Linux, FreeBSD, Haiku, Mac OS X/iOS/iPhoneSimulator/Darwin, DOS (16 and 32 bit), Win32, Win64, WinCE, OS/2, MorphOS, Nintendo GBA, Nintendo DS, Nintendo Wii, Android, AIX and AROS. See More
Gerhard Eichhorn
Top Pro

Component based (reusability, decoupled, rich design architecture)

See More
Endi Sukaj
Semantyx
Top Pro

Suitably close to modern languages, without the pitfalls

It was developed as a teaching language and it shows. No syntax pitfalls and gently encourages good style. See More
Specs
Price:Free (FreePascal, GNU Pascal), varying price (Delphi)
Standard:ISO/IEC 7185:1990 Pascal and ISO/IEC 10206:1990 Extended Pascal
HideSee All Experiences
205 57

Julia

All
15
Experiences
Pros
12
Cons
2
Specs
Monika
Deuxis
Mantas Zimnickas
Top Pro

Almost as fast as C

Julia runs almost as fast as (and in fact in some cases faster than) C code. See More
gilch
Laura Kyle
Top Con

Young language with limited support

Julia was released in 2012. Due to its short existence, there is a limited amount of support for the language. Very few libraries exist as of yet, and the community is still quite small (though growing quickly). See More
thermoplastics
Top Pro

Great standard REPL

Out of the box Julia has a very good Read-Eval-Print-Loop, which both completes functions and types, as well as completion based on history of previous statements. It integrates well with the shell and has an excellent online help system. See More
Monika
thermoplastics
Top Con

1-based array and column major

This design probably comes from Matlab, but makes it unnatural to interface C and C++ and python. See More
thermoplastics
Top Pro

Nice regular syntax

Julia code is easy to read and avoid a lot of unnecessary special symbols and fluff. It uses newline to end statements and "end" to end blocks so there is no need for lots of semicolons and curly braces. It is regular in that unless it is a variable assignment, function name always comes first. No need to be confused about whether something is a method on an object or a free function. Unlike Python and Ruby, since you can annotate the types a function operates on, you can overload function names, so that you can use the same function name for many data types. So you can keep simple descriptive function names and not have to invent artificial function names to separate them from the type they operate on. See More
ComposedLugh
Top Pro

Written in itself

The Julia language is written in itself to a much larger extent than most other languages, so a budding programmer can read through the depths of the standard library and learn exactly how things work all the way down to the low-level bit-twiddling details, which can be englightening. See More
Deuxis
Top Pro

Amazing learning curve

Julia requires no boilerplate code – a beginner needs to write only the parts they care about. This combined with the REPL provides the best learning experience available. See More
Deuxis
Top Pro

High-level code

Julia provides a high level of abstraction, making platform-independent programming trivial and easing the learning curve. See More
Mantas Zimnickas
Top Pro

Function overloading

You can have multiple functions with the same name, but doing different things depending on function arguments and argument types. See More
PracticalNereus
Top Pro

Strong dynamic typing

Dynamic and high level, but does not isolate the user from properly thinking about types. Can do explicit type signatures which is great for teaching structured thinking. See More
LoveableKisshoten
Top Pro

Strong Metaprogramming

Julia allows you to edit Julia code in the language itself and write powerful macros. It is a great introduction to metaprogramming features See More
Deuxis
Mantas Zimnickas
Top Pro

Powerful n-dimensional arrays

Julia has built in n-dimensional arrays similar in functionality as Python's numpy. See More
Mantas Zimnickas
Top Pro

Function and operator broadcasting

You can perform operations on scalars, for example 2^2 or [1, 2, 3].^2. See More
DelightfulChloris
Top Pro

REPL-based

The Julia REPL allows quickly testing how some code behaves and gives access to documentation and package management immediately in the REPL. See More
Specs
Platforms:Windows, Linux, Mac, FreeBSD
Current stable version:1.5.3
Type Model:Dynamically Typed
HideSee All Experiences
217 60

Idris

All
6
Experiences
Pros
2
Cons
4
Jonathan
Tom Raleigh
Top Pro

Full dependent types

Idris not only has support for type classes, but is a fully dependently typed language, giving you the full power to statically verify your code. See More
Carson “unknone9394” W
Top Con

Not widely used

See More
thermoplastics
Suneej Surendran Nair
Top Pro

Domain driven design and type driven development

Because of full dependent types in Idris, the programmer can focus more on modelling the domain with types and waste less time fixing common bugs that the type checker will catch. Dependent types help apply type driven development and a lot of code auto generation, making the compiler and type checker an ally in developing working software instead of just getting in the way. See More
Carson “unknone9394” W
Top Con

Not widely used

See More
Tom Raleigh
Top Con

Weaker type inference

As type inference is undecidable for dependently-typed languages, Idris cannot offer the full type inference that Haskell supports, and so more type annotations will be needed. See More
Tom Raleigh
Top Con

Different semantics from Haskell

Idris, while similar to Haskell, has strict semantics, which may cause some confusion if your backend is done in Haskell. If using Idris, it would make sense to do the backend in Idris as well, if not for the fact that Idris currently has fewer libraries available for web development than Haskell. See More
Hide
52 22

Clojure

All
16
Experiences
Pros
12
Cons
3
Specs
Endi Sukaj
Top Con

Confusing error messages

Clojure's error messages more often than not are very confusing. They usually involve stack traces that do not thoroughly explain where the error was caused or what caused it. See More
Endi Sukaj
Mario T. Lanza
Top Pro

Immutability is the default

Clojure programmers are highly encouraged to use immutable data in their code. Therefore, most data will be immutable by default. State change is handled by functions (for transformations) and atoms (an abstraction that encapsulates the idea of some entity having an identity). See More
rystrm
Top Con

Tied to the JVM and it's limitations.

Some language constructs were obviously created as workarounds for JVM limitations. This makes the language much less elegant than it could have been. Also, the JVM has a very cumbersome FFI. See More
Mario T. Lanza
Top Pro

Minimal syntax

Being a LISP, programs are simple: they're just functions and data. That it doesn't get bogged down with syntax or the loftier FP concepts like monads makes it one of most approachable functional languages for beginners. See More
G. P. II
Top Con

Syntax can be alien / jarring for those used to other Lisps

Perhaps some may consider this attribute an advantage, but I do not. Clojure does not attempt to maintain significant compatibility with other Lisps. So, if you already know a Lisp or are used to the way Lisp works in general, you'll probably be confused if you take a look at Clojure. See these resources for more details on this subject: https://clojure.org/reference/lisps http://stackoverflow.com/q/6008313/2636454 http://gilesbowkett.blogspot.com/2015/01/one-major-difference-between-clojure.html http://softwareengineering.stackexchange.com/q/153128/166211 See More
Endi Sukaj
Top Pro

Tries to solve problems as simply as possible

Simplicity is one of the pillars on which Clojure is built. Clojure tries to solve many problems in software development as simply as possible. Instead of building complex interfaces, objects or factories, it uses immutability and simple data structures. See More
Endi Sukaj
Top Pro

Good for writing concurrent programs

Since Clojure is designed for concurrency, it offers things like Software Transaction Memory, functional programming without side-effects and immutable data structures right out of the box. This means that the development team can focus their energies on developing features instead of concurrency details. See More
Endi Sukaj
Top Pro

Huge ecosystem of libraries to work with

There's a very large ecosystem of high-quality Clojure libraries which developers can use. One example is Incanter. It's a great data analytics library and a very powerful tool for dealing with matrices, datasets and csv files. See More
Endi Sukaj
Top Pro

Cross platform

Clojure compiles to JVM bytecode and runs inside the JVM. This means that applications written in Clojure are cross-platform out of the box. See More
Gage Peterson
Top Pro

Rich Hickey

The creator is so awesome, he's a feature. Just look up his talks and see why. See More
OrganizedRundas
Top Pro

Dynamic language

A superb data processing language. While rich type and specification systems are available they are optional. See More
Laura Kyle
OrganizedRundas
Top Pro

Extensible

Clojure has an elegant macro system which enables language additions, Domain-specific languages (DSLs), to be created much easier than most other languages (with the exception of Racket, perhaps). See More
Endi Sukaj
Top Pro

Great tool used in automating, configuring and managing dependencies available

Leiningen is a very useful tool for Clojure developers. It helps wiht automation, configuration and dependency management. It's basically a must for every Clojure project. See More
Chloe Montanez
TallTumatauenga
Top Pro

No C/Java syntax

Refreshing, BTW! See More
Endi Sukaj
Gage Peterson
Top Pro

Game is available with which you can learn Clojure

Nightmod is a tool used to make "live-moddable" games. It displays the game's code while you are playing and allows you to inject new code using Clojure. This can be a fun and useful experience for people trying to learn Clojure. See More
Specs
Platforms:Windows, Linux, Mac
Price:Free, Open Source
Current stable version:1.10.1
GZipped size:3.7Mb, requires JAVA
See All Specs
HideSee All Experiences
529 171

Common Lisp

All
5
Experiences
Pros
5
Brian Levy
Top Pro

Carefully designed for interactive use

Almost all aspects of the language are designed with interactive/repl use in mind. See More
thermoplastics
Slimothy
Moyamo de Hacker
Top Pro

Very Powerful REPL with SLIME

SLIME (Superior Lisp Interaction Mode for Emacs). See More
Brian Levy
Top Pro

Condition/restart system

It is easy to recover from errors. Error resolution can be determined by the user at the REPL. See More
OpinionatedTaranis
Top Pro

Image based runtime

The state of the program may be saved and reloaded as an image, supporting safer modification of the running program. New code may be compiled into the image as the program runs, while late binding ensures that symbol redefinitions take effect throughout the program. See More
EncouragingTonacacihuatl
Top Pro

Almost as fast as, or faster than, C

Some compilers such as SBCL can be faster than C or other low-level languages, and most compilers can generate fast native code. See More
Hide
156 59

Dart

All
19
Experiences
Pros
13
Cons
5
Specs
Endi Sukaj
Emil Persson
Top Pro

Great async language support

Dart is a single threaded programming language. So if any piece of code blocks the execution of the program, the program practically freezes. To avoid this Dart makes use of asynchronous operations which let your program run without getting blocked. This is done through Future objects. A Future is an object which represent a means for getting a value at a certain point in the future. A function may invoke a Future and when that happens, two outcomes can be achieved: The function is unable to return a value, so it queues up work to be done and returns an uncompleted Future object. Or later when a value is available to be returned, the Future object completes with that value. See More
Wernight
Top Con

Doesn’t generate consumable JavaScript at present

Dart builds to JavaScript but the entire app needs to be built to JavaScript at once for now (that may change in the future). See More
Endi Sukaj
Ryan
Monty Rasmussen
Top Pro

Great standard library

Dart includes a truly comprehensive core library, making it unnecessary to include disparate, external resources for basic functionalities Other than reducing the need to pull in various 3rd-party utilities this also ensures that all Dart code looks and feels the same. Out of the box, the developer gets core libraries to help with: async, collections, strings, regexps, conversions, formats, file I/O, math, typed data, and more. See More
techbeamers
Top Con

Still many holes to fill while converting code to Javascript

While implementing callbacks, passing a type to any function that gets passed to Javascript causes the dart2js compiler to crash. See More
Bryan
Endi Sukaj
Frank Pepermans
Top Pro

No compile time in development

Dartium (Chromium derivative) is a browser with integrated Dart VM, which allows you to run and debug native Dart code during development for short edit-reload cycles. Only for testing on other browsers and deployment is transpiling to JS necessary. See More
Andrew Mezoni
Top Con

Dart SDK does not provide standard (out of the box) way to access SQL-based databases on server side

This missing (but very popular) feature requires to use 3rd-party packages developed by the personal enthusiasts or very small groups of enthusiasts, which is not very convenient because they are all very fragmented in terms of content, the essence and capabilities. See More
Endi Sukaj
Günter Zöchbauer
Laura Kyle
Top Pro

A lot of tools are available to help in developing with Dart

Dart has a lot of tools available which help with developing Dart applications. Some examples of those tools include: pub - package and dependency management and build tool analyzer - static syntax analysis with linter, quick fixes, autocompletion support for easy IDE integration test - powerful and flexible testing framework and test runner dev_compiler - generate reusable JS instead of tree-shaken minified JS output (work in progress) dartfmt_ - source code formatter server-side VM observatory - a powerful tool for profiling and debugging running Dart code (for Dartium and Dart server code) See More
Tim Perry
Top Con

Small community, little momentum

See More
Endi Sukaj
Günter Zöchbauer
Top Pro

Transpiled JavaScript code works on all browsers

In Dart many browser differences (subtle differences and also missing features) are abstracted away or polyfilled. When Dart is transpiled to JS the output works on all supported browsers. There is usually no need to load polyfills or to consider browser differences during development. No need for libraries like jQuery to make the same code work the same on all browsers. See More
Endi Sukaj
Top Con

May be difficult to use some JavaScript libraries

Dart is much more than a programming language, it's a platform with its own standard libraries and tools. It's a major departure from JavaScript itself (even though it can compile to JS) that it's not possible to directly interact with JavaScript libraries in Dart. Instead, you have to use a special interop library which exposes the wrapped versions of the JavaScript objects that you are accessing. While this enables Dart to sandbox JavaScript so that its problems do not leak into a Dart application, it also means that it may be cumbersome to use libraries which don't have a wrapper library available. See More
Bryan
Ryan
Endi Sukaj
Top Pro

Will be familiar to Java developers

The language will look familiar to Java developers, easing the learning curve. And yet, while it's similar, it has some nice syntax facilities to avoid common boilerplate code found in Java. Code is terser, yet readable. See More
Endi Sukaj
krupal shah
Top Pro

Easy prototyping

Dart has an optional type system which makes Dart a great language for prototyping. It encourages developers to gradually evolve their programs without worrying about types first. See More
Endi Sukaj
Seth Ladd
Top Pro

Can compile to efficient machine code

Dart was designed to be as expressive as possible. Ahead-of-time compilers can compile Dart code to efficient machine code. This is especially important when deploying to mobile where you don't want (or can't) use a JIT. See More
LeoTM
Top Pro

AngularDart 2.0 support

See More
Athanasios Voivodas
Top Pro

Optional strong mode.

Strong mode applies a more restrictive type system to Dart to address its unsound, surprising behavior in certain cases. See More
Endi Sukaj
Andrew Mezoni
Top Pro

Support of semi-coroutines (generators)

Generators, also known as semicoroutines, are also a generalization of subroutines. Generators are primarily used to simplify the control of iteration behavior of a loop, the yield statement in a generator passes a value back to a parent routine. A generator is very similar to a function that returns an array, in that a generator has a certain number of values. But instead of building and returning an array that contains all the wanted values, a generator returns them one at a time, this saves memory and allows the caller function to start processing the first few values immediately. See More
Endi Sukaj
Andrew Mezoni
Top Pro

The Dart to JavaScript compiler generates high quality source code

Dart to Javascript compiler (dart2js) generates very high quality source code with very high optimization. The output code is also very readable and easy to understand. See More
Anders Thorhauge Sandholm
timlyo
Top Pro

Crossplatform

Dart does not just compile to JavaScript, it also compiles to native code on mobile platforms like iOS and Android as demonstrated by flutter.io See More
Specs
Current stable version:2.1.0
IDE Support:Good quality IDE plugins for Jetbrains IDEs and Visual Studio Code
Standard:ECMA
HideSee All Experiences
273 100

C#

All
23
Experiences
Pros
13
Cons
9
Specs
Laura Kyle
Aethec
Top Pro

.NET is a great toolbox

C# runs on top of the .NET framework, which provides many libraries containing classes used for common tasks such as connecting to the Internet, displaying a window or editing files. Unlike many other languages, you don't have to pick between a handful of libraries for every small task you want to do. See More
Laura Kyle
Alexey Cherkaev
Top Con

Complex syntax

Too many syntactic constructs to learn before it becomes usable. See More
Adam
Top Pro

Incredibly Well-Engineered Language

Where other languages invoke the feeling of being a product of organic growth over time, C# just feels like an incredibly well-designed language where everything has its purpose and almost nothing is non-essential. See More
ExcitedThoon
Theodore Lief Gannon
Eonil
Top Con

Older versions lacks standard-library support for immutable data structures

See More
Laura Kyle
CheesySquirrel
Aethec
Top Pro

Awesome IDE for Windows

On Windows, Visual Studio is the recommended C# IDE. It provides a very flexible GUI that you can rearrange the way you want and many useful features such as refactorings (rename a variable, extract some code into a method, ...) and code formatting (you can pick exactly how you want the code to be formatted). Visual Studio also highlights your errors when you compile, making your debug sessions more efficient since you don't have to run the code to see the mistakes. There's also a powerful debugger that allows you to execute the code step-by-step and even change what part of the code will be executed next. In addition to giving you all the line-by-line information you'll need in a hassle-free manner, Visual Studio has stuff you can click on in the errors window that will take you to the documentation for that error, saving you several minutes of web searching. In addition to all of this, Visual Studio has an intuitive, intelligent, and helpful graphical user interface designer that generates code for you (the best of WYSIWYG, in my opinion), which is helpful for new programmers. Being able to create a fantastic-looking UI with one's mouse and then optionally tweak with code helps make programming fun for beginner developers. Visual Studio also has the best code completion --Intellisense is every bit as intelligent as the name says it is. It, as well as VS's parameter hinting, is context-, type-, user-, and position-sensitive, and displays relevant completions in a perfectly convenient yet understandable order. This feature allows a new programmer to answer the questions "What does this do?" and "How do I use it?" right then and there rather than having to switch to a browser to read through extensive documentation. This allows the programmer to satisfy their curiosity before it is snuffed out by several minutes of struggling through exhaustive documentation. And for the more adventurous and text-ready developer, Microsoft does the best job of ensuring that everything, from interfaces and wildcard types down to Console.WriteLine("") and the + operator, is well-documented and easy to understand, with relevant and well-explained usage examples that manage to be bite-size yet complete, simple yet truly helpful. The reference site is easy to navigate, well-organized, clean and uncluttered, up-to-date, and fresh and enjoyable to look at, and every page is well-written with consideration for readers who are not C# experts yet want to read about changing the console background color. The best part? It's free! Visual C# Express contains all of the features described above, at zero cost. If you are a student, you can probably get Visual Studio Professional from your university, which also includes tools for unit testing and supports plugins. See More
PoliteGwydion
Top Con

A pale imitation of Java

C# is a Java-like language, but Microsoft failed to imitate Java's consistency. For instance, C# has types that cannot be passed by address (e.g. DateTime), forcing the developer to use ugly workarounds. See More
Laura Kyle
Slimothy
Aethec
Top Pro

Great introduction to object-oriented programming

Object-oriented programming is the most widely-used paradigm. C# offers support for common OOP features such as classes, methods and fields, plus some features not found in competing languages like properties, events and static classes. C# code is much more readable thanks to the syntactic sugar it offers. You can truly concentrate on your code, not on the way it's implemented. See More
Carl Walsh
Endi Sukaj
Top Con

Too easy to write multithreading apps that are buggy

Many web frameworks or GUI libraries will push novice users to writing multithreaded code, which leads to frustrating race condition bugs. Other languages with multithreading push users towards safe constructs, like passing messages and immutable or synchronized containers. But in C# the data structures aren't synchronized by default, and it's too easy to just set a field and observe the result from another thread (until you compile with Release, and now you have a heisenbug). See More
Theodore Lief Gannon
Aethec
Top Pro

Supports some functional features

C# is primarily object-oriented, but it also supports some features typically found in functional languages such as lambdas, delegates and anonymous classes. Methods can be treated like any other object, and the Linq query system operates on monads with lazy evaluation (though it hides this with a lot of syntactic sugar). You don't need to use these features to code in C#, though, so you can start with OOP and then learn about them. See More
Endi Sukaj
Blanco
Top Con

Often-used products in most C# development environments get expensive

The majority of the C# development community uses Microsoft products which are not all free and open-source. As you get into the enterprise level of some of these products and subscriptions, the expense is multiple factors of 10 greater. While you can use a fully open-source and free C# environment, the community around that is much smaller. While this can be said for other languages as well, the majority of C# falls into the for-pay Microsoft realm. See More
ThriftyNannaNepsdottir
Top Pro

Awesome IDE for cross-platform development

Visual studio has embraced cross platform development over the past 3 years. With Visual Studio Code, you now have a light, and quick IDE variant available for free as well. See More
Anis-Barghouthi
Endi Sukaj
michael.switzer
Top Con

Popularly used on Visual Studio (proprietary)

Most people learn and depend on Visual Studio (proprietary) to write C#. The result is people learn how to use an IDE and not the concepts or fundamentals of good programming. However, you don't need VS to develop in C#, all you need is the dotnet CLI and a text editor that supports OmniSharp like VSCodium, Vim and Emacs. See More
Aethec
Top Pro

Best language for Windows programs

C# is clearly the best choice for Windows programs. The .NET framework contains everything you need to build great-looking apps, without having to learn the confusing Win32 API or download a ton of external libraries. C# can also be used to build Windows 8's "modern" apps. See More
Reviews
Top Con

Large Library and eco system makes it unsuitable for beginers

yes, all the information about the .net framework is in one place, but it is so extense that it introduces a steep learning curve for newcomers to the field of programming languages. See More
thermoplastics
Craig
Top Pro

With ASP CORE a good language to learn

With CORE you are no longer just limited to Windows, so a language worth learning. See More
Simona
CromulentFides
Top Con

.NET is a mess

Continual drama with standards, updates, Microsoft, and being really cross-platform. See More
Endi Sukaj
apokryfos
Top Pro

Can mix high and low level programming

You can code at the high level without worrying about pointers and memory management, but if you so choose you can switch to lower level programming with direct memory management and pointer manipulation (though you need to compile to specifically allow this). See More
MightyHedetet
Top Con

Excessively class based OOP oriented

Limits users into overly using awkward paradigm and creating another kind of spaghetti code. See More
teadan
ThriftyNannaNepsdottir
apokryfos
Top Pro

Very high demand in the industry

C#'s been around for just the right amount of time, is regularly updated with useful additions, is versatile, easy to write & read, & has excellent tooling support. This means it is a top choice for many organizations & will remain so for the foreseeable future. See More
Aethec
Top Pro

Supported on many platforms

C# can be used for Windows apps, Linux apps, OS X apps, Windows 8 "modern" apps, websites, games, iPhone apps, Android apps, Windows Phone apps, and more. If you want to create a cross-platform application, you can share most of the code and write one GUI for each platform. See More
JM80
Jiří Sýkora
Top Pro

.NET truly universal

With .NET core it is a truly universal programming language which support desktop apps (Windows), Mobile apps (Xamarin), Web Apps (ASP.Core MVC). Also is perfectly fit to serverless programming for micro services. Soon it will be also support Web assembly (Blazor). See More
Laura Kyle
Slimothy
nDman
Top Pro

Great language for Unity game engine

Unity provides a selection of programming languages depending on preference or knowledge - C#, JS, Boo and UnityScript. C# is arguably the most powerful with better syntax and stronger language structure. It allows using script files without attaching them to any game object (classes, methods inside unattached scripts that can be used at any time). There are more tutorials and information for C# than UnityScript and Visual Studio can be used to code for unity in C#. Additionally, learning C# allows using it outside of Unity as well unlike UnityScript. See More
Specs
Platforms:Windows, Linux, Mac, Android, IOS
License:MIT, Open Source
IDE Support:Visual Studio on Windows, JetBrains Rider, Visual Studio Code on other platforms
Standard:ECMA
HideSee All Experiences
397 158

TypeScript

All
30
Experiences
Pros
16
Cons
13
Specs
Yoshiyuki
kaguru
Laura Kyle
Top Pro

Optional static typing

Typescript has optional static typing with support for interfaces and generics, and intelligent type inference. It makes refactoring large codebases a breeze, and provides many more safeguards for creating stable code. See More
Endi Sukaj
Laura Kyle
Tim Etler
Top Con

Too similar to Javascript

Presents some advantages compared to Javascript, but because it is designed to be a superset of Javascript, it means all the bad parts of Javascript are still present. See More
thermoplastics
Balázs Zubák
Top Pro

Strong typed language

Lot of benefits of it, you can read this. See More
PleasantWurugag
Top Con

Type checking not enforced by default

You have to use compiler flags to make sure it catches flaws like usage of implicit any, etc. See More
Laura Kyle
Tim Etler
Aubrey
Top Pro

Strict superset of Javascript

Every existing Javascript program is already a valid TypeScript program giving it the best support for existing libraries, which is particularly useful if you need to integrate with an existing Javascript code base. See More
Endi Sukaj
Big Dubb
Laura Kyle
Top Con

Type inference coverage is incomplete

The default type when declaring and using a variable is any. For example, the following should break but does not: function add(a:number) { return a + 1 } function addAB(a, b) {return add(a) + b} addAB("this should break but doesn't :(", 100) In order to avoid this, you have to declare type signatures for every variable or parameter or set the flag --noImplicityAny when running the compiler. See More
Yoshiyuki
Endi Sukaj
Tim Etler
Top Pro

First party Visual Studio support

As a Microsoft developed project, it has first party Visual Studio support that's on par with its C# support with features like syntax sensitive statement completion. See More
PleasantWurugag
Top Con

Requires "this" for field access

Even in cases were there is no ambiguity, you still have to use "this.fieldName" instead of just "fieldName". See More
Dmitry Gurovich (yrtimiD)
Top Pro

Has a repository of high quality TypeScript type definitions for popular libraries

There are many ready to use and high quality TypeScript definitions for popular libraries including jquery, angular, bootstrap, d3, lodash and many-many more. See More
Ag Ibragimov
Top Con

Syntax is too verbose

See More
danmane
Top Pro

Adds support for object-oriented programming

Typescript enables familiar object-oriented programming patterns: classes, inheritance, public/private methods and properties, et cetera. See More
Yoshiyuki
PleasantWurugag
Top Con

No support for dead code elimination

Typescript compiler does not remove dead code from generated file(s), you have to use external tools to remove unused code after compilation. This is harder to achieve, because Typescript compiler eliminated all type information. See More
Wernight
danmane
Top Pro

Polyfill for ES6 fat-arrow syntax

Typescript implements the fat arrow syntax, which always maintains the current context for this and is a shorter/more convenient syntax than traditional function definition. See More
PleasantWurugag
Top Con

No support for conditional compilation

There is no clean way to have debug and release builds compiled from the same source, where the release version removes all debugging tools and outputs from the generated file(s). See More
Daniel Earwicker
Top Pro

Great support for React, integrated typed JSX parsing

Strongly typed react components, so UI "templating" automatically gains type safety. See More
CompetentPaidia
Top Con

Awful error messages

Comparing to Elm or Rust for example, TypeScript's error messages won't say you very much. For example if you change method of interface which your class implements it won't say your class have incorrect implementation. Instead it'll show error in usage of instances of class. In some cases it can spoil hours of your work trying to figure out why your parameters are incorrect. See More
Mike Bridge
Laura Kyle
Abraão Alves
Top Pro

Great support for editors (Sublime, Code, Vim, IntelliJ...)

See More
Simona
KlarkC
Top Con

Technical debt

As consequence of not enforcing type checking. See More
webwake
Top Pro

Works well with existing Javascript code

Both can call Javascript code and be called by Javascript code. Making transitioning to the language very easy. See More
Simona
Anthony Bobenrieth
Top Con

Far less typed libraries than Dart (and TSD are never up to date)

Just compare this and this. Typescript => 930 Dart => 2060 See More
Monika
webwake
Top Pro

Compiles to very native looking code

Compiles to simple looking Javascript making it easy to understand what is happening and learn the language (if you already know Javascript). See More
PleasantWurugag
Top Con

No Java-like package structure

If you prefer a Java-like approach of partitioning your code into different packages, the module system of typescript will confuse you. See More
thermoplastics
Endi Sukaj
Laura Kyle
Top Pro

Built and supported by Microsoft

Being built by Microsoft, TypeScript is much more likely than most other similar open-source projects to receive continued long-term support, good documentation, and a steady stream of development. See More
Solon
Julia Y
Top Con

Small community

See More
CourageousAriadne
Top Pro

Ability to do functional programming

See More
Simona
dm
Top Con

No option to declare that a function throws errors

See More
Endi Sukaj
Top Pro

Clear roadmap

TypeScript has a clear and defined roadmap with rapid and constant releases. See More
Endi Sukaj
Top Pro

Low number of logical errors brought in by built-in type annotations

TypeScript's built-in type signatures allow developers to fully document interfaces and make sure that they will be correctly compiled. Therefore, cutting down on logical errors. See More
Wernight
Top Pro

Works well with Angular 2

Angular 2 is built using TypeScript and applications built using it can make use of that (or not). See More
Specs
Current stable version:3.7
IDE Support:Very good
HideSee All Experiences
325 140

F#

All
11
Experiences
Pros
8
Cons
2
Specs
Endi Sukaj
Tony
Top Pro

Concise syntax

F#'s syntax tends to be terse while remaining very readable and easy to understand without being a chore to write. See More
Laura Kyle
rystrm
Top Con

Has no ad-hoc polymorphism (á la Type Classes)

You have generics, you have interfaces, you have inheritance, you have a lot of things at your disposal but you don't have Type Clases. They can be emulated using some clever constructs but there's nothing like having the real thing. See More
Tony
Top Pro

Easier transition from other paradigms

Since F# is not a purely functional language, it lends itself to being more easily picked up by programmers that have experience with other paradigms. See More
CoherentToutatis
Top Con

Infested with OOP

Still relying on .NET OOP libraries. See More
Endi Sukaj
Slimothy
Tony
Top Pro

.NET Interoperability

Since F# runs on the Common Language Runtime or CLR, it has access to the entire .NET Framework, as well as libraries written in other .NET languages such as C#, VB.NET, and C++/CLI. See More
rystrm
Top Pro

Multiplatform, it runs on .Net Core

Forget Xamarin and Mono. F# now runs on the multiplatform .Net Core! See More
WhiteLilac
Mangel Maxime
Top Pro

You can run F# in the browser

Thanks to a project like Fable, you can write and run your client app in F# and run it over JavaScript. It allows you to share code between your server and client. See More
Slimothy
Kribbel
Top Pro

Natively supported by Visual Studio

This is a .Net language natively supported by Visual Studio. Though it is not as tooled up as C# the support is still substantial. In particular, C# deployment scenarios can be enabled for it with small C# wrapper projects. Integration with Visual Studio provides: IntelliSense, debugging, projects an other features. See More
Matthew Chudleigh
Top Pro

Fall into the pit of success

F# directs you into a workflow where the right way is the path of least resistance. Coming from a C# background, its restrictions might feel arbitrary at first (e.g., what do you mean my code has to be in dependency order!? Arbitrary alphabetical or bust!), but you'll soon realize that your code is cohesive, concise and consistent in a way that it never was before - and you can compile and run with confidence! See More
thermoplastics
Tom7
Top Pro

F# is supported by Xamarin

Thanks to Xamarin, F# is a functional language that you can use to build for iOS, Android and Windows. See More
Specs
License:Apache 2.0
Current stable version:6.0
IDE Support:Visual Studio, Code, Rider
HideSee All Experiences
171 83

C

All
36
Experiences
Pros
17
Cons
18
Specs
Jonathan
Slimothy
Stuart Kearney
Top Pro

Understanding of computers

Learning C forces you to grapple with the low-level workings of your computer (memory management, pointers, etc.) in ways that the other languages abstract away. Without an understanding of these low-level aspects of computer programming you will be limited if you try to develop an application that needs to run in a memory or performance constrained environment. Other languages like Python can obscure a lot of details, so your foundation may be weaker. See More
depp
Top Con

Languages is full of corner cases and undefined behaviors

Undefined behavior in a program can cause unexpected results, making it hard to debug. With UB, program behavior may vary wildly depending on optimization settings. There are many cases that invoke UB, such as signed overflow, invalid dereferences, large integer shifts, uninitialized variables, etc. These serve to frustrate novice programmers when they could be learning other concepts. See More
Endi Sukaj
Top Pro

Helps with learning other languages later

A lot of languages used in the industry have a C-like syntax (C++, Java, Javascript, C#, PHP) and starting with C will help new developers to be familiar with it's syntax and by extensions with the syntax of many popular languages. See More
Deb
Top Con

Requires memory management

Learning programming is already hard enough when you don't have to worry about memory leaks. See More
Slimothy
Michael Kehoe
Top Pro

Industry standard

C is the industry standard programming language, moreover, it is the most popular programming language to use. C is the language used for most Windows, UNIX and Mac operating systems. See More
Endi Sukaj
Laura Kyle
Inside System
Top Con

C will require you to learn concepts too advanced for most beginners

While other programmers will learn algorithms and structures and will do magic tricks and awesome applications, you will learn trash info that you should know maybe after 5-7 years experience in software development, not earlier. It's like going the first time as a seven year old kid to first school class, and your teacher tells you to learn you about Discrete Math, without basic math and how to do 2x2. If you wish to be a really good programmer, C for sure will be in your portfolio, but not as a first language, and this programming language is used only for very hard and very limited tools which require a lot of professional skills from the programmer. See More
Paolo
Slimothy
cdt5050
Top Pro

Must-have

Capability to program in C is greatly appreciated in developers, creates an image of competency, and many programmers will learn it at some point in their careers. See More
Buster Blue
Laura Kyle
Garrett Oreilly
Top Con

Steep learning curve

While the language compliments knowledge of computer components very well, and gives a deeper understanding, it is also quite difficult to learn, and to use correctly, especially without aforementioned knowledge. See More
John Parsons
Endi Sukaj
Petrus Laredes
Top Pro

Portable

C is portable between most hardware. Generally a C compiler is made for any new architecture, and already exists for existing architectures. C is portable between all operating systems (Windows, UNIX, Mac, etc.) and only needs a program to be recompiled to work. This allows anyone on any operating system to learn about the language and not be held back by intricacies of their operating system. With this said, C's portability these days is not quite what it used to be. Much of said portability relies on the POSIX standard in particular, and as time passes, the compliance of a given system with that standard is becoming less certain; especially in the case of Linux. Most things will still be portable (or at least emulatable) between Windows, Linux, and FreeBSD for example; but you will at times need to make use of platform-specific support libraries and APIs as well. See More
Endi Sukaj
Laura Kyle
Michael Murphy
Top Con

Completely lacks type safety

The C standard library is not type safe, and the language itself does not promote type safety built into the language, which leads to error-proneness of the language. If anything, it would be recommended that those interested in C to instead put their time in D, which actually includes a complete copy of the C standard library rewritten to be fully type safe. See More
thermoplastics
Svjatoslavs Krasnikovs
Top Pro

Low level of abstraction

While higher level languages languages like Java and Python provide possibilities to be "more expressive" per line of code, it's much more convenient to start with "less efficient" (get me right) language, in order to get initial concepts of how things behave at lower level. Actually C is a good starting point moving to both higher and lower levels of abstraction, the good example here would be learning C before Assembler, as for general use the Assembler quite hard to understand due to low level of its abstraction (like getting the understanding on how loops work in C before trying to implement them on Assembler). See More
Laura Kyle
Alexey Cherkaev
Top Con

Low-level

Depending on the purpose this can be either a pro or a con. If the task is to learn how to program, low-level of C will impend learning important concepts. Furthermore, C is rather limited in ways of building abstractions. "Low-levelness" of C can be a pro feature in learning system programming. See More
Paolo
EncouragingBeag
Top Pro

The king of languages, imitated, extended but never equalled

Made of a small set of keywords and rules, only your imagination is the limit. Above all, when it comes to 'pro' programming, C is the only one to rely on. See More
Laura Kyle
Michael Murphy
Top Con

Does not support modules; header file annoyances

Header files are a poor man's implementation of modules. Modern programming languages make use of modules which eliminate the need for C includes and header files and the many issues caused by them, such as the complete lack of dependency checking. Header files often contain even more include statements that point to other header files which also point to even more which drastically increases compile time. Modules only have to be compiled once, and when importing those modules into your software project, you only have to pull in the module that you are using, which is often times already precompiled. This way, the compiler knows exactly what it needs before beginning to compile your project and can automatically compile the few dependencies it needs in advance rather than recursively compiling every header file it runs across as in C. See More
Emma
Top Pro

More control over the code

See More
Laura Kyle
Michael Murphy
Top Con

Compiles procedurally rather than intelligently

In the same manner that C recursively compiles header files ad infinitum without any sort of dependency checking, C source code is also compiled in the same manner. If you attempt to call a function before it is declared, the compiler will fail because the function was not compiled before it was caled. See More
Slimothy
Timothée Poisot
Top Pro

Teaches good practices

Writing in C will require you to understand how things are done. C implies using and understanding the fundamentals. Learning a higher-level language after is much easier. See More
Endi Sukaj
Michael Murphy
Top Con

Lack of support for first class strings

C does not support the string type, nor does it support UTF-8 strings that modern languages are employing today. Instead of strings, C makes use of the *char type which is a pointer to a character array. See More
Monika
John Parsons
Top Pro

Portable between CPU architectures

C was designed to be independent of any particular machine architecture, and so with a little care, it is easy to write "portable" programs (see here). By design, C provides constructs that map efficiently to typical machine instructions, and therefore it has found lasting use in applications that had formerly been coded in assembly language like operating systems or small embedded systems. See More
Simona
CromulentFides
Top Con

Other languages can do it easier or better

There are languages like Rust, Object Pascal, D, Golang, Vlang, Odin, Zig, Jai, etc... that can be used instead. The other languages are easier to understand, use, and/or about as fast. See More
teadan
Samuel Cherukutty
Top Pro

C is simple with lesser rules than any other language

C is standardized and it is the go-to language when you have to speed things up. See More
Laura Kyle
Michael Murphy
Top Con

Arrays are not first class objects

When an array is passed to a function, it is converted to a pointer, even though the prototype confusingly says it's an array. When this conversion happens, all array type information gets lost. C arrays also cannot not be resized, which means that even simple aggregates like a stack are complicated to implement. C arrays also cannot be bounds checked, because they don't know what the array bounds are. See More
teadan
LoveableMaui
Top Pro

Easy to drop down to assembly

Sometimes you really need to program directly in assembly. C’s ABI and common compiler extensions make this a piece of cake. See More
John Parsons
Top Con

Undefined behaviors and weak limited type safety

Subtle errors can render the entire program "undefined" by the complicated C standard. The standard imposes no requirements in such cases. Thus C compiler is free to ignore the existence of such cases and Bad Things are prone to happen instead. Even experts can't reliably avoid undefined cases in C, so how can beginners be expected to do so? C allows for non-type safe operations such as logic errors, wild pointers, buffer overflow, etc. UB and type safety issues create a large number of bugs and security vulnerabilities. See More
hyphae
Top Pro

If you can't grok C you should not be a professional programmer

It sets an early bar that if you can't hurdle you might as well do something other than programming and not waste any more of your time. See More
Kevin Groat
Top Con

The need for C developers in the current market is very low, and trending downward

Older languages, like C, are no longer in their hay day. Even if you do learn it as your first language, you are only setting yourself up to need to learn another language in the long run. If you want a skill that you can not only learn from, but also potentially build a career on, C should not be your first choice. See More
Tyler
Top Pro

Basic concepts can be applied to accelerate learning any other language

You can easily pivot knowledge learned here and apply it to almost every other language. See More
Laura Kyle
Michael Murphy
Top Con

Isn't truly portable or cross platform

The C programming language is not portable to other operating systems, and even different compilers, because the C language does not provide any reference cross platform libraries or compilers. Different platforms and compilers provide their own implementation of the C standard library which may not be compatible with the implementation in another compiler or platform. Without cross platform libraries and tools, one cannot state that C is portable. This is in stark contrast to modern programming languages that provide their own cross platform libraries and compilers, such as D, Go and Rust. See More
Chuck
Top Pro

Ubiquitous

There is a C compiler available for probably every computer system in existence today. See More
Zack H
Laura Kyle
Michael Murphy
Top Con

Only offers basic support for source code split into multiple files

Modern programming languages are capable of compiling split source code files by concatenating them together efficiently at compile time before compiling them. However, C requires the developer to resort to messing with header files and makefiles to get similar functionality. See More
NonchalantDercetius
Top Pro

Low level langauge

See More
Laura Kyle
Michael Murphy
Top Con

C structs are very weak and outdated

C structs lack a lot of modern capabilities that are vital in programming languages of today, such as assigning member functions to structs to give them object-oriented capabilities, constructs, deconstructors and RAII. Great care must be used when using structs in C to prevent memory leaks and ridiculously slow structs. See More
Simona
NonchalantDercetius
Top Pro

Foundational, difficult but important

Learning C will teach valuable skills and transferrable understanding of computing. While learning a scripting language may be easier, students will not understand system constraints and performance problems, nor what features like garbage collection are actually doing in other languages. See More
Laura Kyle
Michael Murphy
Top Con

Includes require obscene resources to compile

All the modern languages have resulted in ditching the ancient deprecated model of #include statements and have instead adopted the superior model of modules. When compiling software written in C, the programmer is forced to also compile X headers which contain Y headers which contain Z headers and so forth -- drastically increasing the number of lines that need to be compiled. In order to compile something as simple as "Hello, World", for example, 18K lines of code needs to be compiled. This can be very taxing on RAM and CPU resources, causing compile times to quickly absorb a large portion of the programming process. See More
Laura Kyle
Michael Murphy
Top Con

Heavily outdated programming concepts

C lacks a large majority of programming concepts that modern languages make use of today. The existing functionality of C makes use of outdated and deprecated methodologies which can be of great annoyance to the modern day programmer. See More
Specs
Current stable version:C'18
Standard:ISO/IEC 9899:2011/Cor 1:2012 or C11
Typing discipline:static
Paradigm:imperative
See All Specs
HideSee All Experiences
470 211

Haskell

All
26
Experiences
Pros
13
Cons
12
Specs
gilch
David
Endi Sukaj
Top Pro

Forces you to learn pure functional programming

It is pure and does not mix other programming paradigms into the language. This forces you to learn functional programming in its most pure form. You avoid falling back on old habits and learn an entirely new way to program. See More
Monika
Slimothy
Top Con

Language extensions lead to unfamiliar code

Haskell's language extensions, while making the language incredibly flexible for experienced users, makes a lot of code incredibly unfamiliar for beginners. Some pragmas, like NoMonomorphismRestriction, have effects that seem completely transparent in code, leading beginners to wonder why it's there. Others, like ViewPatterns, and particularly TemplateHaskell, create completely new syntax rules that render code incomprehensible to beginners expecting vanilla function application. See More
Endi Sukaj
Peter Zeller
Top Pro

Open source

All Haskell implementations are completely free and open source. See More
gilch
Endi Sukaj
Slimothy
Top Con

Difficult learning curve

Haskell lends itself well to powerful abstractions - the result is that even basic, commonly used libraries, while easy to use, are implemened using a vocabularly that requires a lot of backround in abstract mathematics to understand. Even a concept as simple as "combine A and B" is often, both in code and in tutorials, described in terms of confusing and discouraging terms like "monad", "magma", "monoid", "groupoid", and "ring". This also occasionally bears its ugly head in the form of complicated error messages from type inference. See More
Ray
Slimothy
Top Pro

Highly transferable concepts

Haskell's referential transparency, consistency, mathematics-oriented culture, and heavy amount of abstraction encourage problem solving at a very high level. The fact that this is all built upon little other than function application means that not only is the thought process, but even concrete solutions are very transferable to any other language. In fact, in Haskell, it's quite common for a solution to simply be written as an interpreter that can then generate code in some other language. Many other languages employ language-specific features, or work around a lack of features with heavy-handed design patterns that discourage abstraction, meaning that a lot of what is learned, and a lot of code that is needed to solve a particular problem just isn't very applicable to any other language's ecosystem. See More
Endi Sukaj
Steven Sagaert
Marc Telesha
Top Con

Package manager is unstable & lacking features

Cabal (There are other choices but this is the most popular) can not uninstall a package. Also working at a few locations it is difficult to have the same environment for each one be the same. See More
Slimothy
Top Pro

Mathematical consistency 

As Haskell lends itself exceedingly well to abstraction, and borrows heavily from the culture of pure mathematics, it means that a lot more code conforms to very high-level abstractions. You can expect code from vastly different libraries to follow the same rules, and to be incredibly self-consistent. It's not uncommon to find that a parser library works the same way as a string library, which works the same way as a window manager library. This often means that getting familiar and productive with new libraries is often much easier than in other languages. See More
Gage Peterson
Top Con

You have to learn more than just FP

Haskell is not only a functional language but also a lazy, and statically typed one. Not only that but it's almost necessary to learn about monads before you can do anything useful. See More
Endi Sukaj
Slimothy
Top Pro

Referentially transparent

Haskell's Purely Functional approach means that code is referentially transparent. This means that to read a function, one only needs to know its arguments. Code works the same way that expressions work in Algebra class. There's no need to read the whole source code to determine if there's some subtle reference to some mutable state, and no worries about someone writing a "getter" that also mutates the object it's called on. Functions are all directly testable in the REPL, and there's no need to remember to call methods in a certain order to properly initialize an object. No breakage of encapsulation, and no leaky abstractions. See More
Endi Sukaj
Slimothy
Top Con

Symbols everywhere 

Haskell allows users to define their own infix operators, even with their own precedence. The result is that some code is filled with foreign looking operators that are assumed to be special-case syntax. Even for programmers who know they're just functions, operators that change infix precedence can potentially break expectations of how an expression is evaluated, if not used with care. See More
Jooyung Han
Top Pro

Hand-writeable concise syntax

Conciseness of Haskell lets us to write the expression on the whiteboard or paper and discuss with others easily. This is a strong benefit to learn FP over other languages. See More
ClassyAjtzak
Top Con

Obscure ugly notation

0 = 1 Using "=" like this: <code> -- Using recursion (with pattern matching) factorial 0 = 1 factorial n = n * factorial (n - 1) </code> Example from https://en.wikipedia.org/wiki/Haskell_(programming_language) is quite simply annoying aesthetics. See More
Slimothy
Top Pro

Very few language constructs 

The base language relies primarily on function application, with a very small amount of special-case syntax. Once you know the rules for function application, you know most of the language. See More
Endi Sukaj
rystrm
Top Con

Documentation for most packages is short and lacking

A few Haskell packages are well documented but this is the exception, not the rule. Most of the time a list of function signatures is what passes for documentation. See More
Slimothy
Top Pro

Quick feedback 

It's often said that, in Haskell, if it compiles, it works. This short feedback loop can speed up learning process, by making it clear exactly when and where mistakes are made. See More
Endi Sukaj
Steven Sagaert
Top Con

Too academic, hard to find "real world" code examples

See More
Endi Sukaj
Mario T. Lanza
Top Pro

Functions curry automatically

Every function that expects more than one arguments is basically a function that returns a partially applied function. This is well-suited to function composition, elegance, and concision. See More
Endi Sukaj
Slimothy
Top Con

You need some time to start seeing results

Haskell's static typing, while helpful when building a project, can be positively frustrating for beginners. Quick feedback for errors means delaying the dopamine hit of code actually running. While in some languages, a beginner's first experience may be their code printing "Hello World" and then crashing, in Haskell, similar code would more likely be met with an incomprehensible type error. See More
Endi Sukaj
Slimothy
Top Pro

Easy to read

Haskell is a very terse language, particularly due to its type inference. This means there's nothing to distract from the intent of the code, making it very readable. This is in sharp contrast to languages like Java, where skimming code requires learning which details can be ignored. Haskell's terseness also lends itself to very clear inline examples in textbooks, and makes it a pleasure to read through code even on a cellphone screen. See More
Monika
Endi Sukaj
Slimothy
Top Con

Lazily evaluated

Haskell's lazy evaluation implies a level of indirection - you're not passing a value, you're passing a thunk. This is often difficult to grasp not just for beginners, but for experienced programmers coming from strictly evaluated languages. This also means that, since for many, strict evaluation is their first instinct, initial expectations of a function's performance and complexity are often broken. See More
Endi Sukaj
Peter Zeller
Top Pro

Popular in teaching

Haskell is really popular in universities and academia as a tool to teach programming. A lot of books for people who don't know programming are written around Haskell. This means that there are a lot of resources for beginners in programming with which to learn Haskell and functional programming concepts. See More
WittySharraItu
Top Con

Only pure functional programming

Not proper functional programming but a subset of the style called pure functional programming. See More
Endi Sukaj
Stuart Kearney
Peter Zeller
Top Pro

Easy syntax for people with a STEM degree

Since the basic syntax is very similar to mathematics, Haskell syntax should be easy for people who have taken higher math courses since they would be used to the symbols used in maths. See More
Endi Sukaj
Steven Sagaert
Top Con

Curried type signatures obfuscate what were the in and out types originally

See More
Monika
holoed
Top Pro

Powerful categorical abstractions

Makes categorical higher order abstractions easy to use and natural to the language. See More
Specs
Site:https://www.haskell.org/
Paradigm:functional
Type System:static
HideSee All Experiences
390 179

Scala

All
11
Experiences
Pros
7
Cons
3
Specs
Mayank Mandava
Top Con

Can be intimidating for beginners

Scala is an industrial language. It brings functional programming to the JVM, but not with a "start small and grow the language" perspective, but rather a very powerful language for professional programmers. See More
Hector Malpica (Miuler)
Top Pro

Immutable values

The immutable values make it perfect for working with concurrency See More
Ryan
Steven Sagaert
Top Con

Way too complex for beginners

Even for seasoned programmers it's a difficult language. See More
Laura Kyle
Tom Raleigh
Top Pro

Multiparadigm

Scala supports both Functional and Object Oriented styles of programming. Beginners can learn both paradigms without having to learn a new language, and experts can switch between the two according to what best suits their needs at the time. See More
gilch
Top Con

Static type system inherits cruft from Java

The type system is too complicated yet still less powerful than Haskell's. See More
Laura Kyle
Slimothy
Tom Raleigh
Top Pro

Type inference

Scala offers type inference, which, while giving the same safety as Java's type system, allows programmers to focus on the code itself, rather than on updating type annotations. See More
Slimothy
Tom Raleigh
Top Pro
<