The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Увидел свет язык программирования Rust 1.13

11.11.2016 22:32

Представлен релиз языка программирования Rust 1.13, развиваемого проектом Mozilla, обеспечивающего автоматическое управление памятью и предоставляющего средства для высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime. Параллельно с Rust совместно с компанией Samsung развивается экспериментальный браузерный движок Servo, написанный на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model).

В состав нового выпуска принято 1448 изменений от 155 разработчиков. Основные новшества:

  • Представлен новый оператор "?", позволяющий упростить построение конструкций для обработки ошибок. Оператор "?" проверяет возвращаемое функцией значение и если результат отличается от корректного завершения (Ok), осуществляется выход из функции с возвратом полученного кода ошибки (Err). Например, вместо кода:
    
        match f.read_to_string(&mut s) {
            Ok(_) => Ok(s),
            Err(e) => Err(e),
        }
    
    теперь можно указать:
    
         f.read_to_string(&mut s)?;
         Ok(s)
    

    Функционально "?" также может использоваться как замена макроса "try!", например, вместо "try!(try!(try!(foo()).bar()).baz())" можно написать "foo()?.bar()?.baz()?";

  • Обеспечен постоянный мониторинг изменения производительности через регулярный запуск тестов из набора rustc-benchmarks для актуальной кодовой базы с публикацией результатов на сайте perf.rust-lang.org, что позволяет оперативно выявлять все регрессивные изменения. Пример графика, отражающего оптимизации добавленные в процессе разработки ветки 1.13.
  • Проведена большая работа по увеличению производительности компилятора. Включение наработок по нормализации кэша во время трансляции, позволило при генерации промежуточного кода LLVM IR вместо повторных вычислений задействовать ранее рассчитанные значения. В некоторых ситуациях данная оптимизация сократила время сборки при включении отладочного режима на 40%.

    Ускорена компиляция исполняемых контейнеров (crate), содержащий большое число inline-функций (#[inline]). Промежуточное MIR-представление подобных функций теперь сохраняется и используется во время генерации LLVM IR для всех вызовов из crate-контейнера. В некоторых ситуациях ускорение сборки может достигать 50%.

  • В пакетный менеджер Cargo внесены изменения, направленные на увеличение безопасности, а также добавлены новые опции "--all-features" и "--message-format";
  • Обеспечена возможность использования макросов для определения типов;
  • В разряд стабильных переведена новая порция функций и методов.

Напомним, что язык Rust сфокусирован на безопасной работе с памятью и обеспечении высокого параллелизма выполнения заданий. При этом Rust обходится без использования сборщика мусора или runtime, что делает возможным создания на Rust библиотек, которые могут выступать в роли прозрачной замены библиотекам для языка Си. Для распространения библиотек на языке Rust, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo, позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек введён в строй репозиторий crates.io.

По структуре язык Rust напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Rust поддерживает смесь императивных, процедурных и объектно-ориентированных методов с такими парадигмами, как функциональное программирование, обобщённое программирование и метапрограммирование, в статических и динамических стилях.



  1. Главная ссылка к новости (https://blog.rust-lang.org/201...)
  2. OpenNews: Представлена операционная система Redox, написанная на языке Rust
  3. OpenNews: Facebook работает над реализацией сервера Mercurial на языке Rust
  4. OpenNews: Доступен язык программирования Rust 1.12
  5. OpenNews: Успехи Rust: Подготовка первого выпуска Servo и использование Rust в новом хранилище Dropbox
  6. OpenNews: В Firefox 48 начнётся интеграция компонентов на языке Rust
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/45481-rust
Ключевые слова: rust
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (112) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (-), 23:01, 11/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    >Rust напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п.
    >избавляет
    >защищает

    Почему-то в этой хвалебной оде языку Rust скромно умалчивается слово:

    >опускает

    производительность.

     
     
  • 2.3, Другой аноним (?), 23:47, 11/11/2016 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Потому что тут говорится про отличия от C++
     
     
  • 3.37, Аноним (-), 09:45, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Тут говорится про отличие от предыдущей версии. Но для утешения можете приврать чтонить.
     
  • 3.42, Алексей (??), 11:04, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Это очень даже отличие, и очень даже существенное.
     
  • 2.4, Аноним (-), 23:49, 11/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что это и дураку понятно.
     
  • 2.5, Аноним (-), 00:21, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Тише едешь - дальше будешь. Поэтому тырпрайз предпочтет неторопливую, но надежную яву высокопроизводительным крестам, -- крестам, которые будут нести разрабы, получая и закрывая ежедневно пачки тикетов, связанных со stack overflow.
     
     
  • 3.7, A.Stahl (ok), 00:39, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И где ты был, когда всем делали прививки от Изенболы? Бесплатно, между прочим...
     
     
  • 4.25, Аноним (-), 05:04, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Судя по твоей обиженной речи, сам Изя тебе и сделал прививку.
     
  • 2.8, Аноним (-), 00:40, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +4 +/
    >> защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п.
    >>избавляет
    >>защищает
    > Почему-то в этой хвалебной оде языку Rust скромно умалчивается слово:
    >>опускает
    > производительность.

    А можно поподробнее -- как именно вы повышаете производительность обращением к областям освобожденной памяти и выходами за границы буфера?


     
     
  • 3.14, Андрей (??), 02:58, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Убирая проверки из рантайма. И по возможности реализуя их для debug сборки.
     
     
  • 4.17, Аноним (-), 03:09, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Убирая проверки из рантайма. И по возможности реализуя их для debug сборки.

    C каких это пор вдруг компайлтайм == рантайм?


     
     
  • 5.22, Андрей (??), 04:28, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • –3 +/
    А Раст может узнать все размеры не выполняя программу? Чудеса. А если не все, то такое и для C/C++ есть: статический анализатор.
     
     
  • 6.58, Аноним (-), 14:56, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +8 +/
    > А Раст может узнать все размеры не выполняя программу?

    А чего это вы перескочили на "все размеры"? Естественно, не все.  И что? Отказаться от возможности сделать что-то во время компилирования из таких вот религиозных соображений?

    >Чудеса.

    Конечно чудеса, когда при проектировании языка учитывают современные возможности компиляторов и наработки в этой сфере. Только вот называются эти "Чудеса" -- 'владения', 'временные указатели' и 'время жизни', которые полностью контролируются програмистом и которые как раз и позволяют сделать  "автоматическое" управление памятью и действительно убрать таким макаром целый ряд ошибок.

    > А если не все, то такое и для C/C++ есть: статический анализатор.

    И это, конечно же, заслуга структуры языка, особенно у слаботипизированного Си! Ви таки делаете мне смешно! А скажите-ка любезные, каким образом вы сможете проверить анализатором в сишной программе время жизни чего-либо или владения, если это не предусмотренно самим языком?

    Кстати, походу мало кто из ярых "защитников истинного Си" понимает, какую титаническую работу проделали в гцц по части анализа кода и варнингов-рекомендаций. Запустили бы для сравнения какой нибудь Turbo/Borland C(++)/Watcom C -- а то привыкли к хорошему и воспринимают, как само собой разумеющееся ... да еще и на сторонние статистические анализаторы, которые появились *рен знает сколько лет после компиляторов  кивают, типа  "мы ежики, тоже летать умеем!" :).


     
  • 4.30, Аноним (-), 06:29, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Во-первых стандартный способ обхода массивов в rust - через итераторы, никаких проверок там нет.

    Во-вторых, если без обращения по индексу все-таки не обойтись и компилятор не может оптимизировать это место (как показывают тесты, очень большое "если"), можно поставить ключевое слово "unsafe" и применить арифметику указателей. В будущем с первого взгляда будет понятно, где искать баг, при этом все остальные преимущества rust (модули, cargo, и т.п.) сохранятся.

     
     
  • 5.51, Аноним (-), 13:24, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • –4 +/
    И в итоге любой нетривиальный алгоритм будет состоять из unsafe'ов чуть менее чем полностью.
     
     
  • 6.64, Аноним (-), 16:23, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > И в итоге любой нетривиальный алгоритм будет состоять из unsafe'ов чуть менее  чем полностью.

    Или анониму следует объяснить что такое "нетривиальность" в его понимании или же найти тут http://benchmarksgame.alioth.debian.org/u64q/program.php?test=mandelbrot&lang или тут http://benchmarksgame.alioth.debian.org/u64q/program.php?test=regexdna&lang=r
    ансейфы.

     
  • 6.83, 5kbps (ok), 00:06, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > И в итоге любой нетривиальный алгоритм будет состоять из unsafe'ов чуть менее
    > чем полностью.

    Нет. Просто нужно использовать соответствующие парадигме программирования техники.

     
     
  • 7.93, Аноним (-), 06:57, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • –4 +/
    ... и забыть о производительности.
     
     
  • 8.97, Аноним (-), 15:32, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    А все почему А потому что вброс W гладиолус Или тут http benchmarksgame ali... текст свёрнут, показать
     
     
  • 9.100, Аноним (-), 02:58, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    На benchmarksgame ссылаться - как на дистроватч Синтетика, подкреплённая неадек... текст свёрнут, показать
     
     
  • 10.106, Аноним (-), 14:03, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Я ссылаюсь на код, который, как не крути, писался в первую очередь с целью выжа... текст свёрнут, показать
     
  • 4.44, Аноним (-), 11:23, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Вас hearthbleed видимо ничему не научил.
    https://cve.mitre.org/data/downloads/allitems.html — посмотрите просто ради интереса, какая часть уязвимостей связана с этом самом супероптимизирующем подходе с отсутствием проверок границ.
     
     
  • 5.99, Аноним (-), 22:01, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Покажите реализацию SSL на божественном русте и без hearthbleed'a
     

  • 1.6, Аноним (-), 00:28, 12/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    > и модель акторов

    Доколе это будет кочевать из новости в новость о rust?

     
     
  • 2.32, Аноним (-), 08:33, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >> и модель акторов
    > Доколе это будет кочевать из новости в новость о rust?

    Fractalide implements the actor model using the Rust programming language.
    https://github.com/fractalide/fractalide

     
     
  • 3.63, Аноним (-), 16:19, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >>> и модель акторов
    >> Доколе это будет кочевать из новости в новость о rust?
    >
    > Fractalide implements the actor model using the Rust programming language.
    > https://github.com/fractalide/fractalide

    Pykka is a Python implementation of the actor model, which makes it easier to build concurrent applications
    https://github.com/jodal/pykka

    Теперь в каждой новости о питоне тоже можно про акторы писать?

     

  • 1.9, neon1ks (ok), 01:01, 12/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Я бы назвал это новостью об компиляторе Rust, чем о самом языке.

    Отличие между C++ и Rust: в C++ в начале разрабатывается стандарт, а уже потом пишутся компиляторы. В Rust же в начале пишется компилятор, а уже в будущем возможно будет стандарт.

     
     
  • 2.11, Аноним (-), 01:55, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Языковс формальным процессом стандартизации мало. В этом плане с++ скорее исключение.

    > в C++ в начале разрабатывается стандарт, а уже потом пишутся компиляторы

    Нет. Во-первых, обычно первая реализация фичи появляется вместе с пропозалом. Иначе фичу скорее всего не примут в стандарт. Во-вторых, компиляторы реализуют будущий стандарт в процессе разработки. Да, на полную реализацию с++11 у компиляторов ушло значительное время уже после выхода стандарта. Но это потому что релиз был более чем мажорный. К моменту выхода с++14 и гцц, и шланг его практически уже реализовали.

     
  • 2.31, Аноним (-), 06:34, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +4 +/
    в rust в начале пишется RFC. Но, в отличие от C++, RFC тут рассматриваются и принимаются непрерывно, а не раз в пару лет. Отсюда и гораздо более быстрый прогресс.
     
  • 2.33, Ordu (ok), 08:36, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Отличие между C++ и Rust: в C++ в начале разрабатывается стандарт, а уже потом пишутся компиляторы.

    Ха-ха. Сначала был Страуструп, который писал компиляторы. И написав очередную версию компилятора он переиздавал свою книженцию. Сначала он релизил компилятор, потом переиздавал книженцию. А первый стандарт появился в 1998 году, то есть лет через пятнадцать после Си с классами.

    Поэтому не надо тут сказок рассказывать о великом C++. Его десятилетиями вгоняли в сколько-нибудь вменяемую модель развития. Ему скорее стыдиться надо этого, и гордиться там нечем.

     
     
  • 3.40, QuAzI (ok), 10:37, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если первопроходцам надо стыдиться, то вы вообще должны были от стыда умереть ещ... большой текст свёрнут, показать
     
     
  • 4.43, Алексей (??), 11:18, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ну с сей никто не уйдет как минимум потому что у него весьма обширная кодовая база. Ни один адекватный разработчик не станет переписывать быстрый отлаженный код, на менее эффективном Rust, тем белее в большом проекте. Ну а комментарии местных анонимов вообще не стоит принимать во внимание, их юношеский максимализм в связи с отсутствием серьезных проектов за плечами, позволяет им переписывать свои хелловорды на модные языки хоть каждый день...
     
     
  • 5.48, Аноним (-), 11:44, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну в дропбоксе, мозилле, фейсбуке и даже в самсунге конечно работают только школьники, у которых единственная цель — покрасоваться в новостях. Особенно учитывая что двое из перечисленных переводят свои главные проекты на раст — вот выпердрёжники-то! Тормозить же будет от проверки при обращении по индексу массива! И ведь сохранисть старую кодобазу и писать на расте только новые хэловорды нельзя.

    Ме кажется не стоит своё низкое культурное развитие приравнивать к сложности/нечитаемости/ненужности языка.

     
     
  • 6.49, DG94 (ok), 12:27, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это крупные игроки они располагают приличным финансовым капиталом и могут позволить себе экспериментировать, MS вообще все подряд скупает и закапывает, просто потому что может.
    Так что твой аргумент, не аргумент, вот когда linux kernel перепишут на Rust тогда и расскажешь мне о серьезном применении ржавого. Ну а насчет низкого культурного развития, это похоже на неудачный вброс импульсивного анона, ибо необоснованно вообще никак. Ну и о школьниках я ничего не писал, ибо не привык мыслить стереотипами.
     
     
  • 7.53, Аноним (-), 13:42, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что за мания переписывания? Кто-то предлагает завтра же выкинуть старый код из-за нового языка в проекте или что? Кто и зачем будет переписывать десятилетние нагромождения линукса?

    Та же мозилла внедряет его частично — см. quantum. Но нет, видимо пока на нём не перепишут всё легаси двадцатилетней давности, это так, игрушка не для сириус продакшена.

     
  • 6.61, freehck (ok), 15:22, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В крупных коммерческих компаниях всё не так Они вкладывают деньги в новые идеи,... большой текст свёрнут, показать
     
     
  • 7.69, . (?), 20:42, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    А хороший блин пост получился! Это ж блин в гранит надо! :)
    Молдца freehck!
     
  • 7.72, 5kbps (ok), 21:19, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Это тупо Ведь входные данные будут другими, следовательно никаких гарантий со с... большой текст свёрнут, показать
     
     
  • 8.78, freehck (ok), 23:43, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну не совсем Бывают случаи, когда уместно сделать именно так Например, Вы пише... большой текст свёрнут, показать
     
     
  • 9.82, 5kbps (ok), 00:02, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты не уловил посыл В общем случае, если ты отключил проверки, то ошибки не искл... текст свёрнут, показать
     
     
  • 10.88, freehck (ok), 01:44, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Да, совсем не исключаются Это уже только детальным анализом алгоритма Но и мой... большой текст свёрнут, показать
     
     
  • 11.90, 5kbps (ok), 01:55, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Можно seq везде писать ... текст свёрнут, показать
     
  • 11.91, 5kbps (ok), 02:01, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    См последний пример в Examples у них на сайте Копипастой переводом не занимаюс... текст свёрнут, показать
     
  • 11.92, 5kbps (ok), 02:49, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    А в чём проблема Любой класс типов можно рассматривать как обобщающий тип Разн... текст свёрнут, показать
     
  • 11.112, 0xd34df00d (??), 22:17, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Зато на самом деле очень удобно, если научиться этим пользоваться я пока умею н... текст свёрнут, показать
     
  • 9.86, Аноним (-), 01:38, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если уж прям так припёрло обращаться к массивам па значению, можно либо пойти по... текст свёрнут, показать
     
  • 5.57, freehck (ok), 14:55, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Ну с сей никто не уйдет как минимум потому что у него
    > весьма обширная кодовая база. Ни один адекватный разработчик не станет переписывать
    > быстрый отлаженный код, на менее эффективном Rust, тем белее в большом
    > проекте.

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

     
     
  • 6.60, Аноним (-), 15:09, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Сишный ABI прост как палка и просто прикручивается куда угодно.
    Другое дело что чтобы комфортно работать с ним из другого языка со своими концепциями и стилем уже требуются дополнительные телодвижения.
     
  • 4.56, freehck (ok), 14:50, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > try!(try!(try!(foo()).bar()).baz())
    > зачем такая вложенность?
    > зачем повторно бросать уже брошенное исключение?

    Кстати да, это интересный вопрос.
    Обычно это делается так (пример на Ocaml)

    try foo () |> bar |> baz
    with exn -> exn_handler_code

    И какая бы из функций конвеера ни бросила отсключение, его обработает exn_handler_code.

    Поясните кто-нибудь, зачем тут вложенные try?

     
     
  • 5.59, Аноним (-), 15:05, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Потому что в расте и нету исключений. try! — это макрос для тех, кому лень на каждый вызов возвращающий Option/Result писать unwrap/unwrap_or или матчить руками. Для того оператор ? и ввели.
     
     
  • 6.80, freehck (ok), 23:49, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Потому что в расте и нету исключений. try! — это макрос для
    > тех, кому лень на каждый вызов возвращающий Option/Result писать unwrap/unwrap_or или
    > матчить руками. Для того оператор ? и ввели.

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

     
     
  • 7.113, 0xd34df00d (??), 22:19, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Исключения какие-то. Тяжело без монадического Either :)
     
  • 2.55, Sergeyy (?), 14:48, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >> ...  в C++ в начале разрабатывается стандарт, а уже потом пишутся компиляторы. В Rust же ...

    neon1ks, Вы ничего не перепутали?
    В Цпп сложилась такая ситуация: множество компаний делают свои компиляторы языка C++, потом комитет по стандартизации собирает полезные новшества + заявки от участников комитета и прочих пользователей языка => появляется новая версия стандарта. См. [ https://ru.wikipedia.org/wiki/C%2B%2B#.D0.A0.D0.B0.D0.B7.D0.B2.D0.B8 ]

    или, ещё лучше, см. сюда: [ https://isocpp.org/std/the-life-of-an-iso-proposal ].

     
     
  • 3.65, neon1ks (ok), 18:12, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Значит заблуждался.
     

  • 1.10, Аноним (-), 01:52, 12/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Синтаксис ужаснейший просто.
     
     
  • 2.12, doom (ok), 02:26, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +7 +/
    > Синтаксис ужаснейший просто.

    Согласен, налепили уже столько говна, что С++ кажется не таким и страшным.

     
  • 2.13, imprtat (ok), 02:44, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Так кажется только до тех пор пока не попробуешь. Ну а некоторые ограничения быстро отбрасывают "горе-девов", которые рвутся имплементить что-либо после просмотра хеллоу-ворлда, вместо того что бы прочитать спецификацию.
     
     
  • 3.16, Андрей (??), 03:00, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    А спецификация у языка Раст не на 1500 страниц, как у С++? Единственная известная мне спецификация, которую при желании реально прочесть за раз от корки до корки - это у Go. Буквально несколько дюжин страниц.
     
     
  • 4.18, angra (ok), 03:38, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Может ты просто мало языков знаешь? Посмотри на Component Pascal.

    Спецификация на Go 25.5k слов, 3k  строк
    Спецификация на CP 1.5k слов, 0.3k  строк

    Разница на порядок и не в пользу go.

    И это мы еще не берем эзотерику вроде brainfuck.

     
     
  • 5.21, Андрей (??), 04:26, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Эзотерику мы не берём и правильно. А Component Pascal где-то также распространён как и Go? Если бы да, то и я бы о нём знал. Но теперь буду знать, спасибо. Ведь интересно сравнить те языки, которые по тем или иным причинам пробились.

    > Спецификация на Go 25.5k слов, 3k  строк
    > Спецификация на CP 1.5k слов, 0.3k  строк

    Так, Go: https://golang.org/ref/spec и CP: http://www.oberon.ch/pdf/CP-Lang.pdf
    В CP-Lang.pdf 32 страницы - так что никак ни 300 строк, а

    $ pdftotext CP-Lang.pdf - | wc
       2321   11097   70094

    2.3k строк.

     
     
  • 6.23, angra (ok), 04:37, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Да, у меня в прошлом посте неверные цифры. Скорее всего из-за копирования текста с неотрендеренного полностью pdf. Тем не менее спецификация его действительно короче чем у go.
    Неужто о семействе языков pascal ни разу слышать не приходилось?
     
     
  • 7.26, Андрей (??), 05:05, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Именно Component не помню. Об Обероне, конечно, да. А на VHDL и писать время от времени приходится. Аду как минимум читать, т.к. свободный симулятор GHDL на ней написан.
     
  • 2.15, Леха (?), 03:00, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Мне кажется, что в последнее время создатели новыхнедоязыков, употребив наркотические средства, придумывают синтаксис, который читаем и понятен только им. Такими темпами скоро будет: f a &t *f = | &a ^ !g | .. : str -> { ok(a?) }
     
     
  • 3.19, angra (ok), 03:44, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И ты тоже мало языков знаешь. Вот тебе реальный пример кода на J, одном из потомков APL:

    >([:{: ]#~ (=|.&.>)) <@":"0 /:~(0:-.~[:,>:/**/)~(i.100)-.~i.1000

    Посмотри в какие годы появились эти два языка.

     
     
  • 4.20, Леха (?), 04:12, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Наркоманский код, ужас просто...
     
     
  • 5.24, angra (ok), 04:44, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Дело привычки и знания синтаксиса. Мне после perl крайне неудобно работать с идентификаторами без сигилов, которые сразу указывают на тип. А у тех, кто не знаком с такой удобной штукой, обилие $ @ & % вызывает отвращение, им привычней добавлять к идентификатору короткие слова вроде array, list, map. При этом те же {} вместо begin end им почему-то кажутся нормальными, хотя это тоже "наркоманские" символы, но к ним привыкли и их значение известно.
     
     
  • 6.27, Андрей (??), 05:17, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Есть ещё язык, на котором уже давно (с конца 60-ых) и всё ещё реально программируют. В основном, в области здравоохранения - MUMPS (в том числе диалект в бывшем СССР - Диамс). Но есть и игровые примеры. Читается на первый взгляд не очень просто:

    https://github.com/pkoper/mumtris.git

    write(s,y,x)
            n i,j,l,c,d
            d pos(y,x)
            s l=$l(s) f i=1:1:l d
            . s c=$e(s,i)
            . i c?1N d
            .. i 'c s y=y+1 d pos(y,x) q
            .. s d=$e(s,i+1) f j=1:1:c w d
            .. s i=i+1
            . e  w c
            d pos(0,0)
            q

     
  • 6.41, QuAzI (ok), 10:45, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Зачем привыкать к плохому? Работа программиста - разрабатывать новый функционал и исправлять старые ошибки, а не одолевать бессонными сутками планку очередного одноразового выноса мозга. Ошибки зачастую вылазят именно из-за неоднозначности кода. Т.е. ты считаешь что он во всех ситуациях будет вести себя как тебе надо, а он в 99 отработал так, а в 1 иначе. И без 10000 часов зубрения этого ЯП ты всё равно будешь ошибаться, ошибаться и ошибаться (людям свойственно). И твой волшебный код обсыпанный "сахаром" и обмазанный известными только тебе типсами и триксами никому не нужен, потому что он несопровождаем. И Security through obscurity в исходниках не нужно.
     
     
  • 7.68, angra (ok), 18:56, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Еще раз для танкистов. Почему {} вместо begin end или вообще пробелов/табов это читаемо, сопровождаемо итд, а тот же % вместо map, dict или как еще фантазия подскажет конкретному програмисту - уже нет? А с неоднозначностью вообще мимо. Сигил @ означает список(массив) для любого программиста на перл, в отличии от скажем прилепленой к имени буковки L или A, которые расшифровываются в List или Array только для автора кода.
     
     
  • 8.96, Ordu (ok), 11:23, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Потому что человек с трудом осилил синтаксис C, и теперь мысль об освоении новог... большой текст свёрнут, показать
     
     
  • 9.104, Аноним (-), 11:55, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    клоун Сначала по поводу Фрейда Мозг работает в условиях жесточайшего дефицита ... большой текст свёрнут, показать
     
     
  • 10.107, Аноним (-), 14:54, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Конечно, во первых это будет во многих случаях b одинадцатый b элемент, во вт... текст свёрнут, показать
     
     
  • 11.108, Аноним (-), 15:21, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    клоун Хотя кашалоты большие и тяжёлые, но суммарно в океане планктона больше Я... текст свёрнут, показать
     
     
  • 12.109, Аноним (-), 15:46, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Только как-то проверить это заявление никак не получится Да и кому интересны м... большой текст свёрнут, показать
     
     
  • 13.110, Аноним (-), 15:58, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    клоун на 1С пишут не hello world ы И личный веб-сайтик он хоть и простенький, ... текст свёрнут, показать
     
  • 10.114, 0xd34df00d (??), 22:21, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я не хочу возражать по программистской части, потому что это будет старым-добрым... текст свёрнут, показать
     
     
  • 11.116, Аноним (-), 04:04, 15/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    клоун математически результат не опоеделяем, но это не означает что нужно преры... текст свёрнут, показать
     
     
  • 12.117, 0xd34df00d (??), 04:17, 15/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я говорил про математическую сторону Про выполнение там вообще ничего не было ... текст свёрнут, показать
     
     
  • 13.118, Аноним (-), 10:54, 15/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    клоун Математика в программировании существует весьма условно Так x x 5 или x ... текст свёрнут, показать
     
  • 4.73, 5kbps (ok), 21:26, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >>([:{: ]#~ (=|.&.>)) <@":"0 /:~(0:-.~[:,>:/**/)~(i.100)-.~i.1000

    Не имею понятия, что здесь написано, но вставлю свои пять копеек.

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

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

     
  • 3.34, Ordu (ok), 08:57, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Мне кажется, что в последнее время создатели новыхнедоязыков, употребив наркотические
    > средства, придумывают синтаксис, который читаем и понятен только им.

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

    Синтаксис нового языка должен быть понятен только посвящённым, иначе это не новый язык, а очередной недоклон сишечки. Ну или алгола, хотя сегодня это уже не столь актуально.

     
     
  • 4.39, Аноним (-), 10:26, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Бред.

    Языки программирования придумывались, чтобы упростить работу программисту (большинство). ЯП - транслятор человеческой логики в машинную. Для развлекушек с символами есть свои местечковые ЯП и нефиг переносить это в общий тренд.

     
     
  • 5.54, антончик (?), 14:23, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    НЕ бред, Haskell богат всяческими сахарными операторами и прочими особенностями, повышая тем порог вхождения новичков, он достаточно сильно абстрагирован от машины (сильнее чем си или rust), то-есть он по-сути "человечнее", и рождён этот сахар был не для того, чтобы прогнуться под особенности машины, а чтобы реализовать потребности человеческой логики, просто этот язык и его тонкости нужно знать, чтобы использовать это эффективно, и по факту это и есть упрощение переноса человеческой логики в машинную, удалясь от деталей реализации машины так далеко, как это возможно, чтобы не потерять эффективность, при этом кратко и лаконично выражая идеи человеческой логики.

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

    Самый простой язык по вашему - это Forth.
    PEN APPLE UGH!
    И получаем на вершине стека APPLEPEN.

     
  • 5.81, Ordu (ok), 23:56, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Для развлекушек с символами есть свои местечковые ЯП и нефиг переносить это в общий тренд.

    Окей. Нефиг, так нефиг. Мозилла идёт своим трендом, а общий тренд пускай катится куда ему угодно. Меня такое положение дел вполне устраивает.

     
  • 5.89, angra (ok), 01:55, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты в силу отстутсвия опыта конечно не поверишь, но использование неалфавитноцифровых символов(или просто [^\w]) таки упрощает работу программиста, причем как по написанию, так и по чтению кода. Точно также как они упрощают запись и чтение выражений в математике. Например, вместо громоздкой фразы "необходимо и достаточно" или "тогда и только тогда" можно написать просто "<=>" и каждый математик это поймет, точно также как ты понимаешь, когда вместо "2 плюс 2 равно четыре" пишут "2+2=4".

     
     
  • 6.105, Аноним (-), 13:43, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • –3 +/
    клоун Ты действительно считаешь, что if JumpStm j dynamic_cast JumpStm st... большой текст свёрнут, показать
     
     
  • 7.115, 0xd34df00d (??), 22:26, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Взять напр. математику, в ней нет необходимости добавлять проверку на ноль или
    > исключение всякий раз когда встречается деление.

    Вообще-то есть. На нулевые и вырожденные случаи постоянно проверять надо. Вы не можете сказать, что ab = cb ⇔ a = c, вы должны сказать ab = cb ⇔ a = c ∨ b = 0. Вы не можете сказать, что в комплексном векторном пространстве у оператора существует собственное значение, вы должны сказать, что в ненулевом комплексном пространстве у оператора существует собственное значение.

    > И вопрос как это сделать
    > в программировании быстро и удобно.

    Завернуть вычисление в Either-подобную монаду и писать везде >>=  (ну или do).

     
  • 2.50, Аноним (-), 13:06, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Согласен. Лично меня из с++ заменителей больше всего привлекает D, хотя бы своим вменяемым синтаксисом, на котором приятно писать.
     
     
  • 3.52, Аноним (-), 13:42, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Лично меня из с++ заменителей больше всего привлекает D

    А меня вот ничего не привлекает, останусь на C++.

     

  • 1.28, Вареник (?), 05:48, 12/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >> замена макроса "try!", например, вместо "try!(try!(try!(foo()).bar()).baz())" можно написать "foo()?.bar()?.baz()?";

    - Это называется "безопасный язык"? В нем логических ошибок будет по три на строчку, учитывая контингент (школота), наложенную на уверенность в "безопасности".

     
     
  • 2.35, Ан (??), 09:41, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Контингент "школота" его либо обойдёт либо будет поднимать уровень знаний. Иначе они просто будут бороться с компилятором ибо он будет больно бить по рукам за тот шит который они делают. А борьба с компилятором быстро утомит порывистого юнца если он решил что он умнее книг.
     
     
  • 3.38, Аноним (-), 09:59, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Пока что данный язык школотой используется только в комментах, потому как если б она столкнулась с ним на практике, внезапно б выяснилось, что язык этот сильно плох и вообще виновен во всём и сразу, включая залёт одноклассницы, двойку по физике и повестку из военкомата (да-да, программа ж сама не написалась так правильно, как хотел заказчик, программист тут ни при чём).  Такими свойствами форумные интеллектуалы уже наделили PHP и C.
     

  • 1.29, Вареник (?), 05:49, 12/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Write-only language. Читаемость соревнуется с Scala.
     
     
  • 2.46, Аноним (-), 11:35, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    В отличие от скалы у него очень строгий синтаксис, не имеющий даже половины фичей скалы.
    Но опять же — из подобных комментариев становится видно, как хорошо человек знаком с обсуждаемым языком, или с его аналогами с трёхэтажными макросами/шаблонами на наследованием которым не уступает жаве (причём множественным) и прочими вкусностями.
     

  • 1.45, Аноним (-), 11:35, 12/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Rust поддерживает смесь императивных, процедурных и объектно-ориентированных методов
    Наследование не завезли
     
     
  • 2.47, Аноним (-), 11:38, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А формальное определение ООП с которым бы все согласились уже завезли?
    Пока эта парадигма у каждого своя — глупо ждать какой-то конкретики от языков с этим кейвордом в описании.
     
     
  • 3.62, Аноним (-), 15:48, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Покажи мне компактную реализацию наследования в ржавчине. Не 100500 строк как в оттранслированном коде с vala на c.
     
  • 3.71, жабабыдлокодер (ok), 21:09, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Формальное определение ООП - инкапсуляция, наследование, полиморфизм.
     
     
  • 4.84, ащщифк (?), 00:14, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >> ...наследование

    пока идиоматическое наследование в Rust это только - композиция.

     
  • 4.103, Аноним (-), 08:39, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >жаба
    >инкапсуляция, наследование, полиморфизм.

    Нет формального определения ООП. Указанное выше справедливо для жабы, но не для всех языков.

     
  • 2.74, 5kbps (ok), 21:37, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Rust поддерживает смесь императивных, процедурных и объектно-ориентированных
    > методов
    > Наследование не завезли

    Наследование "дорогое". Для системного языка не подходит.

     
     
  • 3.85, Аноним (-), 01:30, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Что-то я не увидел особо желающих писать на расте для микроконтроллеров. А вот как замена крестам - многие. Кроме того никто же не заставляет везде совать классы, достаточно всего-лишь добавть немного синтаксического сахара и программисты сами разберутся где использовать наследование а где нет.
     
  • 3.94, Линукс еще не готов (?), 08:42, 13/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    С практической точки зрения, достаточно "расширения" структур. Условно
    struct Foo{
    int a;
    }
    struct Bar extend Foo{
    int b;
    }
     

  • 1.67, Аноним (-), 18:32, 12/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Перевести нововведение на человечий язык можно так: теперь вместо саркастичного "Да!Да!Да!Такяиповерил()" можно просто сказать "Дану?", что гораздо удобнее.
     
     
  • 2.75, . (?), 22:01, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Улыбнул! :) Паря - тебе надо ЯП писать а не посты в уютненький :)
     
     
  • 3.101, Аноним (-), 05:55, 14/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >уютненький
    >посты

    Ты вообще понимаешь, что пишешь? Кроме улыбашек что-то есть в голове?

    Семён просто незаметен.

     

  • 1.76, Аноним (-), 23:16, 12/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –12 +/
    Rust украл часть нового синтаксиса нового у Swift 3.0

    Выглядит как ужаснищий костыль сравнимый с началами Brainfuck.

     
     
  • 2.77, ащщифк (?), 23:38, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это стабильный релиз с "?" - а так этот сахар уже более полугода живет в коде живет.
     
  • 2.79, ащщифк (?), 23:47, 12/11/2016 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Хотя нет, вот RUST-RFC на базе которого эта фича появилась, от 2014 года!
    Ещё до того как Swift 1.0 появился!

    https://github.com/rust-lang/rfcs/pull/204

    и кстати, с чего это костыль?

     
     
  • 3.122, QM (?), 13:37, 16/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А вот в вопросе "и кстати, с чего это костыль?" знак вопроса собственно обозначает вопрос, в С/С++ знак вопроса тоже обозначает вопрос Условие ? Да : Нет, но я не очень понял чего конкретно означает знак вопроса в Rust. При этом вариант ответа "Да" существует и объявлен явно, а вариант "Нет" тоже существует, но явно не объявлен. А уж в примерах с try!(.....) try! куда более информативен.
     

  • 1.121, Аноним (-), 12:10, 16/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Не осилили C , придумали Rust Читаемость кода - просто шизец Я согласен с тем... большой текст свёрнут, показать
     
     
  • 2.123, Аноним (-), 16:16, 16/11/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Не осилили C++, придумали Rust.

    ...
    > А вот при том, что тут похоже, кто-то не осилил C++, и
    > начал городить огороды. Получился новый Perl, простите, Rust...

    И правда, куда уж всяким Грейдонам Хорам https://github.com/graydon до Ыкспертов опеннета ...

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру