Нафиг лётчиков, дайте за святое зубами поклацать!
>Рома, не передергивай - никто не мешает перепутать значения источника и получателя - это ошибка того же уровня как и порядок операндов.
Э, нет! Источник с приёмником можно перепутать только с бодуна или по иной причине того же рода, а вот порядок операндов - это совсем другое... Хотя бы из-за того, что никакого стандарта нет, и то источник слева, а приёмник справа, то наоборот
>Ага, а так же проблему написания "-" вместо "+", буквы "а" вместо "о".
Это, всё же, СОВСЕМ другое
Кмк минимум, если ты вместо 'a' напишешь 'o' - это компилятор даже отловить сможет. А минус с плюсом... Ну, да, в высшей математике в преобразованиях с этим вечная проблема... Но, согласись, что в операции перепутать операнды куда сложнее, чем порядок аргументов, особенно при отсутствии стандарта
>Примеры подавляющего большинства, пожалуйста.
Ну, впрочем, даже в C++ такое можно, пожалуй. Совсем уже забыл, но неужто невозможно вызвать несуществующий виртуальный метод так, чтобы при компиляции ошибка не была обнаружена?
>А те же виртуальные методы, это далеко не статическое связывание или я чего-то не понял.
Нет, виртуальные методы в C++ - это всё равно статическое связывание. Компилятор ещё на этапе компиляции разбирается, что к чему. Соотвтественно, всё и предопределено должно быть. Ну нет такого типа в C++, как "любой объект"
Только в шаблонах до какой-то степени. Но это - просто упрощённый механизм размножения кода
Опять же, статически компилируемого.
>но ты покажи мне как Хаскел превосходит те возможности в Алголе 68.
Я Alogol 68 совсем не знаю, а Хаскелл - очень плохо
Но я сомневаюсь, что в Алголе была хотя бы элементарная сборка мусора, я молчу про ленивые вычисления, шаблонные функции и т.п. Можно ли было в Алголе так записать трёхпараметрическую функцию Аккермана?
code text
a 0 x y = x+1
a 1 x 0 = x
a 2 x 0 = 0
a 3 x 0 = 1
a n x 0 = 2
a n x y = (a (n-1) (a n x (y-1)) x)
Это прямой аналог вот такого C++ кода:
code text
<font size=1>Created with colorer-take5 library. Type '[b]cpp[/b]'</font>
<span style='color:#800000; font-weight:bold; '>int</span> ackr<span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>int</span> n<span style='color:#808030; '>,</span> <span style='color:#800000; font-weight:bold; '>int</span> x<span style='color:#808030; '>,</span> <span style='color:#800000; font-weight:bold; '>int</span> y<span style='color:#808030; '>)</span>
<span style='color:#800080; '>{</span>
<span style='color:#800000; font-weight:bold; '>if</span><span style='color:#808030; '>(</span><span style='color:#808030; '>!</span>n<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>return</span> x<span style='color:#808030; '>+</span><span style='color:#008c00; '>1</span><span style='color:#800080; '>;</span>
<span style='color:#800000; font-weight:bold; '>if</span><span style='color:#808030; '>(</span>y<span style='color:#808030; '>)</span>
<span style='color:#800000; font-weight:bold; '>return</span> ackr<span style='color:#808030; '>(</span>n<span style='color:#808030; '>-</span><span style='color:#008c00; '>1</span><span style='color:#808030; '>,</span>ackr<span style='color:#808030; '>(</span>n<span style='color:#808030; '>,</span>x<span style='color:#808030; '>,</span>y<span style='color:#808030; '>-</span><span style='color:#008c00; '>1</span><span style='color:#808030; '>)</span><span style='color:#808030; '>,</span>x<span style='color:#808030; '>)</span><span style='color:#800080; '>;</span>
<span style='color:#800000; font-weight:bold; '>switch</span><span style='color:#808030; '>(</span>n<span style='color:#808030; '>)</span>
<span style='color:#800080; '>{</span>
<span style='color:#800000; font-weight:bold; '>case</span> <span style='color:#008c00; '>1</span><span style='color:#808030; '>:</span> <span style='color:#800000; font-weight:bold; '>return</span> x<span style='color:#800080; '>;</span>
<span style='color:#800000; font-weight:bold; '>case</span> <span style='color:#008c00; '>2</span><span style='color:#808030; '>:</span> <span style='color:#800000; font-weight:bold; '>return</span> <span style='color:#008c00; '>0</span><span style='color:#800080; '>;</span>
<span style='color:#800000; font-weight:bold; '>case</span> <span style='color:#008c00; '>3</span><span style='color:#808030; '>:</span> <span style='color:#800000; font-weight:bold; '>return</span> <span style='color:#008c00; '>1</span><span style='color:#800080; '>;</span>
<span style='color:#800080; '>}</span>
<span style='color:#800000; font-weight:bold; '>return</span> <span style='color:#008c00; '>2</span><span style='color:#800080; '>;</span>
<span style='color:#800080; '>}</span>
Кстати, если код на Хаскелле почти на порядок проигрывает MSVC++7, то вот такой код на O'Caml
code text
let rec a n x y =
match (n, y) with
(0, y) -> x+1
| (1, 0) -> x
| (2, 0) -> 0
| (3, 0) -> 1
| (n, 0) -> 2
| (n, y) -> (a (n-1) (a n x (y-1)) x)
;;
оказывается просто быстрее сишного
Впрочем, это уже обсуждалось в форуме Форт и т.п.
>Если уровень не превосходит, то моя фраза верна и сейчас - уровень был достигнут.
Да превосходит, не сомневаюсь. Прогресс на месте не стоит
>>В духе c = a `mod` b - то же самое, что c=(mod a B)
>Не велика заслуга. В С++ тоже можно.
Э... Т.е. myabs(a,B) можно в инфиксной форме записать?? Я что-то упустил??
>Правильно, т.е. удобства записи 0.
Э, нет! Форт имеет МОРЕ недостатков, но вот по удобству записи он как раз один из первых
Хотя... Мда, смотря что под этим понимать
>Недаром Дийкстра его назвал языком будущего для программистов прошлого.
А мы все давно "программисты прошлого". Неужели непонятно?
>Правильно, на ассемблере все возможно и избавляет от проблем синтаксиса даже Форта
На ассемблере плотность информации на единицу кода намного ниже
>Что ты подразумеваешь под внутренней структурой? Определение языка, его имплементацию?
Я понимаю процесс компиляции и интепретации
В каком ещё языке практически весь процесс создания/исполнения программы записывается в десяток строк элементарных операций того же языка?
>На С++ - если без методов - 2 минуты.
Без объектов?
Пример!
>Ром, мемори лик на Форте элементарен.
Естественно. Есть дурная практика совать новые типы данных на классический стек данных. Откуда их по DROP и т.п. сбросить можно. Но хороший стиль - это свой стек под каждый тип данных. И если у меня $DROP будет освобождать память строки - откуда возьмутся утечки памяти?
А вот другого рекордсмена по утечкам, кроме C/C++ ещё поискать нужно
>??? это к чему ??? Отключи пакеты все в Перле - много ты напрограммируешь?
А при чём тут это? Большинство моих пакетов, с которыми я работаю - не объектные
>Посмотри вон на Ace - там масса всего есть того, чего Перлу и не снилось.
Это ты про новое изобретение Sun на базе Java с графическим программированием взаимодействия блоков? Я его ещё в глаза не видел. Но идеология не кажется мне верной
>Ленивые вычисления, говоря твоим языком, это к APL - ничего нового.
А я и не говорил, что новое. Я, собственное, весь спор веду только на тему того, что НИЧЕГО революционно нового нигде нет
>А с глобальными данными как? Или ты пишешь так, что их у тебя нет?
Да, стараюсь писать так. Глобальные переменные - это вред несравнимо больший, чем GOTO
Наряду со статическими переменными, кстати. Нет, у меня ещё даже в коде всего двухлетней давности ещё полно глобальных переменных, но это - мой порок
От которого я освобождаюсь. И, при всей нелюбви к Java не могу не признать большого шага вперёд в её полном освобождении от этой заразы
И именно исключительно глобальные переменные Форта больше всего меня от него отталкивают. Ну, да, локальные можно и на коленке, опять же, за пол-часа слепить... Но это не то...
В общем, без глобальных переменных писать можно и нужно
>Откуда дровишки? Не хотел ли ты часом сказать, что просто интрепретаторы позволяют проинтерпретировать строку, составленную динамически? Если не это, то не вижу разницы.
Разница только в том, что "чистый" интепретатор жрёт оператор за оператором, строку за строкой и можно управлять его работой модифицируя исходник прямо на лету. Если до такого извращения не опускаться, то разницы почти и нет.
>А наследование?
>А тебе в новых объектах ничего писать не надо и у тебя код магически сам появляется из ниоткуда?
Уф. Наследование тут при чём? Функция show2() в том примере работает с любым объектом, имеющим метод show(). Соотсветственно, и с любым объектом, наследником данного, унаследовавшим функцию show(). Да, код для show() придётся писать, возможно, заново, но вот show2() так и будет работать с любым объектом, в котором есть show().
При статическом связывании такое невозможно. Ты должен написать код функции show2() для ВСЕ возможных объектов, к которым она может примениться. Пусть это даже и будет упрощено шаблонами.
>А в Jave например, можно вообще левый код загрузить.
Возможно. Я её совсем забыл. Более пяти лет с ней не возился.
>Ром, позднее связывание всегда было частью ООП.
??
На классическом С++ после компиляции у тебя есть только жёсткий немодифицирующийся код. См выше пример с show2(...). Такое в C++ принципиально невозможно.
>А DLL показывают, что позднее связывание в ООП работает и что ты, мягко говоря, не совсем прав.
Брррррр... DLL - это только метод линковки, отложенный от этапа компиляции до этапа исполнения. При чём тут связывание??
Название DLL расшифруй, а?
>>Объекты ГОРАЗДО опаснее в этом плане
>Поясни в чем?
Засунул статические данные внутрь объекта, модифицируешь их как бог на душу положит, да ещё в private где-то... Что может быть неявнее?
Чем тот же i++ в макросе хуже статического i++ в объекте?
>Кто-то тут говорил, что на С не мог страницу кода написать, а на Перле - сотни тысяч.
Гмгмгм... Я на С/С++ тоже, пожалуй, сотни килобайт кода настрочил. Я говорил о том, что на С++ без объектов я не мог, а на Perl - они ни разу не понадобились. Это совсем иное
>И ты говоришь, после этого, что в Перле нет не явных преобразований?
Да полно их там!
Я говорю, что объекты - ничего не предоставляют в плане защиты от неявных преобразований
Более того, они запросто инкапсулируют эти неявные преобразования, чем становятся ещё более опасны
Единственный известный мне язык без известных мне неявных преобразований - Хаскелл
>Вот только внутри модуля все всем доступно. Можно конечно для каждого маленького кирпичика свой модуль объвлять, но боюсь ты будешь первым, кто начнет жаловаться на факт, что надо сначала импортировать 3194 модуля до того как ты сможешь написать программку типа Hello, Worв!
Гмгмгм... На Java, вот, каждый класс - отдельный модуль. И никто, вроде, не плачется. Но внутри класса - итак всё доступно. Так чем это хуже, чем у меня то же самое на ассемблере без объектов всяких будет?
Так же, каждый
логический объект - отдельный модуль со своей областью видимости и т.п. Ну да, на подгрузку нужных субмодулей в Java понадобится одна строка, а на ассемблере - две (ещё плюс проверка на загруженность, чтобы дважды одно не грузить). И это - революционность?
>А более серъезно, допустим, я хочу проконтролировать, что значения аттрибутов удовлетворяют соотношению, то я переношу их в private, объявляю методы доступа к ним, в которых и осуществляю контроль. В структуре это не возможно enforce - так любой может и просто присвоить.
Стоп-стоп. private: в структуре тоже не даст никому "снаружи" добраться до этих элементов!
>Ром, не прав ты - виртуальные методы - это есть позднее связывание.
Мне лениво сейчас писать тесты на C++, но на 99.99% уверен, что виртуальные методы в C++ - статическое связывание на этапе компиляции
На C++ принципиально невозможен тип "любой объект"
>Рома, если следить по популярности, то Бейсик лучший язык.
Если хорошенько репу почесать, то, возможно, так оно и есть, как бы нам не нехотелось этого признавать
И дело тут вовсе не в политике Microsoft
Этот язык был популярен почти с самого создания
>Форт, кстати, примерно там же, где и Ада
А я и не спорю
>Про Хаскел, Объектного Верблюда - вообще молчу. Где его используют?
Ну, Хаскелл сейчас используется, как минимум, не меньше, чем Форт
Например, пару раз натыкался на веб-сервера на нём
В смысле откликов сервера в логах. К сожалению, не смог сейчас найти их. А первое, что в голову пришло, Haskell.org - работает на банальном Апаче
Уф, ладно, пойду спать, что ли... А то сегодня 30-летие товарища справляли, так совсем уже плохо что-то мне...