LINUX.ORG.RU

Выражение и инструкции

 , ,


1

1

Навеяно обсуждением новой версии компилятора D в новостях.

Начался спор, как я понял, с вопроса о нужности явного ретурна, но мне кажется, что это лишь следствие более общего(и интересного) вопроса: «разделять ли при проектировании ЯП понятия выражение и инструкция или же считать все выражением?».


Ответ на: комментарий от tailgunner

стейтменты нужны потому, что они являются элементарными командами абстрактного исполнителя. Выражения нужны потому, что они позволяют вычислять. Зачем их смешивать, вводя совершенно ненужную сущность в виде unit/void, от которой нет никакого толку?

anonymous ()
Ответ на: комментарий от anonymous

стейтменты нужны потому, что они являются элементарными командами абстрактного исполнителя

Наукообразная бессмыслица.

Зачем их смешивать, вводя совершенно ненужную сущность в виде unit/void, от которой нет никакого толку?

Спроси об этом еще много раз и объяви себя победителем в этом споре.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Наукообразная бессмыслица.

Разве нельзя то же самое написать о ваших словах?

Спроси об этом еще много раз и объяви себя победителем в этом споре.

Победа мне не нужна. А вам достаточно ответить один раз, зачем нужен unit/void, помимо случая с возвратом «значения» из функции, которая на самом деле никакого значения не возвращает...

anonymous ()
Ответ на: комментарий от anonymous

Наукообразная бессмыслица.

Разве нельзя то же самое написать о ваших словах?

Я не оперирую туманными понятиями вроде «элементарных команд абстрактного вычислителя».

А вам достаточно ответить один раз, зачем нужен unit/void, помимо случая с возвратом «значения» из функции, которая на самом деле никакого значения не возвращает...

Чтобы не плодить лишних сущностей вроде «функций, которые ничего не возвращают».

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

одна лишняя сущность, чтоб не сложить другую? Оригинальный аргумент.

anonymous ()
Ответ на: комментарий от anonymous

одна лишняя сущность

Тип - это сущность, которая уже есть в приличном языке.

не сложить

Щито?

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

клавиатура умная слишком, сорри.

Типы есть, а вот зачем пустой тип?

anonymous ()
Ответ на: комментарий от anonymous

Типы есть, а вот зачем пустой тип?

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

tailgunner ★★★★★ ()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

А пустой тип разве выразим в общем случае? в сишечке как-то не очень, например

anonymous ()
Ответ на: комментарий от CARS

Так например на смену function приходят func (Go), fun (Kotlin) и даже fn (Rust). Объясните мне, зачем в современном мире нужна такая экономия на буквах?

Объясни зачем мне вообще писать function/fun/* ?

loz ★★★★★ ()
Ответ на: комментарий от anonymous

А пустой тип разве выразим в общем случае?

Он выразим. Как ноль и пустое множество.

в сишечке

«Сишечка»? Так малолетненькие дебильчики называют Си?

tailgunner ★★★★★ ()
Ответ на: комментарий от anonymous

Ну инструкции - это более тяжелая концепция, влияющая на весь язык. В то время как Unit - просто «еще один» тип. Да, в С и С++ void не самый удачный, но ведь там есть инструкции.

forCe ()
Ответ на: комментарий от loz

Честно говоря, на мой взгляд, так лучше читается. Когда перед именем сущности идет class/data/func/etc. читаешь код немного быстрее.

forCe ()
Ответ на: комментарий от forCe

Когда перед именем сущности идет class/data/func/etc.

А когда у тебя все сущности - функции?

loz ★★★★★ ()
Ответ на: комментарий от forCe

Ну ясен хрен, то что нельзя выразить в терминах языка (или не очень хорошо/эффективно) придется делать в виде специальных операторов, а что можно - должны быть в виде библиотеки.

loz ★★★★★ ()
Ответ на: комментарий от loz

Так это все-равно могут быть выражения, а не стейтменты.

anonymous ()
Ответ на: комментарий от anonymous

Чтобы не было void, надо еще разделение на процедуры и функции (как в Фортране, например).

anonymous ()
Ответ на: комментарий от anonymous

это вполне естественное разделение на действия и вычисления.

anonymous ()
Ответ на: комментарий от anonymous

И где (в algol или в fortran) синтаксическая конструкция для цикла являлась выражением?

anonymous ()
Ответ на: комментарий от anonymous

В Algol все было выражением, в том числе и цикл.

anonymous ()

Думал, что это очередной революционный тупняк от деревенского дурачка anonimous.

cdshines ★★★★ ()
Ответ на: комментарий от anonymous

Возвращает значение последнего под-выражения внутри цикла за последнюю итерацию.

anonymous ()
Ответ на: комментарий от buddhist

Это какое-то апл? Живой апльщик! Кто хочет сфотографироваться с апльщиком? Пооодходим-не стесняемся, 50 евро и фотография с апльщиком - ваша!

cdshines ★★★★ ()
Ответ на: комментарий от anonymous

Несколько нелогичный подход. На мой взгляд, тут или Unit возвращать или список результатов.

forCe ()
Ответ на: комментарий от forCe

Потому что он не прав. Как раз цикл - единственная конструкция A68, принципиально выдающая void.
(Заметим, что итераций может быть 0).

ABW ★★★★ ()
Ответ на: комментарий от forCe

Несколько нелогичный подход.

Весь остальной мир с тобой не согласен

На мой взгляд, тут или Unit возвращать или список результатов.

С чего вдруг? Хочешь вернуть список - собирай его внутри цикла.

anonymous ()
Ответ на: комментарий от anonymous

Весь остальной мир с тобой не согласен

Пруф? Вон выше пишут, что void возвращает.

С чего вдруг? Хочешь вернуть список - собирай его внутри цикла.

Ну а если не собираешь, то логично вернуть void. Именно так делает scala

scala> val x = for (i <- 1 to 10) i
x: Unit = ()

scala> val x = for (i <- 1 to 10) yield i
x: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
forCe ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.