The OpenNET Project / Index page

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

Представлены принципы дизайна компилятора Nimony для будущего Nim 3.0

03.05.2025 22:32

В процессе разработки языка программирования Nim 3.0 развивается новый компилятор Nimony, основополагающим принципом проектирования которого является достижение предсказуемости времени выполнения в худшем случае (Worst Case Execution Time, WCET). Это требование продиктовано ориентацией на системы жёсткого реального времени, где недетерминированное поведение недопустимо. Как следствие, архитектура Nimony исключает использование JIT-компиляторов и сборщиков мусора с трассировкой (tracing garbage collectors), поскольку их операции могут вносить непредсказуемые задержки.

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

В области автоматического управления памятью (MM), Nimony отходит от многообразия опций, доступных в Nim 2.0, предлагая единственный стандартизированный режим: "mm:atomicArc". Данный режим базируется на подсчёте ссылок с использованием атомарных операций, дополненном семантикой перемещения (move semantics) и вызовом деструкторов при уничтожении объекта, что сближает подход с практиками, принятыми в Rust и современном C++.

Ключевым нововведением является явное разделение объектов на ацикличные и потенциально цикличные. По умолчанию объекты считаются ацикличными (.acyclic), что является новым поведением. Для типов данных, экземпляры которых могут формировать циклические ссылки, требуется явная аннотация прагмой .cyclic. Отмечается, что ведётся разработка нового алгоритма сборки циклических ссылок, однако его готовность к промышленному использованию на данный момент не гарантирована. Преимуществом MM на основе деструкторов называется его композируемость: управление ресурсами, требующими освобождения (например, файловые дескрипторы, сетевые сокеты, каналы), интегрируется естественным образом через деструкторы соответствующих типов.

Подход к обработке ошибок в Nimony претерпел значительные изменения. Автор Nim выражает неудовлетворённость традиционными механизмами исключений и их эмуляцией через алгебраические типы данных (sum types). Вместо этого предлагается концепция интеграции состояния ошибки непосредственно в сам объект данных. В качестве примеров приводятся: представление ошибки в потоках ввода-вывода через специальное состояние, использование NaN для чисел с плавающей запятой, или low(int) для невалидных целочисленных значений. В случаях, когда объект не может инкапсулировать состояние ошибки, предлагается использовать потоко-локальную (thread-local) переменную для сигнализации.

Тем не менее, традиционный механизм исключений Nim сохраняется, но с одним важным уточнением: любая процедура, способная порождать исключение, теперь должна быть в обязательном порядке аннотирована прагмой {.raises.}. Это требование направлено на явное обозначение потенциальных нелокальных переходов управления.

В качестве альтернативы или дополнения вводится новый перечислимый тип ErrorCode. Данный тип является типобезопасным и требует исчерпывающей обработки всех возможных вариантов (аналогично case для enum). ErrorCode спроектирован с учётом возможности отображения на стандартные коды ошибок различных систем и протоколов, таких как POSIX errno, коды ошибок Windows API и статусы HTTP. Цель — унифицировать обработку ошибок между различными библиотеками и обеспечить возможность прямой трансляции системных ошибок (например, "диск переполнен") в соответствующие коды состояния (например, HTTP 507) без дополнительных преобразований. Использование ErrorCode также позволяет обрабатывать и распространять ошибки без выделения памяти в куче, что критично для обработки ситуаций нехватки памяти (OOM).

Обработка ситуаций исчерпания памяти (Out of Memory, OOM) в Nimony реализована с отходом от распространенной практики аварийного завершения программы ("die on OOM"). Вместо этого предлагается механизм, позволяющий приложению продолжить работу. Контейнеры и операции выделения памяти, которые не могут выполнить запрос, вызывают переопределяемый обработчик oomHandler. Реализация по умолчанию записывает размер неудавшегося запроса в потоко-локальную переменную и позволяет выполнению продолжиться. Состояние нехватки памяти для текущего потока может быть проверено вызовом threadOutOfMem().

Разработчик может предоставить собственную реализацию oomHandler, например, для логирования или аварийного завершения приложения, если такое поведение является предпочтительным. Важным аспектом является обработка операций конструирования ссылочных объектов (ref object), которые могут завершиться неудачей из-за OOM. В Nimony результат таких операций (например, через new или аналогичные конструкторы) может быть nil, и компилятор форсирует обработку этого случая аналогично работе с опциональными типами (Option), предотвращая таким образом ошибки разыменования нулевого указателя. В контексте процедур, аннотированных {.raises.}, возвращаемое значение nil может быть автоматически преобразовано в ErrorCode.OutOfMemError.

Механизм обобщённого программирования (generics) в Nimony получил развитие по сравнению с Nim 2.0. Ключевое улучшение заключается в том, что полная проверка типов обобщённого кода теперь выполняется на этапе его определения, а не только при инстанцировании конкретными типами. Ожидается, что это позволит выявлять ошибки на более ранних стадиях компиляции, предоставлять более информативные сообщения об ошибках и улучшить поддержку со стороны средств разработки (IDE), в частности, автодополнение кода.

Концепции (concepts), уже присутствующие в Nim, сохраняют свою роль как механизм статического описания требований к типам-параметрам обобщённых функций и типов. Они позволяют формально указать, каким операциям или свойствам должен удовлетворять тип для использования в данном обобщённом контексте.

Nimony стремится к унификации моделей асинхронного и многопоточного программирования под единой конструкцией spawn. Решение о том, будет ли задача, запущенная через spawn, выполняться в том же потоке (асинхронно) или в отдельном потоке из пула (многопоточно), принимается планировщиком во время выполнения (runtime). Это накладывает определённые требования на аргументы, передаваемые в spawn: они должны быть потокобезопасными.

Внутренняя реализация модели конкурентности будет основана на продолжениях (continuations), а компилятор будет выполнять преобразование программы в стиль передачи продолжений (Continuation-Passing Style, CPS). Отмечается, что сама конструкция spawn реализована не как встроенная возможность языка, а как плагин компилятора.

Параллелизм рассматривается как более простая задача по сравнению с конкурентностью. Для написания чисто параллельного кода, ориентированного на вычисления (например, обработка массивов данных), Nimony предложит специальные конструкции, такие как параллельные циклы for, обозначаемые оператором "||". Это позволит реализовывать параллельные алгоритмы без необходимости использования переменных потока управления (flow vars), что может быть удобно для задач научных вычислений или программирования для GPU.

Система метапрограммирования Nim, известная своими макросами, в Nimony эволюционирует в сторону плагинов компилятора (compiler plugins). Плагины представляют собой код, который компилируется в нативные инструкции и выполняется на поздних стадиях работы компилятора, после этапа проверки типов. Это даёт плагинам доступ к полной информации о типах и семантике анализируемого кода.

Обещаны улучшенные и более удобные API для разработки плагинов. Использование промежуточного формата NIF (Nim Intermediate Format) также должно упростить реализацию различных трансформаций кода. Плагины могут выполняться инкрементально и параллельно, что способствует повышению производительности компиляции.

Типы плагинов:

  • Плагины для шаблонов (Template Plugins): Привязываются к конкретным шаблонам и обрабатывают код, связанный с их вызовами.
  • Модульные плагины (Module Plugins): Получают на вход AST (Abstract Syntax Tree) всего модуля и и должны вернуть преобразованное дерево. Конструкция spawn является примером реализации через модульный плагин.
  • Плагины для итераторов: Аналогичны плагинам для шаблонов, но применяются к итераторам.
  • Плагины для номинальных типов: Могут быть привязаны к определённым типам данных, заменяя механизм "макросов переписывания термов" (term rewriting macros) из Nim. Это позволяет реализовывать оптимизации, такие как устранение временных объектов при выполнении матричных операций.

Для документации Nimony предусмотрен сайт, полностью сгенерированный ИИ и проверенный автором Nim на достоверность.

  1. Главная ссылка к новости (https://nim-lang.org/araq/nimo...)
  2. OpenNews: Для Nim 3.0 развивается новый компиляторный бэкенд на основе формата NIF
  3. OpenNews: Выпуск языка программирования Crystal 1.16
  4. OpenNews: Выпуск языка программирования Zig 0.11.0
  5. OpenNews: В openSUSE обеспечена полная поддержка языка программирования Nim
  6. OpenNews: Релиз языка программирования Nim 2.0
Автор новости: Аноним
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/63182-nim
Ключевые слова: nim
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (179) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, th3m3 (ok), 22:43, 03/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    Когда ругали Rust, часто ставили в пример Nim. И что на Nim сегодня написано, что все пользуются? Rust уже в ядро Linux даже залез.
     
     
  • 2.2, Нуину (?), 22:48, 03/05/2025 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Если бы в brainfck столько рекламы ввалили... хайп - не показатель.
     
     
  • 3.64, Аноним (-), 12:15, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Если бы в brainfck столько рекламы ввалили... хайп - не показатель.

    Rust и C++ отлично рубятся за звание Brainfuck 2.0. А сабж попробует зарубиться за звание Brainfuck 3.0 потом. Ишь ты, со всеми этими наворотами и кучей вариантов написания и субдиалектов они в реалтайм хотят? Наверное, чтобы посмотреть что бывает если заняться подобной фигней в реалтайме? Правильно - ничего хорошего. Много новых багов, глюков и факапов на ровном месте. Говорили людям - KISS рулит. Но не, проклятие оверинженерии покусало некоторые мозги.

     
     
  • 4.144, BeLord (ok), 19:19, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну различать творчество и решение задач, а в современном мире эти понятия попутали. Инженер решает прикладную задачу, под эту задачу он делает/использует инструмент, для другой задачи этот инструмент может не подходить, значит ли это что инструмент плохой - нет, а вот инженер, который инструмент использует не по назначению, обычно, так себе специалист.
     
  • 2.3, Нуину (?), 22:49, 03/05/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > И что на Nim сегодня написано, что все пользуются?

    А что на раст напиано, что все пользуются?

     
     
  • 3.5, Аноним (5), 22:52, 03/05/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 3.37, Прохожий (??), 06:24, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Уже много раз об этом писали, чуть ли не в каждой теме про этот язык. Но каждый раз находятся нуинушники и bottl-ы, которым нравится задавать одни и те же вопросы. Ну и ну!

    Часть Windows. Часть Android. Proxy от Cloudflare (Pigora, кажется).  Вот этим пользуются если и не все, то очень-очень многие, хотя они об этом могут и не знать.

    По мелочам: редактор Zed, утилита ripgrep, всякие веб-фреймворки (одни из самых быстрых в мире, если не самые быстрые). Ну и одна из подсистем ядра Линукс (хотя пока и необязательная).

     
     
  • 4.44, Имя (?), 07:02, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Я то думаю, чего это окна стали через одно место работать в последний год, так туда растом нагадили
     
     
  • 5.46, Прохожий (??), 07:11, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >чего это окна стали через одно место работать в последний год

    Подробностей, конечно, не будет.

     
  • 5.70, Аноним (70), 13:43, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    И уязвимости в винде никуда не делись :)
     
  • 4.50, Аноним (50), 08:27, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Часть Windows. Часть Android.

    Какая часть?

     
     
  • 5.71, Карлос Сношайтилис (ok), 14:07, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    У винды - ядро переходит.
    Смотри презу руссиновича, где он рассказывает про перевод критических систем на раст
     
     
  • 6.93, Нуину (?), 22:50, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > У винды - ядро переходит.
    > Смотри презу руссиновича, где он рассказывает про перевод критических систем на раст

    Можете ссылку дать?

     
     
  • 7.96, Карлос Сношайтилис (ok), 23:38, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Собственно первая ссылка по запросу "Russinovich Rust video"


    https://m.youtube.com/watch?v=1VgptLwP588

     
  • 4.57, Смузихлеб забывший пароль (?), 10:11, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > По мелочам: редактор Zed, утилита ripgrep, всякие веб-фреймворки
    >> А что на раст напиано, что все пользуются?
    >> все пользуются?
     
     
  • 5.112, Аноним (112), 05:00, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Первую часть коммента (про винду и андроид), вы, естественно, проигнорировали. Удобно, чо.
     
  • 4.92, Нуину (?), 22:45, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > По мелочам: редактор Zed, утилита ripgrep, всякие веб-фреймворки

    Zed - сырое уг, ripgrep - цветастая замена grep, всякие веб-фреймворки - простите, но повесить обработчик на запрос можно в любом языке нормальном.

     
  • 3.67, ASRSim (ok), 12:18, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну я использую firefox, каждый день и иногда rustdesk. Думаю, что ещё очень дофига людей, использующих программы с растом.
     
     
  • 4.94, Нуину (?), 23:06, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну я использую firefox, каждый день и иногда rustdesk. Думаю, что ещё
    > очень дофига людей, использующих программы с растом.

    firefox куда не шло, но там раста несравнимо мало по отношению к с++ и жс. Так что, нет.

     
  • 3.86, Аноним (86), 19:54, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Компилятор раста, внезапно. А вообще, ненавистникам раста давным давно пора запомнить, что софт на расте существует. Тот же Alacritty, ripgrep, или Cosmic DE. Так что как бы вам того не хотелось, но на расте софт внезапно пишется, во всё большем количестве.
     
     
  • 4.88, Нуину (?), 22:38, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Компилятор раста, внезапно. А вообще, ненавистникам раста давным давно пора запомнить,
    > что софт на расте существует. Тот же Alacritty, ripgrep, или Cosmic
    > DE. Так что как бы вам того не хотелось, но на
    > расте софт внезапно пишется, во всё большем количестве.

    Так, а теперь выдохни и вернись, перечитай оригинальный вопрос. Перечитай еще раз. Подумай и заметь, что там есть важное замечание "все пользуются". Ты же привел в пример маргинальщину какую-то.

    > Компилятор раста, внезапно.

    А компилятор ocaml на ocaml, а компилятор sbcl на cl, а компилятор chezscheme на chez... ну ты понял.

     
     
  • 5.89, Нуину (?), 22:39, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >> Компилятор раста, внезапно.

    Ну и nim компилятор тоже на nim

     
  • 5.100, Аноним (86), 00:19, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Понятие все - очень растяжимое Какой-нибудь пенсионер, вздыхающий о том, что ... большой текст свёрнут, показать
     
     
  • 6.124, Нуину (?), 11:16, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Пенсию получает в банке, в магазине платит наличкой.

    Все верно. Получаеся, что нельзя утверждать, что все платят только безналом. Но и не только пенсионеры, многие платят.

    > У как у ненавистников раста подогорает. Когда приводишь им в пример firefox, то они говорят - не считается, там вон сколько кода на крестах. Приводишь им в пример проект целиком на расте - не считается, этим никто не пользуется.

    Ну потому что это истина. Ты еще скажи, что ядро линукса на расте, потому что там где-то сбоку 100 строк на нем. И ненависти тут никакой нет. Не нужно выдавать желаемое за действительное.

     
     
  • 7.134, Аноним (86), 14:10, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А где вы такое утверждение откапали Сколько можно сражаться с соломенными чучел... большой текст свёрнут, показать
     
  • 5.102, Аноним (86), 00:25, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >А компилятор ocaml на ocaml

    Очень хорошо, что вы про Ocaml вспомнили, так как до раскрутки компилятора rust, он был написан на Ocaml. Подобные примеры очень хорошо подходят, чтобы развенчивать мифы, о том, что на каком-то языке ничего не написано

     
  • 4.115, Аноним (115), 06:22, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Скоро компилятор Раста перепишут на Си, и тогда он сам в себя схлопнется.
     
  • 2.8, Аноним (8), 23:14, 03/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Пока в Вилларибо пишут на Си, в Виллабаджо написали на Расте и уже готовятся переписывать под новую порцию стабилизированных возможностей в рамках очередной акции во "вкусно и раст"
     
     
  • 3.24, Аноним (24), 01:21, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Пока в Вилларибо пишут на Си, в Виллабаджо переписывают на Расте.
    "вкусно и коричнево", т.е. ржаво ;)
     
     
  • 4.60, Аноним (60), 10:44, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > переписывают на Расте. "вкусно и коричнево"

    Причем, что удивительно и крайне нетипично, в этом случае коричневое (внезапно) - это не г..но, а таки наконец-то шоколад!

     
     
  • 5.78, Аноним (24), 14:54, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    "Вот и я думаю, Василий Иванович, откуда в ж взяться шоколаду?"
     
  • 5.82, OpenEcho (?), 18:59, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    К теме

    https://www.youtube.com/shorts/ch6DmtXsc_g

     
  • 2.27, Аноним (27), 01:27, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что первое что второе - лютая дичь на корме у грантодателей. В реальных проектах никто не использует кроме пары хипсторов.
     
     
  • 3.38, Прохожий (??), 06:27, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –4 +/
    >В реальных проектах никто не использует кроме пары хипсторов

    А парни из Микрософт, Гугл, Клаудфлэр, Амазон, Дропбокс, Дискорд об этом знают?

     
     
  • 4.49, Сталин (?), 07:49, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    «А парни из Микрософта, Гугла, Клаудфлэра, Амазона, Дропбокса, Дискорда об этом знают?»

    Совсем уже русский язык забыли со своим Растом.

     
     
  • 5.66, Аноним (-), 12:18, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Совсем уже русский язык забыли со своим Растом.

    На русском языке программируют разве что 1Сники. И это даже хуже чем программирование на сабже. Сильно хуже.

     
     
  • 6.80, _ (??), 18:53, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    DSL как DSL...

    Но воётивойти-шнеГам откуда знать про эти непонятные 3 буквы, оне только про другие 3 в курсе :)

     
     
  • 7.109, blkkid (?), 02:57, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    знаете, DSLом оно было лет 30 назад, может быть

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

     
  • 4.58, Смузихлеб забывший пароль (?), 10:12, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    похоже что знают
     
  • 2.30, keydon (ok), 01:39, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Настолько залез что пришлось его заталкивать, но и при этом его оттуда чуть не выкинули)
    Ну всё, мода прошла, теперь nim, а растомны не у дел. Всё как вы любите: король мертв да здравствует новый король.
    Об этом я еще 5 лет назад писал.
     
     
  • 3.39, Прохожий (??), 06:33, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Настолько залез что пришлось его заталкивать, но и при этом его оттуда чуть не выкинули

    Диды копротивляются. Это ведь сложно выучить ещё один ЯП. Но спонсоры (а их кода порядка 80 с лишним процентов в ядре) это не понимают. Поэтому приходится силой насаждать добро, увы.

     
     
  • 4.81, _ (??), 18:55, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В линуксе юзерленд уже убили. Добьют ядро и наступит то чего спонсоры и спонсировали :(
     
  • 4.113, Аноним (113), 06:14, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А нахрена учить еще один? Чтобы что?
    Вы дибо раст в ядро введите, либо сишку уберите.

    Два языка все только усложнят. Так нравится раст, ну так пепепишите на нем все ядро, какие проблемы.

    Сложно? А я думал вы хипстеры все мегаумные.

     
     
  • 5.120, Аноним (86), 10:42, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Вы дибо раст в ядро введите, либо сишку уберите.

    Задача убрать из ядра код на си - явно не на пять минут. Даже если заменить си на кресты/паскаль.
    >Сложно?

    Не сложно, а долго. Или вы из тех людей, которые синусит не будут лечить, до тех пор, пока не изобретут лекарство от рака?

     
  • 4.179, keydon (ok), 16:45, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Диды копротивляются. Это ведь сложно выучить ещё один ЯП. Но спонсоры (а
    > их кода порядка 80 с лишним процентов в ядре) это не
    > понимают. Поэтому приходится силой насаждать добро, увы.

    Ядерщикам то сложно? Это где перл с питоном встречался, отдельный язык для bpf сделали и на мейкфайлах сделано? Ты бы пораскинул мозгами немножко.

     
  • 2.32, Bottle (?), 03:00, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    На "мёртвом" Дельфи написана FL Studio, которой пользуются тысячи людей и десятки вполне себе известных музыкантов (например, Toby Fox & Deadmaus).
    На "живом" и "процветающем" Rust в планах - переписать очередную софтину и не закончить этот процесс никогда.
    За двадцать лет великолепного развития Раста ничего толкового не было на нём написано. Даже ноунеймовый D хотя бы использовался Remedy в их играх, а ещё такая же судьба была у Haxe (Northgard как пример).
     
     
  • 3.40, Прохожий (??), 06:36, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >На "живом" и "процветающем" Rust

    Уже написаны части Андроида, Windows, proxy Cloudflare, Discord, Dropbox и куча других продуктов. Но некоторые продолжают не замечать слона, зарывшись головою в песок, как тот страус.

     
     
  • 4.53, Аноним (53), 08:59, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >>Уже написаны части Андроида Windows, proxy Cloudflare, Discord, Dropbox и куча других продуктов.

    Не надоело постить это ахинею? Выкачай исходники андройда https://android.googlesource.com/ и посмотри сколько там твоего хруста, посмотришь подходи мы объясним, чем отличаются завывания "мы будем/планируем/etc использовать хруст", от реального "мы используем раст". И везде тоже самое везде - хайпа много, а реального использования с гулькин нос.

     
  • 4.61, Аноним (61), 11:13, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Укажите на реальный софт, полностью написанный на ржавом, а не имеющий куски оного.
     
     
  • 5.122, sdf1786 (?), 10:54, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В одной компании, решили написать микросервис на расте.
    Уже 3 года стараются.
    Не сказать что в самом начале, но к проду не готовы.
     
  • 3.47, User (??), 07:34, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    На аппликушечном фреймворка стяпляпали прикладную программу - А на языке системного программирования - не стяпляпали, системное программирование не нужно!
     

     ....большая нить свёрнута, показать (50)

  • 1.4, Аноним (5), 22:51, 03/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    > Для документации Nimony предусмотрен сайт, полностью сгенерированный ИИ и проверенный автором Nim на достоверность.

    Спасибо, но нет. "Достоверности" недостаточно

     
     
  • 2.7, Аноним (7), 23:04, 03/05/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Арак на официальном форуме сам писал что увлекается нейронками при написании кода.
    Не знаю как это оценивать.
     
     
  • 3.12, Аноним (-), 23:32, 03/05/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.6, Аноним (6), 22:59, 03/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > интеграции состояния ошибки непосредственно в сам объект данных

    Если компилятор не будет валидировать, что разраб проверил наличие ошибки, то это точно хуже растовых sum types. Возвращать NaN как признак ошибки -- бред, ибо NaN -- это обычное число с точки зрения системы типов. Непроверенный NaN просто просочится далее и закрашит приложение на позднем этапе в самом неожиданном месте.

     
     
  • 2.15, Аноним (-), 23:37, 03/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    NaN означает not a number. Менеджмент состояний говорит какбы о её наличии. И это тоже некоторый результат.

    >> разраб

    ну-ну

     
     
  • 3.72, Карлос Сношайтилис (ok), 14:16, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    not a number, but float

    Как был float, так и остался. То что одно из значений обрабатываемого типа выделено под ошибку – косяк архитектуры.

    Индустрия прошла долгий путь развития обработки ошибок и возвращаться в дремучие времена "возвращаем число, в котором одно значение означает ошибку, а остальные – результат исполнения", для современного языка выглядит дико.

     
     
  • 4.187, Аноним (187), 22:56, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Индустрия прошла долгий путь развития обработки ошибок и возвращаться в дремучие времена

    Индус-трия деградирует, значит. NaN даёт бесплатное "всплывание" ошибок на уровне процессора. Покажи, как ты собираешься возвращать отдельно коды ошибок в AVX или GPGPU и какая будет производительность.

     
     
  • 5.195, Карлос Сношайтилис (ok), 16:13, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    С этими анонимами непонятно, то ли это один гений или их тут толпа...
     
     
  • 6.203, Аноним (187), 02:23, 08/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ведь по делу сказать нечего...
     
  • 3.101, Аноним (86), 00:23, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >NaN означает not a number

    Это такой же артефакт развития компьютеров, как и nullptr, ровно с теми же свойствами. Кроме того, NaN может быть только в числах с плавающей запятой, в целочисленных переменных ему не место

     
  • 2.133, Аноним (133), 13:22, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Возвращать NaN как признак ошибки -- бред, ибо NaN -- это обычное число с точки зрения системы типов.

    Конечно! Надо -1 возвращать, как в сишке.

     

  • 1.9, Аноним (-), 23:14, 03/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Не читал весь этот огромный текст. Просто ответьте коротко. Конпилятору всё так же нужен весь набор gcc и сишные либы? Или он уже самостоятелен как go?
     
     
  • 2.171, Аноним (-), 07:16, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Конпилятору всё так же нужен весь набор gcc

    Суть Nim состоит в том, что он транслирует исходник в Си-код, который, в свою очередь компилируется любым доступным компилятором Си в бинарник.


    > сишные либы

    Ему не нужны сишные библиотеки. Он *допускает* использование этих библиотек, если программисту требуется.

     

  • 1.10, kravich (ok), 23:25, 03/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Крч, новый Perl 6
     
     
  • 2.29, Аноним (24), 01:34, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Хм, Raku, Nimony...Да, в этом что-то есть.
     

  • 1.11, Аноним (11), 23:32, 03/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    В общем брюки превращаются ... в C++.
     
     
  • 2.48, User (??), 07:37, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не. Без комитета по управлению развитием стандарта - с++ не получится, это все знают.
    Тут эээ... Скорее modern php)
     

  • 1.13, Карлос Сношайтилис (ok), 23:34, 03/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Подмена понятий Отображение в памяти никак не связано со временем исполнения П... большой текст свёрнут, показать
     
     
  • 2.17, Аноним (-), 23:52, 03/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Позволяет нормально продолжаться при нехватке памяти? Шта?

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

     
     
  • 3.73, Карлос Сношайтилис (ok), 14:23, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > при запуске программы выделяется некоторое количество памяти под программ...

    Если в таком контексте – да. Но тогда выделение памяти будет происходить на этапе компиляции и не нужен будет OOM.

    Но здесь описывается процесс выделения памяти в рантайме. И как решение проблемы – аналог подхода с defer в go или паники в расте. Но ни о каком "нормальном продолжении программы" в этих подходах не может идти и речи – либо обрабатывать нехватка памяти и пытаться восстановить исполнение, либо программа встаёт раком. Нормально работать продолжит только ОС.

     
  • 2.20, Аноним (20), 00:04, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Набор идей/нововведений напоминает письмо Дяди Федора домой. Впечатление, что писали разные люди, с разными взглядами.

    Ну так у автора Nim главной деятельностью в жизни и опытом разработки является, собственно, написание Nim. Какой-то затянувшийся студенческий проект.

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

     
  • 2.28, Аноним (24), 01:28, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Набор идей/нововведений напоминает письмо Дяди Федора домой. Впечатление, что писали разные люди, с разными взглядами.

    Писал ИИ с размножением личностей.

     
  • 2.33, fuggy (ok), 03:07, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Тут особый путь Тоже не понимаю Так а что если у меня используются значения Na... большой текст свёрнут, показать
     
     
  • 3.43, Прохожий (??), 06:55, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Так а что если у меня используются значения NaN и low(int) как обычные значения.

    NaN использовать в качестве обычного значения несколько странно, потому что расшифровывается оно, как not a number. А вот low(int) - да с ним могут быть двусмысленности.

     
     
  • 4.68, Карлос Сношайтилис (ok), 13:26, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > NaN использовать в качестве обычного значения несколько странно, потому что расшифровывается оно, как not a number.

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

    В школе, когда изучают пределы, учат понятию "бесконечность" – это корректный ответ для предела, хотя тоже "not a number"

     
  • 3.69, Карлос Сношайтилис (ok), 13:30, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >> Позволяет нормально продолжаться при нехватке памяти
    > А что мешает?

    Буквально – нехватка памяти. Программа для продолжения работы нужно было ещё памяти, ей не дали. Как она будет "нормально продолжать"?

     
     
  • 4.103, Аноним (86), 00:32, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Программа для продолжения работы нужно было ещё памяти, ей не дали. Как она будет "нормально продолжать"?

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

     
     
  • 5.107, Карлос Сношайтилис (ok), 01:15, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Для других случаев думаю и сами поймёте, по аналогии

    А я и в этих случаях не вижу как ты решил проблему нормального восстановления по описанному подхожу от nim.

    У тебя возникает ООМ на:
    – формировании 500й ошибки;
    – построении запроса на откат транзакции;
    – формировании массива имён временных файлов.

    Как будешь "нормально продолжать"?

    Это во-первых.

    Во-вторых, ты лучше опиши, как ты будешь использовать механизм, предложенный автором nim для твоих кейсов.

     
     
  • 6.123, Аноним (86), 10:58, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >У тебя возникает ООМ на:

    Я не понимаю, с чем у вас вдруг возникли такие сложности. Уже есть программы, которые при OOM не падают молча, а пишут об этом нормально сообщение. Наверное магию какую-то используют.
    >– формировании массива имён временных файлов.

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

     
     
  • 7.137, Карлос Сношайтилис (ok), 14:52, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Мы сейчас не обсуждаем общие подходы к реализации аллокаторов и обработке ошибок... большой текст свёрнут, показать
     
     
  • 8.138, Аноним (86), 15:15, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В таком случае, мы говорим о разных вещах Да, нового ничего не предложил, тольк... текст свёрнут, показать
     

  • 1.14, Нуину (?), 23:37, 03/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    А за чей счет банкет? Просто интересно. Кому сдался nim, вроде недавно 2.0 был, а тут опять все ломают.
     
     
  • 2.45, Прохожий (??), 07:05, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    https://opencollective.com/nim
     
  • 2.55, Аноним (55), 09:36, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Большую часть времени это было «представление одного актёра» — транспилируемая в сишечку помесь питона и паскаля/модулы. Нишевая, навроде D или Vlang. Из курьёзов — полюбившаяся малварщикам, поскольку легко писать, производительнее питона в разы, и из коробки практически всеядный FFI и нативная совместимость с сишечкой. Ну и метапрограммирование в compile-time на том же языке.

    Потом на это наткнулись криптовалютчики — Ethereum Foundation и ко. Дали денях. Много. И тут-то и началась вторая весна, раскрутка, популярность и признание.

    Так-то язык неплохой изначально. Но грядущие всеобъемлющие преобразования оптимизма не внушают.

     

  • 1.18, Аноним (-), 23:56, 03/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Я не в восторге от языков программирования которые создаются явно для программ. Программа создающая программу меня откровенно пугает. Людям которые такое создают нужно безгранично доверять. И более того такие люди должны обладать отличным естественным интеллектом чтобы создать что-то хорошее.
     
  • 1.19, Аноним (20), 23:58, 03/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ох, какой же кайф работать с такими объектами, которые на каждом шаге выполнения... большой текст свёрнут, показать
     
     
  • 2.21, Аноним (21), 00:55, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >То есть, если у меня где-то в самом низу цепочки вызовов есть бросающая функция, то я должен всю цепочку вызовов функций маркировать {.raises.}? Очень удобно!

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

     
     
  • 3.26, Аноним (27), 01:26, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Не зря же большинство современных языков переползли на концепт чекед эксепшенов.

    Теперь ясно почему современное ПО в 99.9% кривой мусор с кучей багов

     
     
  • 4.56, Аноним (-), 09:51, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Тут особенность в том что программа сама себя перепрограммирует. Это как пользовательский интерфейс для робота. Есть моменты когда ты не знаешь результата, а когда получишь, то сможешь скорректировать программу.
     
  • 4.104, Аноним (86), 00:34, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Нужно как win 9x - показывать синий экран смерти и раз в две недели требовать профилактической переустановки, тогда анониму хорошо будет. И самое главное - без раста сделать.
     
  • 3.74, Аноним (20), 14:24, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > большинство современных языков переползли на концепт чекед эксепшенов.

    Да что ты! Назовешь хоть один, кроме Java (в которой эти checked exceptions все ненавидят)?

     
     
  • 4.105, Аноним (86), 00:36, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Если в вашем языке продвинутая система типов, то монады типа Option или Result будут вам знакомы.
     
  • 4.166, Аноним (21), 00:37, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    раст, го, вот ним подтяулся.
     
  • 3.75, Карлос Сношайтилис (ok), 14:37, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > На самом деле это действительно очень удобно, знать что происходит у тебя в коде.

    Удобно, но, к сожалению, невозможно.

    > Не зря же большинство современных языков переползли на концепт чекед эксепшенов.

    Чекед не работает везде где есть. Всегда всё заканчивается антипаттерном "вот в этом месте ловим вообще все исключения" без разбора и выдаём ошибку "что-то пошло не так"

     
  • 2.34, fuggy (ok), 03:10, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > должен всю цепочку вызовов функций маркировать

    А когда ты async пишешь или unsafe, тоже приходится маркировать все функции до самой последней.

     
     
  • 3.41, Прохожий (??), 06:47, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Не приходится.
     

  • 1.35, Аноним (-), 05:28, 04/05/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.36, Аноним (36), 05:55, 04/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > требуется явная аннотация прагмой .cyclic

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

     
  • 1.51, Аноним (51), 08:35, 04/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Nim — хороший язык. Не вызывает болей и отторжения.
     
     
  • 2.83, _ (??), 18:59, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Никто не юзает, вот и "не вызывает" :-)
     
     
  • 3.84, Аноним (84), 19:07, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    За всех не говори.
     
     
  • 4.91, Нуину (?), 22:42, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Как там с отладкой сгенерированного кода? Только не говори, что принтами отлаживаешься)))
     
     
  • 5.111, Аноним (-), 03:24, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Только не говори, что принтами отлаживаешься

    Это ещё вопрос, что удобнее, в IDEшке наклепать принтов и break'ов, или мучать отладчик. Но часто отладка вообще не нужна, тем более с нейросетями и копайлотом.

     
     
  • 6.125, Нуину (?), 11:18, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Но часто отладка вообще не нужна, тем более с нейросетями и копайлотом.

    Этот ответ даже лучше принтов, браво. Надо так и записать на главной проекта: код легкочитаем настолько, что отладка попросту не нужна (спойлер: ее как бы и так нет))))

     
     
  • 7.126, Нуину (?), 11:18, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Я если что без негатива)
     
  • 5.131, Аноним (131), 12:38, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Строгая типизация с прозрачным понятным синтаксисом позволяют обнаруживать ошибки без особых проблем.

    Nim разработан для созидания и реализации идей, а не траты времени на ошибки. В 19 случаях из 20 достаточно сообщений компилятора.

     
  • 2.139, Аноним (139), 15:28, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Язык с таким синтаксисом просто не может быть хорошим.... Может боли он и не вызывает, но читаемость ещё как ухудшает
     

  • 1.59, Смузихлеб забывший пароль (?), 10:26, 04/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Одно неясно - если пилится нечто для систем реального времени, то где хотя бы одна норм ОСРВ на Ним ? Как там с поддержкой железа, разных МК ?
    И, что ещё более немаловажно, обычно СРВ подразумевают, в числе прочего, прерывания. В статье о них ни слова. Что это за "ЯП для СРВ" без прерываний и без ОСРВ ?
    Что-то подсказывает, что, при необходимости сертификации продукта на этом, вместо результата будет здоровенный хрен и, скорее всего, даже без соли
     
  • 1.76, Аноним (-), 14:46, 04/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Чуваки явно недостаточно писали на C Явно errno не успел их достать до печёнок ... большой текст свёрнут, показать
     
     
  • 2.85, Аноним (86), 19:50, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >> Обработка ситуаций исчерпания памяти (Out of Memory, OOM) в Nimony реализована с отходом от распространенной практики аварийного завершения программы ("die on OOM"). Вместо этого предлагается механизм, позволяющий приложению продолжить работу.
    >Глупости. Сложности ради сложности. Если памяти не хватает, oomkiller всё равно прибъёт, заводить специальные механизмы, которые может быть успеют сработать до oomkiller'а, а может нет, пустая трата времени.

    Не глупость, это чуть ли не единственная здравая идея. Если ограничить размер виртуальной памяти, то гарантированно никакого oom killer-а не будет, будет ошибка, которую можно элементарно обработать в user space. Просто г0вн0к0деры настолько обленились, что обработать данную ошибку для них - непосильная задача.

     
     
  • 3.141, Аноним (-), 17:21, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Расскажи, как это реализовать Обычно у меня не возникает ситуаций, когда нехват... большой текст свёрнут, показать
     
     
  • 4.145, Аноним (86), 19:48, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Я бы не был в этом так уверен Ядерного OOM я ни разу не мог дождаться, даже за ... большой текст свёрнут, показать
     
     
  • 5.154, Аноним (-), 21:22, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Первое, что вам следует понять, это то, что ситуации ООМ 8212 это неизбежно с... большой текст свёрнут, показать
     
     
  • 6.163, Аноним (86), 23:08, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Есть ещё несколько вариантов Например, можно корректно завершиться, например, у... большой текст свёрнут, показать
     
     
  • 7.172, Аноним (-), 12:37, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Можно и то и это, но совершить обоснованный выбор приложение не может На самом ... большой текст свёрнут, показать
     
     
  • 8.180, Аноним (180), 17:18, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Практически любой вариант будет лучше, чем просто завершить процесс в том состоя... большой текст свёрнут, показать
     
     
  • 9.188, Аноним (-), 03:57, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Лучше для процесса Мне нужно то, что лучше для меня Затем, то что лучше для си... большой текст свёрнут, показать
     
     
  • 10.191, Аноним (180), 11:01, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Вы не описали, чем именно текущая ситуация лучше для вас, единственное что вы ск... большой текст свёрнут, показать
     
     
  • 11.196, Аноним (-), 16:17, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Я где-то упоминал выше, не Но как бы там ни было, теперь у меня нет проблем с т... большой текст свёрнут, показать
     
     
  • 12.201, Аноним (180), 16:53, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Так это из-за кривого управления памятью в linux, просто поверх одного костыля в... большой текст свёрнут, показать
     
  • 5.197, Аноним (-), 16:44, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >>Подход oom killer основан на эвристике, и, как ты знаешь, он работает
    > Я бы не был в этом так уверен. Ядерного OOM я ни
    > разу не мог дождаться, даже за час, только вечный своп.

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

    А если например только ZRAM оставить - система просядет по скорости разика в 2 секунд на 5 пока страницы активно тасуются. Память кончится - и гудбай, жирдяй. Но это БЫСТРЫЙ своп в сжатую оперативу. Видите, вопросы то - к лапкам того кто систему наруливал и что и зачем он нарулил.

     

  • 1.87, Аноним (86), 20:05, 04/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это что, язык для микроконтроллеров Если на нём будет удобно писать под микроко... большой текст свёрнут, показать
     
     
  • 2.95, Нуину (?), 23:10, 04/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Единственное, что плохо в исключениях - отсутствие описания исключений в сигнатурах функций. Емнип в java сделано нормально

    Если ты вызываешь функцию в своем коде, то надо руками скопипастить её исключения наверх? Точно нормально? Смысл тогда в них?

     
     
  • 3.119, Аноним (86), 10:40, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >то надо руками скопипастить её исключения наверх?

    Я конечно давно не сталкивался с java, но что, там нужно как в голанге делать?
    if err != nil {
        return nil, err
    }
    Или вы про ручное указание в сигнатурах? Как и ожидалось от языка без вывода типов. А ещё там нужно указывать тип для каждого аргумента у любого метода. Языки с выводом типов по Хиндли-Милнеру если не ровесники, то уж точно старше чем java.
    >Смысл тогда в них?

    Смысл в том, чтобы исключения были исключениями, а не паникой, которая высвобождает ресурсы и закрывает программу. Где ещё можно посмотреть, какие исключения код может кинуть, а какие - нет? Уж не ревьювить все библиотеки, от начала и до конца

     
     
  • 4.129, Нуину (?), 11:26, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Да, про указание Посмотреть возможные исключния в документации Смысл в том, чт... большой текст свёрнут, показать
     
     
  • 5.135, Аноним (86), 14:16, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Посмотреть возможные исключния в документации

    Документация - для данной цели это плохо. Она не выдаёт ошибок компиляции, её могут забыть обновить, перечитывать огромный release notes для новой версии будет утомительно.
    >Смысл в том, чтобы писать и не париться об обработке исключений, которые не хочешь обрабатывать

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

     
  • 5.142, Аноним (-), 17:27, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Добро пожаловать в мир корректной обработки ошибок Когда возникает ошибка, в об... большой текст свёрнут, показать
     
     
  • 6.143, Нуину (?), 17:33, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >> Перекидывать же все возможные исключения в нижележащем коде через указание в сигнатуре будет еще та морока как мне кажется.
    > что ты просто кладёшь на это болт

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

    А растовщики болт не кладут, когда пишут unwrap? Или это другое? Да у тебя любое выделение памяти может вернуться с ошибкой, вот я бы хотел посмотреть как ты будет проверять, что добавление в вектор не завершилось такой ошибкой. Ты представляешь уровень бойлерплейта?


     
     
  • 7.148, Аноним (86), 20:07, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >вот я бы хотел посмотреть как ты будет проверять, что добавление в вектор не завершилось такой ошибкой. Ты представляешь уровень бойлерплейта?

    Проблема в том, что кроме тех ошибок, которые могут возникнуть чуть ли не на кадой строке, типа переполнения или OOM, информации о других типах ошибок нет. Вот вам пример https://pkg.go.dev/os#Create
    >  If there is an error, it will be of type *PathError

    Вот мне интересно, нехватка места на диске, это тоже PathError ? А проблема с правами? А если диск примонтирован по сети, а сеть упала?
    >В чем проблема? Залогируешь, перезапустишь.

    К каждой программе должен быть приставлен специалист, который будет следить за её работой. Подход Haskell/Ocaml/Rust - скомпилировалось значит работает - не изобретён.

     
  • 7.149, Аноним (-), 20:30, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Разумеется в этом и суть исключений: обрабатывать только то, что надо.

    Это не суть исключений (исключения лишь механизм). Это суть раздолбайского отношения к корректности кода.

    > А растовщики болт не кладут, когда пишут unwrap?

    Охлол, раст-то здесь причём? В расте нет исключений.

     
     
  • 8.150, Нуину (?), 20:39, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Разработчики erlang а вышли из чата ... текст свёрнут, показать
     
  • 8.151, Нуину (?), 20:41, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Сообщения не читай, комментарии пиши Ну нет, зато есть обработка ошибок, котору... текст свёрнут, показать
     
     
  • 9.155, Аноним (155), 21:33, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Я читаю, то на что отвечаю Конкретно я придрался к этому твоему высказыванию И... большой текст свёрнут, показать
     
     
  • 10.164, Нуину (?), 23:56, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Они в том числе и чтобы не обрабатывать ошибки от каждого вызова И принцип lets... текст свёрнут, показать
     
     
  • 11.173, Аноним (-), 12:42, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Принудительная декларация типов исключения, допустимых для функции, это не обраб... большой текст свёрнут, показать
     
  • 10.165, Нуину (?), 23:59, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ты в раст в пример ставишь, а какой смысл в бесконечных unwrap Это тоже самое, ... текст свёрнут, показать
     
     
  • 11.174, Аноним (-), 13:09, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Я не ставлю в пример раст Ты постоянно приплетаешь раст Show me the code Если... текст свёрнут, показать
     
     
  • 12.177, Нуину (?), 14:07, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А что ты приплетаешь в пример go Та же самая ерунда с постоянное проверкой err... текст свёрнут, показать
     
     
  • 13.189, Аноним (-), 03:59, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ничего Где ты видел, чтобы я что-то приплетал Пфф То есть ты нигде не видел и... текст свёрнут, показать
     
  • 11.176, Аноним (-), 13:39, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Хотя я за тебя вспомнил один пример использования паник в ситуациях, которые ино... большой текст свёрнут, показать
     
     
  • 12.178, Нуину (?), 14:09, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    gt оверквотинг удален А ну да, раст не приплетаешь, говоришь Этот uutils - ... текст свёрнут, показать
     
  • 12.198, Аноним (-), 16:46, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Поэтому пользака воткнувшего флешку с FAT из под виндов будет ждать довольно инт... текст свёрнут, показать
     
     
  • 13.204, Аноним (-), 11:09, 08/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Если был использован неверный iocharset при подключении Но да, это вполне возмо... текст свёрнут, показать
     
  • 6.159, Аноним (36), 22:41, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Пока что единственный язык где обработка исключений сделана хорошо — это Common Lisp. С тех пор как его стандартизировали в 1994 году, никто лучше так и не смог предложить. То, что ты рассказываешь про «ни один тип исключений не упущен» — это фантазии цветными карандашами в тетрадочке, и работает только в hello world. Не все исключения _могут_ быть обработаны, и уж тем более не все исключения _должны_ быть обработаны. Красиво упасть — один из приемлимых результатов выполнения программы.
     
     
  • 7.175, Аноним (-), 13:17, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Может я неудачно выразился, но если ты будешь исходить что красиво упасть для ... большой текст свёрнут, показать
     
  • 7.181, Аноним (180), 17:21, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >где обработка исключений сделана хорошо — это Common Lisp

    Как в языке с динамической типизацией хоть что-то может быть сделано хорошо? Динамическая типизация нужна только в небольших скриптах, и то, не факт.

     

     ....большая нить свёрнута, показать (24)

  • 1.90, Нуину (?), 22:41, 04/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Проблема автора языка, что видимо он до сих пор не понимает цели: какая у него целевая аудитория. Как говорится "у самурая только путь". Только вот оценят ли пользователи?

     
     
  • 2.110, Аноним (-), 03:20, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Nim один из лучших по синтаксису, не вызывает рвотного рефлекса в отличии от го, си или (упаси Господь) руста. Но не взлетел. В современном мире если продукт не взлетает сразу, то вероятность, что взлетит со временем стремится к нулю.
     
     
  • 3.116, Аноним (116), 09:24, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Python смотрит на вас с недоумением
     
  • 3.121, Аноним (86), 10:48, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Nim один из лучших по синтаксису

    Исспользование отступов вместо операторных скобок - уже достаточный минус языка. Ничему опыт питона не учит

     
     
  • 4.127, Нуину (?), 11:22, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    По мне к синтаксису особых претензий нет. Среди сотни новых языков, копирующих фигурные скобочки, языки вдохновляющиеся питоном, ada и модулой - прям отдушина. В целом я желаю проекту удачи.
     
  • 4.130, Аноним (131), 12:30, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Ничему опыт питона не учит

    То есть опыт языка, занимающего первые строчки большинства рейтингов популярности, – неправильный опыт?

     
     
  • 5.136, Аноним (86), 14:43, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А почему он должен быть правильным Поскольку миллионы мух не могут ошибаться В... большой текст свёрнут, показать
     
     
  • 6.140, Нуину (?), 16:19, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Для того, чтобы понять, насколько python ужасен, достаточно всего лишь раз поломать программу из-за отступа. Хоть из буфера обмена вставить, хоть в любое место, обрезающие ведущие пробелы, да даже открыть в редакторе с другими отступами.

    У тебя затертые ctrl+c, потому что ты копируешь код. У меня затертые ctrl+c, потому я останавливаю бесконечные циклы. Мы разные. (с)

     
     
  • 7.146, Аноним (86), 19:55, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >У меня затертые ctrl+c, потому я останавливаю бесконечные циклы

    Просто интересно, что это нужно делать, чтобы затереть кнопки на остановке циклов? Да к томуже запущеных в терминале, ни в виде демона, ни в виде графической программы, запущенной без терминала

     
  • 5.147, Аноним (-), 20:04, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да Мне приходится писать на пайтоне, и в эти периоды у меня дня не проходит без... большой текст свёрнут, показать
     
     
  • 6.153, Инженер на пенсии (?), 21:11, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Столько тупой ручной работы по добавлению/удалению пробелов

    Бедолага, и как только раньше ПРОГРАММИСТЫ (не кодеры) писали программы без IDE и отправляли космические аппараты изучать внешний и внутренний КОСМОС?! Вам бездельникам итак предоставили райские условия, всякие Copilot, автодополнения кода и прочие удобности, а вы максимум что освоили, так это Тик-Токи в своих айфонах.

     
     
  • 7.158, Аноним (86), 22:24, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Даже интересно, что же они такого написали Я не знаю, что вас так впечатляет в с... большой текст свёрнут, показать
     
     
  • 8.161, Аноним (161), 22:47, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Спроси тех, кто пердолит линуксы вместо уютной и удобной одиннадцадки ... текст свёрнут, показать
     
  • 8.192, Карлос Сношайтилис (ok), 15:50, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    И это говорит человек, который не может без ошибок переместить блок кода в одном... текст свёрнут, показать
     
     
  • 9.202, Аноним (180), 18:33, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Про без ошибок , это ваша фантазия Я же говорю, что это элементарная операция ... текст свёрнут, показать
     
  • 7.160, Аноним (36), 22:45, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > как только раньше ПРОГРАММИСТЫ (не кодеры) писали программы без IDE

    Крайне медленно, при чём писали они такую примитивщину, которую сегодня в наше время заставляют писать джунов c IDE. Сесть на Луну сложно отнюдь не потому, что сложно написать код.

     
  • 7.169, Аноним (169), 02:02, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Вы про ассемблер чтоле Там отступы чисто декоративные Они ни на что не влияют,... большой текст свёрнут, показать
     
  • 6.184, Аноним (184), 20:53, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > рантайм ошибки из-за того, что где-то поехала идентация

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

     
  • 5.199, Аноним (-), 16:48, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > То есть опыт языка, занимающего первые строчки большинства рейтингов популярности, –
    > неправильный опыт?

    BASIC в свое время тоже дико популярен был. Его пихали везде. В компьютеры прям в ROM. Калькуляторы. И где оно теперь?

     
  • 4.152, Инженер на пенсии (?), 21:07, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Исспользование отступов вместо операторных скобок - уже достаточный минус языка.

    Это однозначный и КРАЙНЕ весомый плюс. Скобки ты можешь поставить где угодно и нагородить такой огород, что сам не разберешься на следующее утро, что ты там накодил. Отступы это в первую очередь единообразие в оформлении кода, а значит залог порядка в коде.

     
     
  • 5.167, Аноним (86), 01:25, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Если ваш навык чтения кода упирается в синтаксис скобок, то он довольно плачевен... большой текст свёрнут, показать
     
  • 5.185, Аноним (184), 20:57, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Это однозначный и КРАЙНЕ весомый плюс. Скобки ты можешь поставить где угодно и нагородить такой огород, что сам не разберешься на следующее утро, что ты там накодил. Отступы это в первую очередь единообразие в оформлении кода, а значит залог порядка в коде

    Стакан молока тебе, гражданин! В таком ключе не размышлял. Мне всегда нравились аккуратные прямоугольники и ровные линии. С ними легче думается.

     
  • 5.200, Аноним (-), 16:50, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Скобки более-менее гарантируют что логика та которую задумал програмер А если о... большой текст свёрнут, показать
     
  • 4.170, Другой аноним (?), 02:54, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Проблемы с синтаксисом в ниме не в том, что он "как в питоне" (в питоне всё как раз хорошо), а в том, что он НЕ как в питоне. В питоне действует простое механическое правило: структуры, которые подразумевают вложенность, заканчиваются на двоеточие; в простых случаях вложенность может быть заменена на линейную последовательность простых (не вложенных) операторов через точку с запятой, но не сложнее; ВСЁ! А в ниме вы попробуйте сообразить, в примере с первой страницы сайта (описание объектного типа) где можно убрать отступы, а где нельзя.

    А что до семантики, то в районе версии 1.0 там была реально удачная идея -- быстрый простой язык БЕЗ шаринга наиболее обычных "как бы питоновских" структур данных. Если ты не видишь в коде слова ref -- значит, структуры не шарятся. Это реально здорово упрощало жизнь. Но потом у автора появились другие идеи, потом ещё более другие идеи, и пошло-поехало...

     
     
  • 5.186, Аноним (184), 21:02, 06/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В Nim тоже можно прописать последовательность команд через точку с запятой — в том числе всякие for и if. На худой конец, есть слово «block thisBlock:» Или ты о другом?
     
  • 3.156, Карлос Сношайтилис (ok), 22:10, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > В современном мире если продукт не взлетает сразу, то вероятность, что взлетит
    > со временем стремится к нулю.

    В современном мире языкам нужно 10-15 лет "на взлёт". Сколько Nim?

     
     
  • 4.157, Аноним (-), 22:14, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    в современном мире если этот язык не привнести чего-то революционного, то он не взлетит вообще никогда, потому что ниши заняты проверенными инструментами с жирными сообществами
     
     
  • 5.193, Карлос Сношайтилис (ok), 15:54, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Что революционного привнесли языки, которые "взлетели", за, допустим, последние пять лет.
    И что это за языки?
     

  • 1.108, Аноним (108), 02:05, 05/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Вакансии где? Я тоже писал свой язык и что дальше?
     
     
  • 2.128, Нуину (?), 11:23, 05/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Создавай свою контору и пиши на нем.
     

  • 1.118, Данные в так называемом поле Name (?), 10:18, 05/05/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > основополагающим принципом проектирования которого является достижение предсказуемости времени выполнения в худшем случае

    Первая интересная фишка у этого языка. Правда то что запилить её решили в 3й версии оптимизма не внушает. Уже можно сказать что проект мертворожденный ИМХО.

     
     
  • 2.194, Карлос Сношайтилис (ok), 15:57, 07/05/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Первая интересная фишка у этого языка.

    Которая, как и остальные: написано одно, подразумевается совсем другое.

     

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



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

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