После полугода разработки состоялся выпуск 1.26 компилятора и стандартной библиотеки языка программирования Go.
Основные изменения:
Встроенная новая функция, создающая новую переменную, позволяет использовать в качестве операнда выражение, указывающее начальное значение переменной. Простой пример такого изменения — это код, подобный этому:
x := int64(300)
ptr := &x
Можно упростить до:
ptr := new(int64(300))
Обобщенные типы могут ссылаться сами на себя в собственном списке параметров типа. Это изменение упрощает реализацию сложных структур данных и интерфейсов.
15 декабря, спустя примерно шесть месяцев после публикации предварительной бета версии, утверждён, сформирован и опубликован стабильный выпуск 5.5.0 языка программирования Lua (lua.org).
Финальное уведомление сообщества о событии произошло вчера, 22 декабря, в списке рассылки.
4 октября состоялся выпуск 0.7.6 кроссплатформенного компилятора и стандартной библиотеки языка программирования C3 (c3-lang.org).
C3 – это эволюция, а не революция: язык, похожий на C, для программистов, которые любят C.
C3 – это язык программирования, основанный на синтаксисе и семантике языка C, с целью его развития при сохранении привычности для программистов C.
Благодаря полной ABI-совместимости с C, можно без труда смешивать C и C3 в одном проекте. В качестве демонстрации, vkQuake был скомпилирован с небольшой частью кода, преобразованной в C3 и скомпилированной с помощью компилятора c3c.
Компилятор написан на языке C с использованием фреймворка LLVM (поддерживаются версии 17-22) и распространяется по лицензии GNU LGPL.
Стандартная библиотека распространяется по лицензии MIT.
Ещё один рейтинг. Детали о том, как считается популярность языков, расплывчатые, но обещается более достоверная модель, чем у других рейтингов.
На первом месте, ожидаемо, Python, на втором — Java, на третьем — C++. Javascript потерял три места за год, переместившись с 3-го места на 6-е.
TypeScript идёт отдельной строкой. Если сложить, то вместе с JS они всё ещё обгоняют Java.
Из удивительного: COBOL чуточку популярнее Elixir. Как известно, КОБОЛ до сих пор обслуживает многие системы бизнеса. В комментариях указывают цифры (похоже, для США):
43% всех банковских систем;
95% всех транзакций банкоматов;
80% всех транзакций кредитками, совершаемых физлицами;
Проект развивает Робин Роу (Robin Rowe), бывший профессор компьютерных наук, принимавший участие в комитетах по развитию стандартов С и С++, в своё время создавший графический редактор Cinepaint, использовавшийся при создании некоторых голливудских фильмов, и POSIX-библиотеку libunistd для Windows. Соучредителем компании Trasec выступает Габриэль Пантера (Gabrielle Pantera), занимавшая руководящий пост в компании Disney.
Из особенностей:
Проверки выхода за границы массива. В TrapC применяется фундаментально иной способ работы с указателями и специальный механизм перехвата ошибок на основе обработчиков исключений (trap).
Проверки use after free.
Наличие GC.
Выделение памяти через new. *alloc и free нет.
Явная инициализация нулями.
Строгая типизация.
Исходный код компилятора для TrapC планируют открыть в 2025 году.
Язык Lua – это мощный, переносимый, легковесный, встраиваемый и простой язык
программирования, разработанный и развиваемый Роберту Иерузалимски в PUC-Rio вот уже более 30 лет.
Это минорный релиз посвящённый исправлению ошибок и улучшению документации. К использованию приглашаются все, кого затронули ошибки прошлой версии и все, кто имеет желание протестировать текущую. Если вы заметили ошибку или желаете связаться с авторами языка, это возможно исключительно через
список рассылки. Любые патчи и рекомендации приветствуются, но важно помнить что
они с вашей стороны будут всегда нести рекомендательный характер и будут так восприняты.
Спустя 8 месяцев и 4457 коммитов от 269 различных участников вышла новая версия Zig.
Zig — это (кросс-)компилятор языков программирования Zig, С++, С, Objective-C, Objective-C++, а также сборочная система и менеджер пакетов для них. Проект разрабатывается под лицензией MIT. Недавно в Zig Core Team вошёл ещё один разработчик на зарплате: Jacob Young.
В новой версии:
Появился пакетный менеджер.
Улучшена поддержка powerpc, powerpc64le и Plan9.
Архитектура i386 переименована в x86.
Множественные улучшения и исправления для WebAssembly и появление специфичного для него аллокатора wasm_allocator.
Реализация компилятора Zig на Zig (self-hosted) полностью готова, а старый компилятор на C++ «выкинут на орбиту» (требования к ОЗУ для сборки снижены с 11 до 4 ГБ).
Впервые представлен широкой публике язык программирования Hare, который разрабатывает Дрю ДеВолт (автор Sway и SourceHut) со своей командой последние пару лет.
Hare — язык для системного программирования с минималистичным рантаймом, статической типизацией и ручным управлением памятью.
Исходный код компилятора предоставляется под лицензией GPLv3, а для стандартной библиотеки под лицензией MPL (Mozilla Public License).
Компилятор Hare не основан на LLVM или GCC, а использует легковесный qbe (c9x.me). Программы на Hare не линкуются с libc по умолчанию.
Патч был принят, но всё ещё находится в экспериментальном режиме, и соответствующих релизов не подготовлено.
В новой статье блога проекта crystal описаны некоторые подробности по поводу довольно неожиданного для многих изменения. Ниже краткая выдержка:
Julia Computing Inc., стартап, стоящий за специализированным языком программирования, используемым для таких задач, как разработка алгоритмов машинного обучения и моделирование космических полетов, сегодня объявил о привлечении финансирования в размере 24 миллионов долларов.
Первый раунд финансирования возглавила компания Dorilton Ventures. К венчурной компании присоединились Menlo Ventures, General Catalyst и HighSage Ventures. Боб Муглиа, бывший исполнительный директор гиганта по хранению данных Snowflake Inc., присоединяется к совету директоров Julia Computing в рамках раунда финансирования.
«Ученые, изучающие данные, и инженеры используют продукты, которые были разработаны много десятилетий назад. JuliaHub позволяет проектировать новые лекарства и методы лечения, разрабатывать новые батареи, моделировать космический полет и составлять карты Вселенной, используя при этом меньше вычислительных ресурсов и сокращая выбросы центров обработки данных», – сказал Вирал Шах, генеральный директор Julia Computing и один из создателей языка Julia. «Благодаря последнему финансированию мы с нетерпением ждем увеличения численности нашей команды и внедрения суперспособностей языка Julia в новые отрасли и приложения.»
На сегодняшний день Julia Computing привлекла около 28,6 миллионов долларов.
Nim (ранее — Nimrod) — язык программирования со статической типизацией, поддерживающий процедурный, объектно-ориентированный, функциональный и обобщённый стили программирования (Wikipedia).
Nim (ранее — Nimrod) — язык программирования со статической типизацией, поддерживающий процедурный, объектно-ориентированный, функциональный и обобщённый стили программирования (Wikipedia).
Ветка 1.2 также обновилась до версии 1.2.10
45 коммитов с предыдущей версии. Ключевым исправлением этих выпусков, является переработка обработки сертификатов SSL; теперь код выполняется правильно и поддерживается в OC Windows.
Вышла новая версия системного языка программирования Nim, которому в этом сентябре исполнился год с момента выхода первой стабильной версии. По синтаксису язык похож на Python, а по производительности почти как C++. Согласно FAQ (nim-lang.org) язык во многом заимствует из (в порядке весомости вклада): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.
Появился новый сборщик мусора ORC, использующий алгоритм из ARC, но при этом специальным образом обрабатывающий циклические ссылки. Включается опцией --gc:orc. О различиях ARC/ORC есть отличная статья.
Добавлен режим строгих определений функций, при котором включается дополнительная проверка на мутабельность объектов. Активируется через прагму {.experimental: "strictFuncs".} или через ключ --experimental:strictFuncs.
Ключевое слово from теперь может быть использовано как оператор.
Добавлена прагма .noalias. Она сопоставляется с ключевым словом C restrict, чтобы повысить эффективность, которую может обеспечить это слово.
Конкретные предупреждения теперь можно превратить в ошибки через --warningAsError[X]:on|off.
Новая команда: nim r main.nim [args...], которая компилирует и запускает main.nim, и включает --usenimcache так, что результат сохраняется в $nimcache/main$exeExt, используя ту же логику что и nim c -r для избавления от перекомпиляции, когда исходники не изменились. Пример:
nim r compiler/nim.nim --help # скомпилирован в первый раз
echo 'import os; echo getCurrentCompilerExe()' | nim r - # это тоже работает
nim r compiler/nim.nim --fullhelp # без перекомпиляции
nim r --nimcache:/tmp main # бинарник сохранён в /tmp/main
Добавлена новая подсказка --hint:msgOrigin, которая покажет где компилятор сгенерировал сообщения об ошибках/предупреждения. Это помогает, когда неочевидно откуда пришло сообщение.
Добавлен флаг --backend:js|c|cpp|objc (или -b:js и т.д.) для смены бэкенда.
Добавлен флаг --usenimcache для вывода бинарников в nimcache.
Добавлена экспериментальная генерация заголовочников C++ из внешних (extern) объявлений C|C++: DMD теперь умеет писать заголовочные файлы C++, содержащие биндинги на объявления в существующих файлах D, помеченных как extern(C) или extern(C++).
Изменения в рантайме:
Добавлен пропущенный в некоторых местах pthread_attr_destroy.
Расширенные биндинги в core.sys.windows.security.
Добавлен core.stdcpp.memory.unique_ptr.
Добавлен TFD_TIMER_CANCEL_ON_SET.
Изменения в библиотеке:
std.bigint теперь @safe.
Замена approxEqual на isClose в std.math.
Удалён устаревший std.format.Mangle.
Удалены устаревшие структуры ByLine, ByChunk, ByRecord из std.stdio.
std.algorithm.sorting.schwartzSort теперь поддерживает и бинарные функции трансформации.
Добавлена curry в std.functional.
Изменения в инсталляторе:
Скрипт инсталляции теперь может исполняться на Windows.
Вышла новая версия системного языка программирования Nim. В ней имеется частичная несовместимость с версией 1.0, например, из-за более строгого преобразования типов. Но на этот случай есть флаг --useVersion:1.0.
Главное нововведение — новый сборщик мусора, включаемый опцией --gc:arc. Автор языка Andreas Rumpf собрается написать подробную статью о преимуществах ARC, а пока предлагает ознакомиться с его выступлением на FOSDEM, где показаны результаты бенчмарков.
Компилятор теперь поддерживает опцию --asm для более удобного изучения производимого ассемблерного кода.
align pragma может быть использована для переменных и полей объекта, это похоже на alignas в C/C++.
=sink оператор теперь опционален. Компилятор теперь может использовать комбинацию =destroy и copyMem для эффективного перемещения объектов.
Новый синтаксис для lvalue: var b {.byaddr.} = expr, подключаемый через import std/decls
Компилятор поддерживает новый ключ --panics:on, который превращает рантаймовые ошибки такие как IndexError или OverflowError в фатальные ошибки, которые не могут быть пойманы через try. Это может улучшить эффективность рантайма и размер программы.
Генерируемый JS-код использует только пробелы вместо мешанины из пробелов и табов.
В компилятор добавлена поддержка .localPassc pragma, с помощью которой можно обработать специальные опции C(++) бэкенда для C(++) файла, который генерируется из текущего модуля Nim.
Nimpretty теперь не принимает отрицательный аргумент для настройки отступов, так как это ломало файлы.
Добавлены новые макросы (collect, dup, capture), подключаемые через import sugar.
Помимо этого добавлено множество изменений в стандартную библиотеку и множество исправлений багов.
Андрей Шитов, известый Perl-разработчик, решил в этом году попробовать как можно больше языков программирования и поделиться опытом с читателями.
Языки программирования восхитительны! Ты влюбляешься в какой-либо язык как только напишешь несколько тестовых программ. Чем больше изучаешь, тем лучше чувствуешь сам язык и идеи положенные в его фундамент.
В рождественском календаре этого года (с 1 по 24 декабря), я буду ежедневно публиковать статьи повествующие об основах различных языков программирования: один день - один язык. Чтобы сделать обзоры более полезными, я постараюсь придерживаться единого формата и разобрать аспекты языка, необходимые для написания следующих мини-проектов:
Hello, World!
Функция, вычисляющая факториал рекурсивно или в функциональном стиле
Программу, создающую массив объектов и выполняющую полиморфный вызов методов на них
Реализацию сонной сортировки (sleep sort). Данный алгоритм не применяется в боевых условиях, но замечательно демонстрирует возможности языка в разрезе конкурентности
Nim — статически типизированный язык, который ориентируется на эффективность, читаемость и гибкость.
Версия 1.0 отмечается стабильной базой, которая может быть уверенно использована в ближайшие годы. Начиная с текущего релиза, любой код, написанный на Nim, не будет сломан.
Этот релиз включает в себя множество изменений, включая исправления ошибок и некоторые языковые дополнения. В комплекте также идет обновлённый пакетный менеджер Nimble.
Версия 1.0 теперь имеет статус LTS. Поддержка и исправление ошибок будут продолжаться до тех пор, пока будут востребованы. Новые возможности, которые не будут нарушать обратную совместимость, будут развиваться в ветке 1.х.
Текущая цель состоит в том, чтобы любой код, который компилируется этим релизом, продолжал компилироваться любой стабильной версией 1.х в будущем.
Компилятор всё ещё реализует функции, которые описаны в «экспериментальном руководстве». В эти возможности всё ещё могут быть внесены обратно несовместимые изменения. Есть также модули в стандартной библиотеке, которые до сих пор считаются нестабильными, и они помечены как нестабильное API.
Несколько часов назад команда Erlang объявила об очередном релизе языка программирования и всей платформы.
Напомню, что Erlang/OTP предназначен для создания широко масштабируемых систем, работающих в режиме мягкого реального времени с требованиями высокой доступности. Платформа давно и успешно используется в таких сферах, как телекоммуникации, банки, электронная коммерция, телефония и мгновенная передача сообщений.