Рубрики
Без рубрики

Являются ли системы типа Dart и Java надежными?

Из документов Dart: Надежность заключается в том, чтобы ваша программа не могла попасть в определенные недопустимые состояния. A s… Помечено как программирование, информатика, java, dart.

Из документов Dart:

Надежность заключается в обеспечении того, чтобы ваша программа не могла попасть в определенные недопустимые состояния. Система звукового типа означает, что вы никогда не сможете попасть в состояние, когда выражение вычисляется до значения, которое не соответствует статическому типу выражения. Например, если статический тип выражения равен Строка , во время выполнения вы гарантированно получите строку только тогда, когда вы ее оцените.

Система типов Dart, как и системы типов в Java и C#, является надежной. Он обеспечивает эту надежность, используя комбинацию статической проверки (ошибки во время компиляции) и проверок во время выполнения. Например, присвоение строки |/int является ошибкой во время компиляции. Приведение объекта к строке с использованием как строки завершается ошибкой во время выполнения, если объект не является строкой.

Это интересная точка зрения – да, система типов надежна (на основе предоставленного определения), но в то же время это означает, что приложение может выйти из строя из-за ошибки типа 🤔 .

Например, если бы я написал:

public class HelloWorld{
    public static void main(String []args){
        String[] strs = { 1 };
    }
}

Он не будет компилироваться:

$javac HelloWorld.java
HelloWorld.java:4: error: incompatible types: int cannot be converted to String
        String[] strs = { 1 };
                          ^
1 error

Но это скомпилирует:

public class HelloWorld{
    public static void main(String []args){
        String[] strs = { "1" };
        Object[] objs = strs;
        objs[0] = 1;
        String one = strs[0];
        System.out.println("Hello World");
    }
}

и потерпеть неудачу:

$javac HelloWorld.java
$java -Xmx128M -Xms16M HelloWorld
Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
    at HelloWorld.main(HelloWorld.java:6)

Я чувствую, что здесь что-то не так.

Можем ли мы сказать, что система типов является надежной, а статический анализатор – нет?

Или наоборот – если мы можем сказать, что для создания системы звуковых типов достаточно полагаться на динамические проверки типов, можем ли мы сказать, что Ruby – это звук?

1 + "0"
// TypeError: String can't be coerce into Numeric

Смотри также: Java не работает: Перспектива Отрасли

Оригинал: “https://dev.to/stereobooster/are-dart-and-java-type-systems-sound-3568”