LINUX.ORG.RU

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

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

На самом деле, потеря деления не так страшна на фоне других проблем.

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

Сколько будет 2 делить на 6? 0.3333333333, 0.33, простая дробь 1/3 или 0?

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

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

ocaml имеет отдельную операцию /. для деления целых. Это шаг в верном направлении, на мой взгляд.

Я хочу пойти дальше и позволить добавление операций деления с разными именами.

Тогда можно будет написать:

печ 1 число_с_2_знаками:делить 3;
и получить 0.33 (кстати, тут всплывает вопрос о необходимости параметрических модулей, дабы не плодить модули для любого числа знаков после запятой - этот вопрос ещё не решён).

Как видишь, от лаконичности записи деления не осталось и следа.

В некоторых случаях можно изменить «ядро» языка, исключив стандартные арифметические операции и присоединив вместо них бухгалтерские. Тогда по умолчанию арифметика будет как на калькуляторе, а чтобы применить обычную арифметику, придётся использовать уже обычные операции через префикс, скажем, так:

печ 0.33 кодица/стандартная_арифметика:* 3;
Как видишь, от элегантности математической нотации всё равно почти ничего не остаётся. Можно пытаться вводить однобуквенные алиасы, но будет в лучшем случае
печ 0.33 ф:* 3;
Это коротко, но всё равно нужны два пробела по сторонам знака умножения (иначе он просто не прочитается), да и сам знак стал втрое длиннее. Итого, там где в С ты писал один значок, нужно теперь не меньше 5. На этом фоне потеря одного значка деления, которое используется явно не в каждой строчке программы, выглядит не такой уж большой.

А вот возможность писать целые файлы без вызова Округл на каждой строке с гарантией, что округление вызывается везде и нигде не вызывается обычная арифметика - это профит, который легко перекрывает небольшие неудобства синтаксиса. В моём языке правила такого рода может гарантировать компилятор.

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

На самом деле, потеря деления не так страшна на фоне других проблем.

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

Сколько будет 2 делить на 6? 0.3333333333, 0.33, простая дробь 3/2 или 0?

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

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

ocaml имеет отдельную операцию /. для деления целых. Это шаг в верном направлении, на мой взгляд.

Я хочу пойти дальше и позволить добавление операций деления с разными именами.

Тогда можно будет написать:

печ 1 число_с_2_знаками:делить 3;
и получить 0.33 (кстати, тут всплывает вопрос о необходимости параметрических модулей, дабы не плодить модули для любого числа знаков после запятой - этот вопрос ещё не решён).

Как видишь, от лаконичности записи деления не осталось и следа.

В некоторых случаях можно изменить «ядро» языка, исключив стандартные арифметические операции и присоединив вместо них бухгалтерские. Тогда по умолчанию арифметика будет как на калькуляторе, а чтобы применить обычную арифметику, придётся использовать уже обычные операции через префикс, скажем, так:

печ 0.33 кодица/стандартная_арифметика:* 3;
Как видишь, от элегантности математической нотации всё равно почти ничего не остаётся. Можно пытаться вводить однобуквенные алиасы, но будет в лучшем случае
печ 0.33 ф:* 3;
Это коротко, но всё равно нужны два пробела по сторонам знака умножения (иначе он просто не прочитается), да и сам знак стал втрое длиннее. Итого, там где в С ты писал один значок, нужно теперь не меньше 5. На этом фоне потеря одного значка деления, которое используется явно не в каждой строчке программы, выглядит не такой уж большой.

А вот возможность писать целые файлы без вызова Округл на каждой строке с гарантией, что округление вызывается везде и нигде не вызывается обычная арифметика - это профит, который легко перекрывает небольшие неудобства синтаксиса. В моём языке правила такого рода может гарантировать компилятор.

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

На самом деле, потеря деления не так страшна на фоне других проблем.

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

Сколько будет 2 делить на 6? 0.3333333333, 0.33, простая дробь 3/2 или 0?

В разных языках ты можешь получить любой из этих результатов и все они, по своему, правильны. Цена ошибки может быть от несхождения баланса предприятия до упавшей не на ту страну баллистической ракеты.

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

ocaml имеет отдельную операцию /. для деления целых. Это шаг в верном направлении, на мой взгляд.

Я хочу пойти дальше и позволить добавление операций деления с разными именами.

Тогда можно будет написать:

печ 1 число_с_2_знаками:делить 3;
и получить 0.33 (кстати, тут всплывает вопрос о необходимости параметрических модулей, дабы не плодить модули для любого числа знаков после запятой - этот вопрос ещё не решён).

Как видишь, от лаконичности записи деления не осталось и следа.

В некоторых случаях можно изменить «ядро» языка, исключив стандартные арифметические операции и присоединив вместо них бухгалтерские. Тогда по умолчанию арифметика будет как на калькуляторе, а чтобы применить обычную арифметику, придётся использовать уже обычные операции через префикс, скажем, так:

печ 0.33 кодица/стандартная_арифметика:* 3;
Как видишь, от элегантности математической нотации всё равно почти ничего не остаётся. Можно пытаться вводить однобуквенные алиасы, но будет в лучшем случае
печ 0.33 ф:* 3;
Это коротко, но всё равно нужны два пробела по сторонам знака умножения (иначе он просто не прочитается), да и сам знак стал втрое длиннее. Итого, там где в С ты писал один значок, нужно теперь не меньше 5. На этом фоне потеря одного значка деления, которое используется явно не в каждой строчке программы, выглядит не такой уж большой.

А вот возможность писать целые файлы без вызова Округл на каждой строке с гарантией, что округление вызывается везде и нигде не вызывается обычная арифметика - это профит, который легко перекрывает небольшие неудобства синтаксиса. В моём языке правила такого рода может гарантировать компилятор.

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

На самом деле, потеря деления не так страшна на фоне других проблем.

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

Сколько будет 2 делить на 6? 0.3333333333, 0.33, простая дробь 3/2 или 0?

В разных языках ты можешь получить любой из этих результатов и все они, по своему, правильны.

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

ocaml имеет отдельную операцию /. для деления целых. Это шаг в верном направлении, на мой взгляд.

Я хочу пойти дальше и позволить добавление операций деления с разными именами.

Тогда можно будет написать:

печ 1 число_с_2_знаками:делить 3;
и получить 0.33 (кстати, тут всплывает вопрос о необходимости параметрических модулей, дабы не плодить модули для любого числа знаков после запятой - этот вопрос ещё не решён).

Как видишь, от лаконичности записи деления не осталось и следа.

В некоторых случаях можно изменить «ядро» языка, исключив стандартные арифметические операции и присоединив вместо них бухгалтерские. Тогда по умолчанию арифметика будет как на калькуляторе, а чтобы применить обычную арифметику, придётся использовать уже обычные операции через префикс, скажем, так:

печ 0.33 кодица/стандартная_арифметика:* 3;
Как видишь, от элегантности математической нотации всё равно почти ничего не остаётся. Можно пытаться вводить однобуквенные алиасы, но будет в лучшем случае
печ 0.33 ф:* 3;
Это коротко, но всё равно нужны два пробела по сторонам знака умножения (иначе он просто не прочитается), да и сам знак стал втрое длиннее. Итого, там где в С ты писал один значок, нужно теперь не меньше 5. На этом фоне потеря одного значка деления, которое используется явно не в каждой строчке программы, выглядит не такой уж большой.

А вот возможность писать целые файлы без вызова Округл на каждой строке с гарантией, что округление вызывается везде и нигде не вызывается обычная арифметика - это профит, который легко перекрывает небольшие неудобства синтаксиса. В моём языке правила такого рода может гарантировать компилятор.

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

На самом деле, потеря деления не так страшна на фоне других проблем.

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

Сколько будет 2 делить на 6? 0.3333333333, 0.33, простая дробь 3/2 или 0?

В разных языках ты можешь получить любой из этих результатов и все они, по своему, правильны.

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

ocaml имеет отдельную операцию /. для деления целых. Это шаг в верном направлении, на мой взгляд.

Я хочу пойти дальше и позволить добавление операций деления с разными именами.

Тогда можно будет написать:

печ 1 число_с_2_знаками:делить 3;
и получить 0.33 (кстати, тут всплывает вопрос о необходимости параметрических модулей, дабы не плодить модули для любого числа знаков после запятой - этот вопрос ещё не решён).

Как видишь, от лаконичности записи деления не осталось и следа.

В некоторых случаях можно изменить «ядро» языка, исключив стандартные арифметические операции и присоединив вместо них бухгалтерские. Тогда по умолчанию арифметика будет как на калькуляторе, а чтобы применить обычную арифметику, придётся использовать уже обычные операции через префикс, скажем, так:

печ 0.33 кодица/стандартная_арифметика:* 3;
Как видишь, от элегантности математической нотации всё равно почти ничего не остаётся. Можно пытаться вводить однобуквенные алиасы, но будет в лучшем случае
печ 0.33 ф:* 3;
Это коротко, но всё равно нужны два пробела по сторонам знака умножения (иначе он просто не прочитается), да и сам знак стал втрое длиннее. Итого, там где в С ты писал один значок, нужно теперь не меньше 5. На этом фоне потеря одного значка деления, которое используется явно не в каждой строчке программы, выглядит не такой уж большой.

А вот возможность писать целые файлы без вызова Округл в 5 разных строчках и не тратить часы (а то и недели) на поиск единственного места, где забыли написать Округл, и баланс стал не сходиться - это профит, который легко перекрывает такие неудобства. В моём языке правила такого рода может гарантировать компилятор.

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

На самом деле, потеря деления не так страшна на фоне других проблем.

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

Сколько будет 2 делить на 6? 0.3333333333, 0.33, простая дробь 3/2 или 0?

В разных языках ты можешь получить любой из этих результатов и все они, по своему, правильны.

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

ocaml имеет отдельную операцию /. для деления целых. Это шаг в верном направлении, на мой взгляд.

Я хочу пойти дальше и позволить добавление операций деления с разными именами.

Тогда можно будет написать:

печ 1 число_с_2_знаками:делить 3;
и получить 0.33 (кстати, тут всплывает вопрос о необходимости параметрических модулей, дабы не плодить модули для любого числа знаков после запятой - этот вопрос ещё не решён).

Как видишь, от лаконичности записи деления не осталось и следа.

В некоторых случаях можно изменить «ядро» языка, исключив стандартные арифметические операции и присоединив вместо них бухгалтерские. Тогда по умолчанию арифметика будет как на калькуляторе, а чтобы применить обычную арифметику, придётся использовать уже обычные операции через префикс, скажем, так:

печ 0.33 кодица/стандартная_арифметика:* 3;
Как видишь, от элегантности математической нотации всё равно почти ничего не остаётся. Можно пытаться вводить однобуквенные алиасы, но будет в лучшем случае
печ 0.33 ф:* 3;
Это коротко, но всё равно нужны два пробела по сторонам знака умножения (иначе он просто не прочитается), да и сам знак стал втрое длиннее. Итого, там где в С ты писал один значок, нужно теперь не меньше 5. На этом фоне потеря одного значка деления, которое используется явно не в каждой строчке программы, выглядит не такой уж большой.