Hacker News new | ask | show | jobs
by PhineasRex 1434 days ago
The dynamic typing example doesn't have anything to do with dynamic typing and is in fact already a feature of some statically-typed programming languages.
2 comments

Common Lisp can do that:

    CL-USER> (defvar i 1)
    I
    CL-USER> (declaim (type (integer 1 10) i))
    (I)
    CL-USER> i
    1
    CL-USER> (setf i 8)
    8
    CL-USER> i
    8
    CL-USER> (setf i (1+ i))
    9
    CL-USER> (setf i (1+ i))
    10
    CL-USER> (setf i (1+ i))
    ; Evaluation aborted on #<TYPE-ERROR expected-type: (INTEGER 1 10) datum: 11>.
    CL-USER> i
    10
in pike:

    #pragma strict_types
    void main()
    {
      int(1..10) i = 3;
      i += 7;
      i += 1;
      write("%O\n", i);
      i = 11;
    }
output:

    typetest.pike:6: Warning: An expression of type int cannot be assigned to a variable of type int(1..10).
    typetest.pike:8:Bad type in assignment.
    typetest.pike:8:Expected: int(1..10).
    typetest.pike:8:Got     : int(11..11).
    Pike: Failed to compile script.