• coding Habrahabr FORTH oberon Иногда мне хочется иметь аккаунт на хабре. Например, в комментариях к статье habrahabr.ru в ответ на каждый комментарий автора, восхваляющий OBERON, писать что-то вроде "но это есть и в FORTH!", просто так.

    Или я мог бы не писать, а почитать FORTH vs OBERON дискасс, а то война древности с современностью и современности с другой современностью это мейнстрим и скучно. Можно прямо здесь. Есть оберонеры на жуйке? Велкам и рецомменд.

Replies (170)

  • @Renha, Меньше маркетинга, больше Оберона (я про хабр)
    Нужно позвать товарища @akastargazer
  • @Renha, Вангую. Счас придет @akastargazer напишет немного демагогии, потом про убернадежность оберона. Потом не сможет ее доказать и в момент слива напишет, что ты ничего не понимаешь.)
  • @lex2d, Но у форта с надёжностью примерно так же. К тому же я хочу не спор ради спора, а спор ради выяснения истинами. Думаю на почве близкого возраста форта и оберона шанс что это удастся отличен от нуля
  • @Renha, Возраст всё же разный.
    Мне не ясно противопоставление в этом плане — больше хороших и надёжных языков программирования.
    При этом я бы отметил усложнённость и ненадёжность общеупотребимого программного обеспечения, то же относится и к популяризируемым средствам программирования.
  • @u11, Противопоставить можно всё что угодно. Мне интересно что убеждённые обероннеры думают о форте, потому как в обсуждении по ссылке преимущества оберона подозрительно напоминали преимущества форта
  • @Renha, спасибо, понял вашу позицию
  • @Renha, Иногда мне хочется иметь аккаунт на хабре. Например, в комментариях к статьям по Си в ответ на каждый комментарий автора, восхваляющий Си, писать что-то вроде "но это есть и в бейсике!", просто так.
  • @mabu, Я бы с удовольствием почитал получающуюся дискуссию. К тому же у бейсика есть очевидный плюс: там меньше скобочек
  • @Renha, Форт прекрасен. Когда-то даже пытался на нем чего-то делать.
  • @akastargazer, А почему не продолжилось? Что-то не получилось?
  • @Renha, А в форте есть функции?
    Например, во фрибейсике функции могут принимать функции в качестве параметров и возвращать функции.
  • @Renha, Давно дело было, даже не помню, почему :). Помню только, что нравилось создавать новые лексемы, которые выполнялись прямо на лету.
    Так что толковый дискуссионер из меня вряд ли получится, нет опыта :)
  • @mabu, про функции актуальненько #2787893

    функций нет, функцию функций выполняют слова. Можно передавать и возвращать адрес слова, создавать слова внутри слов, кажется это подходит?
  • @akastargazer, а я по Оберону не много знаю( что почитать так чтобы кратко но в то же время не Википедию?
  • @Renha, Здесь имеется в виду функция как математический объект, подобно функции в функциональном программировании.
  • @Renha, можно чисто глазами пробежаться obertone.ru я уроки для школоты начал делать, для блэкбокса.
    Большая коллекция материалов: oberon2005.oberoncore.ru
    Свежак: oberon07.com и projectoberon.com
  • @akastargazer, спасибо! Изучу =)
  • @Renha, Книги на oberoncore oberoncore.ru
    Информатика 21 inr.ac.ru
  • @akastargazer, Зачем нужно ключевое слово BEGIN? Лишнее же.
  • @u11, о, несовпадающие источники это хорошо!
  • @u11, спасибо
  • @Renha, да не за что. Мне интересен даже не сам Оберон, а подход, благодаря которому ученики Вирта оказывались быстрее всех там, куда майнстрим доползал очень сильно потом или вообще не доползал. Ну и ситуация диалектического включения Оберона в майнстрим тоже интересна.
  • @Renha, узок их круг, страшно далеки они от народа
  • @mabu, obertone.ru — смотри последний блок кода, там между объявлением процедуры и BEGIN есть что-то, что в BEGIN ... END входить не должно.
  • @akastargazer, этого не понял(
  • @Renha, все источники в одном болоте квакают :) А цитата вроде ленинская, про декабристов, намёк на отношение к оберону от Носителей Истины с хабра.
  • @Renha, Объявление переменных? Но ведь это неправильно объявлять переменные в одном блоке в шапке функции. Правильно объявлять переменные сразу же там, где они будут использоваться, счётчики в циклах должны существовать только на время жизни цикла.
  • @mabu, ага, чтобы, читая функцию с произвольного места ты не знал где искать определения переменной на которую упал твой взгляд, кроме как "где-то выше"?
  • @Renha, Вот именно, начинаю читать функцию с произвольного места и приходится прокручивать к шапке, чтобы увидеть объявление переменной. А если переменная объявляется тут же, где начинается использоваться, то прокручивать к шапке не нужно.
  • @akastargazer, они как бы забывают что Оберон новее их приплюснутого эс, следовательно если предположить что оберон забыт — следовательно, C++ — тем более
  • @mabu, я, когда читаю текст программы, предпочитаю видеть сразу ход алгоритма без служебных примесей типа объявления переменной. Кроме этого, чёткая область видимости помогает удержать в голове сложности алгоритма. Да и пред- и поствычисления счётчика часто нужны.
  • @mabu, А если переменная объявляется тут же, где начинается использоваться, то прокручиватьприходится не к шапке, а к неизвестной позиции, которую ещё найти надо
  • @Renha, не, там другое мнение — типа, безумный профессоришка Вирт упоролся и клепает себе примитивный язычок, а настоящие профессионалы знают что почём в продакшне, им подавай ворох возможностей, да пожирнее.
  • @mabu, ты кстати тут представитель пользователей самого старого из обсуждаемых ЯП =)
  • @akastargazer, Если счётчик цикла нужен вне цикла, то это уже не чёткая область видимости, а расплывчатая.
  • @Renha, Ну как неизвестная? Известная. Объявление сразу же вместе с присваиванием значения.
  • @Renha, По сравнению с первобейсиком, фрибейсик — это совсем другой язык программирования.
  • @mabu, мы ведь не только о счётчиках так то
  • @Renha, ой, а там переменная s не напрасно ли объявляется?
  • @mabu, он всё равно практически quickbasic, который начал разрабатываться на год раньше чем появился Оберон
  • @mabu, процедура занимает не более экрана. В таком случае удобненько все переменные сразу прочитать, и потом об этом не думать, ну то есть вообще. К тому же при таком написании ты два раза подумаешь, а стоит ли объявлять почём зря лишнюю переменную, так как выбор переменных это отдельный этап практически
  • @akastargazer, там почти все "возможности" — синтаксический сахар. Порой сладкий, но такой калорийный...
  • @Renha, Я бы так не сказал. Во фрибейсике больший опор идёт на процедуры Function или Sub, в то время как в кубейсике подпрограммы с GOSUB-RETURN. Ну и добавили всякие новые возможности, типа указателей и ООП.
  • @mabu, ну ООП от языка допустим не зависит, это просто подход. Можно писать в ООП-стиле на форте, Обероне, ассемблере, в машинных кодах. Пара стандартных примитивов для этого погоды не делает.
  • @mabu, про ООП уже ответил, про указатели требуется пояснение, а остальное выглядит как синтаксический сахар
  • @Renha, Всё же ООП — это не синтаксический сахар.
  • @Renha, Указатели — в смысле указатели как в си.
  • @mabu, в смысле адреса?
  • @Renha, Да. Например:
    Dim p As Integer Ptr
  • @mabu, ну вот это шаг серьёзный уже, в отличие от пары примитивов для ООП. Но, это ведь копирование сишечки
  • @Renha, Связь с сишечкой горяздо глубже, чем можно было бы подумать. В кишочках используется crt, транслировать можно как в ассемблерный листинг, так и в сишный код (а в 64‐битной версии только так). И ещё они переняли ключевое слово this из си вместо Me из Вижуэль Бейсика.
  • @mabu, this из си вместо Meох, представляю как Ты расстроился =(
  • @Renha, видимо, хотел какое-то число в строку преобразовать, да передумал. Лишнее, ага.
  • @Renha, Да. Но это синтаксический сахар, можно без него, и вообще оно в ООП только используется.
  • @mabu, а вот почему было не делать перенятия из Оберона или Форта вместо Си? Гнались за аудиторией? И как, получилось, собрали аудиторию?
  • @akastargazer, Вот. А если переменные объявлять там где они будут использоваться, то не будет таких лишних переменных.
  • @mabu, а можно синоним объявить? В форте это было бы как-то так: : Me this ;
  • @Renha, А что нужно было перенимать оттуда?
  • @mabu, совершенно не факт. Даже будет хуже — переменную объявили, использовали — а зачем, неясно.
  • @mabu, а что нужно было перенимать из сей?
  • @Renha, Не поддерживается. Но это слово вообще нужно только для разрешения имён, когда имена параметров функции совпадают с именами полей класса.
  • @Renha, Указатели, функции, динамическое выделение памяти, строгая статическая типизация.
  • @mabu, а зачем?
  • @akastargazer, Если нужно удалить какую‐нибудь конструкцию из функции, например, убрать цикл, то вместе с ним уберутся переменные, которые эта конструкция использовала. А если переменные объявлять в шапке, то ещё нужно понять, какая переменная не используется. А что, если в шапке объявлено двадцать переменных, а Я поправил в середине процедуры вызов какой‐нибудь функции, как узнать, какая из этих двадцати переменных теперь лишняя?
    А вот если переменные объявлять сразу же в месте использования, то они будут удаляться вместе с тем кодом, который удалили.
  • @mabu, напомню, что Си был сделан только для того, чтобы избавить автора от мучений на ассемблере. Других более внятных причин нет.
  • @mabu, переменную можно использовать более чем в одном куске кода, так что удаляя объявление вместе с первым куском кода, ты лишаешь второй объявления переменной
  • @Renha, Под одну задачу должна быть отдельная переменная, а не одна на все задачи.
  • @mabu, Я предпочитаю видеть чистый алгоритм, а не винегрет из объявлений.
  • @mabu, тогда из Оберона можно было взять компиляцию под JVM, сборку мусора, например. Из форта (ну просто например) — /57
  • @Renha, Динамическое выделение памяти хорошо подходит для всяких списков и деревьев.
    Функции и строгая типизация позволяют писать код в чистом структурном стиле.
    Указатели нужны для взятия адреса, например, для функций обратного вызова операционной системы.
  • @mabu, так а удалось у Сишников перетянуть аудиторию? или ещё у кого?
  • @Renha, Никто не перетягивал. И вообще, Я не знаю статистики.
  • @akastargazer, В Обероне … размер массива задаётся только константой. К чему это искусственное ограничение?
  • @mabu, хочешь надёжности — хоти и саночки возить
  • @akastargazer, И ещё бесят эти точки с запятой. В каких случаях их нужно ставить, в каких не нужно и почему этот синтаксический яд до сих пор живёт в языках программирования.
  • @mabu, Справедливости ради скажу что в форте есть точки с запятой
  • @mabu, написал оператор — обозначь его!
  • @akastargazer, Для этого замечательно подходят символы переноса строки и возврата каретки.
  • @Renha, Дублирование окончания строки? Но зачем?
  • @mabu, Нет, окончание определения слова. Потому что в определении слова обыкновенно больше одной строки
  • @mabu, В /57 есть пример
  • @akastargazer, И что, если компилятор встретит новый оператор, то он сам не может понять, что предыдущий оператор закончился?
  • @mabu, не подходят, потому что зачастую удобно втыкать несколько операторов в строку.
  • @akastargazer, Фу. Прямое нарушение принципов структурного программирования.
  • @Renha, Я поспать отойду, утром загляну, добрых снов кто будет спать
  • @mabu, а ты как поймёшь? Оператор — это единица вычисления. То, что компилятор сильно усложняется без разделителя — я не говорю. Чисто по-человечески надо различать эти единицы.
  • @mabu, а ты их читал, эти принципы-то?
  • @Renha, я тоже отваливаю
  • @akastargazer, Вот тут Дейкстра рассуждает про это дело: khpi-iip.mipk.kharkiv.edu
    Как видно, идея структурирования отступами тут даже не рассматривается.
  • @akastargazer, В бейсике конец оператора — это конец строки. Если на одной строке нужно записать два оператора, то они пишутся через двоеточие. Поэтому точки с запятой в большинстве случаев только дублируют конец строки.
    В десятом Вижуэль Бейсике можно вообще разбивать оператор на несколько строк, например:
    Dim i As Integer =
    3
    И это будет нормально компилироваться. Без всяких точек с запятой.
  • @mabu, разбиение оператора на несколько строк — бесспорное достижение, учитывая, что изначально, любая программа — это одна длинная строка.
  • @akastargazer, Краем уха слышал, что там не должно быть спагетти‐кода в виде переходов GOTO и записи всего в одну линию.
  • @akastargazer, Сервер не найден.
  • @mabu, проверено, открывается норм
  • @akastargazer, Firefox не может найти сервер khpi-iip.mipk.kharkiv.edu.
  • @Renha, Почему не брейнфак? Тоже слишком мейнстримно?
  • @vt, "Хочу язык для нитакихкаквсе, но на хаскель у меня не хватает математического образования, подскажите мне нитакойкаквсе язык, но чтоб идиоту было понятно"
  • @vt, пишут, что Тьюринг именно так относился к остальным
  • @vt, брейнфак был создан не совсем для разработки ПО. И если из древних серьёзных языков можно извлечь здравые идеи, про которые локомотив индустрии забыл или не понял их, то из развлекательных — не очень
  • @vt, хаскельпочему не брейнфак? Внешне одно и то же
  • @Renha, тебе никто не мешает писать на хаскеле как на бейсике и не пользовать разные "закорючки"
  • @Renha, ни лисп, ни форт, ни оберон — не были созданы для разработки по, все "здравые идеи" из них давно уже высосаны "индустрией", вот в хаскеле еще не все, но активно этим занимаются
  • @vt, а что такое "разработка ПО", по-твоему?
  • @vt, Синтаксис и семантику Форта можно расширить до любого другого языка программирования прямо во время интерпретации (компиляции) форт-программы. мне также никто не мешает писать на форте как на хаскеле как на бейсике, например. Попробуй наоборот.
  • @Renha, у меня нет времени объяснять этот клинический случай еще с прошлого треда. Вкратце — нормальные языки умеют гораздо больше, чем тупые макросы подстановки.
  • @vt, Я ценю твоё время (правда), поэтому удовлетворюсь ссылкой, где такое будет явно сказано и показано
  • @vt, это например как? я хаскель не трогал но вроде иллюзию императивности даёт использование do , нет? иф да — сорян , но это хрупкая иллюзия.

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

    если исходить из подобной логики — что дроч на обероны и форты и басик и тикль и лишп ==развлекуха ради тренинга ума и пальцев. не нуди , ну.
  • @vt, внезапнейшее заявление. форт в продакшоне использовался но изжил себя(хотя знавал людей которые юзали форт ак макроассемблер для кода под МК с критически малыми ресурсами ) , оберон — сфера в вакууме и влажный сон вирта , лисп применяется и довольно часто до сей поры. хотя и в очень странных вещях где лисп нахуй не нужен (скриптовые расширения компиляторов , скриптовый язык для известного среди красноглазов графического редактора — хотя всё это происки штольмана который скоро запихнёт лисп даже в свою мамку)
  • @6Volt, выключите свет! они лезут на свет!
  • @akastargazer, Всегда думал, что они боятся Светы.
  • @6Volt, макроассемблер для кода под МК с критически малыми ресурсамиА еще перфоркарты, перфокарты!
    Лиспы с фортами в ту же помойку.
  • @vt, Оптимизация — это покупка нового производительного железа.
  • @mabu,
    Машина должна и будет служить людям, она не шлюха, чтобы люди исполняли её прихоти. Отсюда байтобляди (а так же сочувствующие им императивные пидорасы, надрачивающие на показатели System.currentTimeMillis() — start) — пиздолисы, которые опускаются до полного говноедства, лишь бы ублажить её регистры и микросхемы. Альфапрограммисты, как и положено альфам, если машина не выполняет положенных ей задач и требует пресмыкаться перед ней и ублажать её байтами, просто берут и за патчкорды, ебашат с вертушки по передней панели и списывают машину на мороз, купив взамен ту, которая не будет выёбываться и выполнит код в сроки и без выебонов, будь там хоть 1000% неоптимизированного оверхеда. И настоящего программиста не волнуют вопросы выдрачивания и быстродействия — он решает важную задачу из предметной области гораздо более сложной, чем низкоуровневое дрочево, и отвлекаться на всякую подзалупную хуету вроде осоьбеннойстей какой-то там архитектуры ему некомильфо.
  • @vt, Нда? Иди скажи это открыто и смело прямо в лицо программистам Micro$oftа, поместившим драйвер http.sys прямо в ядро для быстродействия.
  • @mabu, в 1999 году? На тот момент других вариантов не было.
  • @vt, отличный рецепт поставить раком ЛЮБУЮ систему, что мы и наблюдаем ВСЕГДА.
  • @vt, раз в /106 ты не можешь, покажи хоть "нормальные" с твоей точки зрения языки, про которые нельзя сказать ничего что ты плохого об остальных сказал
  • @akastargazer, Нет, мы это наблюдаем потому, что используемый нами софт на 90% написан на низкоуровневом говне, которое невозможно поддерживать и оперативно устранять проблемы. И вот любители кала мамонта 30-40 летней давности не дают двигаться прогрессу, "как, почему, зачем нам что-то новое, деды так делали, и нам так делать надо!"
  • @Renha, ради выяснения истинамиЭк завернул. Но в таком разе попробуй не спор, а дискуссию!
  • @vt, согласись, если кал мамонта позволяет работать 90% людям, а твои нанотехнологии доступны лишь избранным, то вывод очевиден
  • @akastargazer, технически например останки динозавров и растительности древней действительно позволяют работать многим людям, став нефтью)
  • @Renha, совершенно верно, и с программами так же — они могут использовать компиляторы, библиотеки, и т.д., написанные на более низкоуровневых средствах, но им самим для этого совершенно не нужно опускаться на их уровень
  • @akastargazer, вот это и есть застревание в развитии, о котором я писал. Твой профессор в молодости как раз и боролся за прогресс, и бегин с эндами и фиксированными массивами были прогрессом, по сравнению с ручной возней с регистрами и ячейками памяти. Но прошло 40 лет и теперь бегин-енды и фиксированные массивы только сдерживают его.
  • @vt, гм. Вообще-то всем известно, что рынок давно отринул Оберон в пользу более продвинутых инструментов. А ты мне теперь сообщаешь, что, оказывается, именно Оберон сдерживает прогресс.
  • @Renha, Есть ещё одна теория происхождения нефти — небиологическая.
  • @mabu, да, читал об этом, ну то больше в тему было
  • @vt, ты будешь для фирмы производящей цифровые тонометры и аппараты для мониторинга АД ставить армы и иную хуёту? совсем в экономику не можешь штоле?

    по сабжу — ты неправ ибо : например иаровские компиляторы сей для мк считаются лучшими — но даже они крепко сосут в сравнии с генерацией прошивки. поскольку ты можешь выудить каждый шаг преобразования синтаксиса в бинарь. не элф или пэе — просто последовательность комманд. восьмибитный проц карл! тут нужно удобно и явно оптимизировать код понимаешь? писать не на цэшке и асме а на нормальном спецализированом под камень и задачу языке. раньше вышеописаная работало на яве — но ява бля таких задач ==залупа ибо лишних телодвижений куча. код занимал около 50к строк и плохо поддерживался потому что инженегры это не програмисты . а форт создан для задания метаязычков и разворачивания оных в последовательность действий для VM .

    ты уж извини но посчитай стоимость 10000 arm-процов типо stm32 и 10000 attiny85 . так же пойми что работа 5 кодеров в течении 2ух месяцев (5*30000) дешевле чем 10 кодеров с той же зарплтой и копроративная лицензия на IAR embedded workbench на всех. даже если на разработку своего инструмента они потратят пару месяцев.

    PS: я слышал про ОС написанной полностью на яве. только никто не помнит её название ибо она нахуй никому не сдалась. намёк понятен.?
    не спорю что ровнять жопу с пальцем^Cустаревший язык с интерпрайз продуктом — это глупо. но есть задачи , инструменты подбирают под задачи для того чтобы эти задачи выполнять. из этого строится логика , а не из суждений уровня школоты о кодерах-альфачах которые "списывают машину на мороз, купив взамен ту, которая не будет выёбываться и выполнит код в сроки и без выебонов, будь там хоть 1000% неоптимизированного оверхеда. "

    в настоящем мире начальство или маркетологи двигают идею для заработка , манагеры дают разнарядку консульту и тимлиду а кодеры это промежуточное средство кторое идею шефа превращают в продукт. если продукт экономически нецелесообразен(тонометр за 600$ который делает тоже что и тонометр за 1500 рублей) — ебливых альфакодеров выкидывают на мороз и отдают проэкт тем кто сделает его дешевле и качественее. так что сорь — сегодня ты чёт слился , обычно ты набрасываешь лучше.
  • @Renha, Могу сказать как автор: заводить аккаунт на «Хабре» для комментариев бессмысленно. Там нужно писать статьи, что требует чуть побольше усилий.
  • @atomlib, да кинь опу уже инвайт. видишь как просит?
  • @mabu, я пропустил этот коммент каким-то образом О_о Мне казалось, в бейсике это подпрограммы, возвращающие значение, нет? Если да, то слова они такие
  • @Renha, Подпрограммы бывают в виде процедур и функций. Функции возвращают значение, процедуры ничего не возвращают.
    Во фрибейсике подпрограммы являются объектами первого класса.
  • @mabu, "процедура" это частный случай "функции", которая ничего не возвращает, зачем вводить отдельное понятие — загадка из прошлого века.
  • @vt, Потому что Function без Return — это ошибка компиляции.
  • @vt, Кстати, а как ты заставишь функцию ничего не возвращать?
  • @mabu, во-во, ты мыслишь штампами, как и те, кто говорят что без точек с запятой нельзя. Не человек под синтаксис должен подстраиваться, а синтаксис под человека.
  • @vt, Я ненавижу точку с запятой, потому что это синтаксический яд. Дублирование \r\n.
  • @mabu, вот и процедура — аналогично
  • @vt, Как ты различишь «ничего не возвращает» от «возвращает пустоту»?
  • @mabu, но зачем это различать?
  • @vt, Функция всегда что‐то возвращает. А если не нужно ничего возвращать, что вернётся программе? Null? Чем этот Null будет отличаться от «функция ничего не вернула»?
  • @mabu, То есть: чем этот не Null, если вернула ничего, будет отличаться от «функция вернула Null»?
  • @mabu, Блин!
    То есть: чем этот Null, если вернула ничего, будет отличаться от «функция вернула Null»?
  • @mabu, типом данных. Если мы в определении функции указали, что она должна возвращать собачек, значит компилятор должен проверять, что на выходе у нас собачка, а не кошечка. Если мы указали, что она возвращает Ничего (Void, а не Null), то компилятор это тоже должен проверить. Так вот можно просто договориться, что если в описании мы не указываем Void, то подразумеваем его там неявно. Как собственно и сделано в более современных языках, чем твой старославянский бейсик.
  • @mabu, вроде же в бейсике есть неявный Return Result, или это в паскале? То есть даже в древних языках предков уже были соглашения, эти соглашения можно и нужно пересматривать
  • @vt, вот это очень натянуто. Потому что синтаксис часть формального аппарата. Программа это как математическая формула. Не будешь же ты говорить, что надо матаппарат делать ближе к человеку.
  • @vt, поэтому в оберонах нет функций
  • @akastargazer, И как тогда возвращать значения?
  • @mabu, PROCEDURE может возвращать значения.
  • @akastargazer, А как ты узнаешь, вернула процедура значение или не вернула?
  • @mabu, она всегда что-то вернёт. Дальше дело вызывающей стороны проверить результат.
  • @akastargazer, Значение по умолчанию ≠ отсутствие значения.
  • @mabu, отсутствие значения должно быть формализовано в языке. Конкретно для оберона это NIL для указателя. И всё.
  • @akastargazer, Ну вот оно в бейсике и формализовано в виде подпрограммы типа Sub.
  • @mabu, ...всё жду и жду, когда же кто-то скажет про функциональную чистоту. :)
  • @stanis, Методы объекта несовместимы с функциональным программированием.
  • @stanis, вам непременно надо программировать вдоль?
  • @akastargazer, Навязывание собеседнику собственной пресуппозиции — великолепно, но неконструктивно. :)
  • @stanis, Это не тот тред, гости объявлены в /0, как переменные в обероне %) на самом деле нет, но функциональщики в тред с таким /0 не полезут добровольно
  • @6Volt, Полноценную императивность дают всякие Monad/ST, но только так, что после них прогать на хаскелле уже не хочется. OCaml по-приятнее в этом плане
  • @Renha, у них разница в возрасте почти два десятка лет
    эти языки вообще близко не сравнимы — форт по гибкости не уступает лиспу, оберон по жёсткости превосходит всякие явы...
  • @vt, функция не может запустить ракету на фашингтон, процедура — вполне.
    функция — чистая математика, процедура — последовательность действий ввода/вывода.
  • @geniepro, Как это не может? Вот функция УничтожитьЦель, принимает координаты цели и возвращает Истину или Ложь.
  • @mabu, каков тип сущности УничтожитьЦель? если это функция, то в ней не может быть вызова процедуры ВключитьЗажигание — компилятор не позволит
  • @mabu, не обращай внимания, это нам транслируют агитку поехавшего профессора
  • @geniepro, Что такое тип сущности? Я знаю только тип возвращаемого значения, в данном случае это булево значение.
  • @vt, То‐то Я думаю, что политотой какой‐то попахивает.
  • @mabu, сигнатура функции — включает в себя типы входных параметров и тип результата.
    в сигнатуре процедуры тип результата будет обёрнут в IO
  • @mabu, сигнатура функции — включает в себя типы входных параметров и тип результата.
    в сигнатуре процедуры тип результата будет обёрнут в IO