Removing scala.Predef for scala-library.jar Independence :: Aug 6, 2017

Completely removing scala.Predef can be enforced by the compiler with option `-Yno-predef`. In addition to changing default type signatures and functions, removing Predef lets one become independent of Scala's collections library. `scalac` compiled `.class` and `.jar` files can then be directly executed with `java`, without having to add the 5 megabyte `scala-library.jar` to the classpath.

To keep Predef's ease-of-use definitions like `println` and `implicitly`, copy Predef directly from source, or re-implement choice members. This is the implementation in https://github.com/AugustNagro/s.g8:


package com.example

import scala.annotation.elidable
import scala.annotation.elidable.ASSERTION

object Predef {
  @inline final def implicitly[A](implicit evidence: A): A = evidence

  @elidable(ASSERTION)
  @inline final def assert(assertion: Boolean): Unit =
    if(!assertion) throw new java.lang.AssertionError("assertion failed")

  @elidable(ASSERTION)
  @inline final def assert(assertion: Boolean, message: => Any): Unit =
    if(!assertion) throw new java.lang.AssertionError("assertion failed" + message)

  @inline final def print(i: Int): Unit = System.out.print(i)
  @inline final def print(c: Char): Unit = System.out.print(c)
  @inline final def print(s: String): Unit = System.out.print(s)
  @inline final def print(f: Float): Unit = System.out.print(f)
  @inline final def print(d: Double): Unit = System.out.print(d)
  @inline final def print(l: Long): Unit = System.out.print(l)
  @inline final def print(b: Boolean): Unit = System.out.print(b)
  @inline final def print(s: Array[Char]): Unit = System.out.print(s)
  @inline final def print(obj: AnyRef): Unit = System.out.print(obj)

  @inline final def println(i: Int): Unit = System.out.println(i)
  @inline final def println(c: Char): Unit = System.out.println(c)
  @inline final def println(s: String): Unit = System.out.println(s)
  @inline final def println(f: Float): Unit = System.out.println(f)
  @inline final def println(d: Double): Unit = System.out.println(d)
  @inline final def println(l: Long): Unit = System.out.println(l)
  @inline final def println(b: Boolean): Unit = System.out.println(b)
  @inline final def println(s: Array[Char]): Unit = System.out.println(s)
  @inline final def println(obj: AnyRef): Unit = System.out.println(obj)

}