LINUX.ORG.RU

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

 глупые споры, ,


1

1

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

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



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

но ведь тогда если был бы такой язык программирования — то тогда был бы огромный риск возникновения следующей ситуации:

(пишу фрагмент кода на импровизированном гипотетическом языке)

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

require 'low_level_some'

def do_super_some(v)
    if v => 1000
        do_big_some(v)
    else
        do_small_some(v)
    end
end

как видим — программист библиотеки здесь забыл указать ``nil`` перед концом функции ``do_super_some()``

но допустим — это не страшно, так как ``do_big_some()`` всегда возвращает ``nil``, и ``do_small_some()`` тоже всегда возвращает ``nil``.

а теперь представим что неожиданно ``do_big_some()`` начинает возвращать в случае успеха что-то другое [допустим это случается после — после pacman -Syu # :)]

....и в результате — функция ``do_super_some()`` начинает возвращать непонятную почти-безсистемную ерунду..

а другой программист — позже может подумать что ``do_super_some()`` возвращает не безсистемную ерунду, а вполне определённое «успех если != nil».. и вот он баг на ровном месте!

:-( :-(

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

как видим — программист библиотеки здесь забыл указать ``nil`` перед концом функции ``do_super_some()``

Oh no, not this shit again.

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

и вот он баг на ровном месте!

И где же тут баг? Вывод типов тебе в помощь. А при динамической типизации на это вообще насрать.

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

И где же тут баг? Вывод типов тебе в помощь.

да. вывод типов — спас бы.

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

а теперь представим что неожиданно ``do_big_some()`` начинает возвращать в случае успеха что-то другое [допустим это случается после — после pacman -Syu # :)]

nil — всего лишь константа, такая же как и ноль (<type 'int'>). Можно подставить ноль на место nil, или лучше строку «pony.org.ru», чтобы увидеть что return тут не причем.

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

если был бы такой язык программирования

Он уже есть и не один.

как видим — программист библиотеки здесь забыл указать ``nil`` перед концом функции ``do_super_some()``

Ничего он не забыл. Результатом функции будет результат if'а, результатом которого в данном случае будет или do_big_some(v) или do_small_some(v). Если у if-elif'а нет ветки else, то логично считать результатом if'а в случае несоответствия всем ветвям некоторый None в динамических языках, а в языках со статической типизацией или считать весь такой if Unit'ом или же Option<тип результата ветвей>.

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

начинает возвращать непонятную почти-безсистемную ерунду

Она начнет ее возвращать, только если программист идиот и под строчками его когда нет никакой человеко-понятной проблемной области.

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

Попиши на Руби что ле.

а как на нём пописать-то, если там библиотек кот наплакал? (кроме web.. для web — там много всего, кажется)

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.