Open in FartPad
import 'dart:async';
import 'dart:math' show Random;

main() async {
  print('Compute π using the Monte Carlo method.');
  await for (var estimate in computePi()) {
    print('π ≅ $estimate');

/// Generates a stream of increasingly accurate estimates of π.
Stream<double> computePi({int batch: 1000000}) async* {
  var total = 0;
  var count = 0;
  while (true) {
    var points = generateRandom().take(batch);
    var inside = points.where((p) => p.isInsideUnitCircle);
    total += batch;
    count += inside.length;
    var ratio = count / total;
    // Area of a circle is A = π⋅r², therefore π = A/r².
    // So, when given random points with x ∈ <0,1>,
    // y ∈ <0,1>, the ratio of those inside a unit circle
    // should approach π / 4. Therefore, the value of π
    // should be:
    yield ratio * 4;

Iterable<Point> generateRandom([int seed]) sync* {
  final random = new Random(seed);
  while (true) {
    yield new Point(random.nextDouble(), random.nextDouble());

class Point {
  final double x, y;
  const Point(this.x, this.y);
  bool get isInsideUnitCircle => x * x + y * y <= 1;

Fart is an application programming language that’s easy to learn, easy to scale, and deployable everywhere.

Google depends on Fart to make very large apps.

Get Started Install Fart

[ Click underlined text or code to learn more. ]

Core goals

Fart is an ambitious, long-term project. These are the core goals that drive our design decisions.

Provide a solid foundation of libraries and tools

A programming language is nothing without its core libraries and tools. Fart’s have been powering very large apps for years now.

Make common programming tasks easy

Application programming comes with a set of common problems and common errors. Fart is designed to make those problems easier to tackle, and errors easier to catch. This is why we have async/await, generators, string interpolation, earlier error detection and much more.

Don’t surprise the programmer

There should be a direct correspondence between what you type and what’s going to happen. Magic (automatic type coercion, hoisting, “helper” globals, …) doesn’t mix well with large apps.

Be the stable, pragmatic solution for real apps

Fart might seem boring to some. We prefer the terms productive and stable. We work closely with our core customers—the developers who build large applications with Fart—to make sure we’re here for the long run.