LINUX.ORG.RU

История изменений

Исправление tailgunner, (текущая версия) :

Они есть в стандартной библиотеке и в виде сторонних пакетов.

Это не в счет (ADT библиотечными средствами можно сделать и в Си++, но оператор match сделать уже невозможно). Вот это:

        return expr.match!(
            (double num) => "%g".format(num),
            (string var) => var,
            (BinOp bop) => "(%s %s %s)".format(
                pprint(*bop.lhs),
                bop.op,
                pprint(*bop.rhs)
            )
        );

оператором match не является - это switch по типу. Нет destructuring, нет guards. Для сравнения, Rust: https://doc.rust-lang.org/book/second-edition/ch18-03-pattern-syntax.html Как первые два примера сделать на D? Я подозреваю, что это невозможно, но просто на всякий случай спрашиваю.

Конечно поддержка языком была бы элегантнее, но говорить что в Ди просто нет ADT это неверно.

Только так и верно. Потому что в D _нет_ ADT. Средствами D можно изобразить что-то похожее.

Кстати:

Они есть в стандартной библиотеке и в виде сторонних пакетов. Тот taggedalbebraic. Этот пакет очень активно используется.

То, что их много (больше одного) разных делает их гораздо менее полезными, чем один, но стандартный.

Исправление tailgunner, :

Они есть в стандартной библиотеке и в виде сторонних пакетов.

Это не в счет (ADT библиотечными средствами можно сделать и в Си++, но оператор match сделать уже невозможно). Вот это:

        return expr.match!(
            (double num) => "%g".format(num),
            (string var) => var,
            (BinOp bop) => "(%s %s %s)".format(
                pprint(*bop.lhs),
                bop.op,
                pprint(*bop.rhs)
            )
        );

оператором match не является - это switch по типу. Нет destructuring, нет guards. Для сравнения, Rust: https://doc.rust-lang.org/book/second-edition/ch18-03-pattern-syntax.html Как первые два примера сделать на D? Я подозреваю, что это невозможно, но просто на всякий случай спрашиваю.

Конечно поддержка языком была бы элегантнее, но говорить что в Ди просто нет ADT это неверно.

Только так и верно. Потому что в D _нет_ ADT. Средствами D можно изобразить что-то похожее.

Исправление tailgunner, :

Они есть в стандартной библиотеке и в виде сторонних пакетов.

Это не в счет (ADT библиотечными средствами можно сделать и в Си++, но оператор match сделать уже невозможно). Вот это:

        return expr.match!(
            (double num) => "%g".format(num),
            (string var) => var,
            (BinOp bop) => "(%s %s %s)".format(
                pprint(*bop.lhs),
                bop.op,
                pprint(*bop.rhs)
            )
        );

оператором match не является - это switch по типу. Нет destructuring, нет guards. Для сравнения, Rust: https://doc.rust-lang.org/book/second-edition/ch18-03-pattern-syntax.html Как первые жва примера сделать на D? Я подозреваю, что это невозможно, но просто на всякий случай спрашиваю.

Конечно поддержка языком была бы элегантнее, но говорить что в Ди просто нет ADT это неверно.

Только так и верно. Потому что в D _нет_ ADT. Средствами D можно изобразить что-то похожее.

Исходная версия tailgunner, :

Они есть в стандартной библиотеке и в виде сторонних пакетов.

Это не в счет (ADT библиотечными средствами можно сделать и в Си++, но оператор match сделать уже невозможно). Вот это:

        return expr.match!(
            (double num) => "%g".format(num),
            (string var) => var,
            (BinOp bop) => "(%s %s %s)".format(
                pprint(*bop.lhs),
                bop.op,
                pprint(*bop.rhs)
            )
);

оператором match не является - это switch по типу. Нет destructuring, нет guards. Для сравнения, Rust: https://doc.rust-lang.org/book/second-edition/ch18-03-pattern-syntax.html Как первые жва примера сделать на D? Я подозреваю, что это невозможно, но просто на всякий случай спрашиваю.

Конечно поддержка языком была бы элегантнее, но говорить что в Ди просто нет ADT это неверно.

Только так и верно. Потому что в D _нет_ ADT. Средствами D можно изобразить что-то похожее.