Hacker News Digest

Тег: #dlang

Постов: 2

I spent a year making an ASN.1 compiler in D (bradley.chatha.dev) 🔥 Горячее 💬 Длинная дискуссия

Автор посвятил год созданию компилятора ASN.1 на языке D, но проект всё ещё далёк от завершения. Основной мотивацией стала необходимость реализации TLS для фреймворка Juptune, требующей обработки x.509 сертификатов, использующих кодировку ASN.1 DER. Автор описывает ASN.1 как «protobuf на стероидах» — избыточно сложный язык спецификации данных, созданный в конце 80-х годов, который, тем не менее, повсеместно используется в современных технологиях, несмотря на свою сложность.

Компилятор под названием dasn1 уже способен парсить некоторые x.509 сертификаты, но разработка сопряжена с множеством трудностей. ASN.1 имеет «всё или ничего» уровень сложности, требует реализации ограничений трижды разными способами, а его спецификации содержат много устаревших элементов. Язык D, однако, оказался удобным для генерации кода благодаря статическим импортам, метапрограммированию и шаблонам, которые позволяют создавать естественные API с обнаружением ошибок на этапе компиляции.

by BradleyChatha • 23 октября 2025 г. в 12:47 • 280 points

ОригиналHN

#dlang#asn.1#der#tls#x.509#juptune#cbor#jwt#pki

Комментарии (203)

  • ASN.1 и DER/BER, несмотря на свою репутацию, остаются краеугольным камнем для TLS/PKI, но их сложность и отсутствие инструментария вроде protobufs заставляют задуматься, не проще ли было бы начать с нуля сегодняшними средствами.
  • Дискуссия подтверждает, что ASN.1 был там раньше SSL и даже формат сертификатов из X.500, и что его унаследовали в HTTPS.
  • Подчеркивается, что вместо него могли бы быть JWT или CBOR, но вопрос в том, что ASN.1 остается ввиду отсутствия замены, которая бы обеспечивала каноническое кодирование.
  • Поднимается вопрос, почему мы до сих пор используем его, если он такой плохой, и отвечается, что нет никакой альтернативы, которая бы обеспечивала такую же степень взаимодействия с прошлым.
  • Участники обсуждения также отмечают, что ASN.1 это не только формат, но и семейство протоколов, и что его сложность часто преувеличена, особенно если ограничиться DER.

Zig's Lovely Syntax (matklad.github.io) 💬 Длинная дискуссия

Zig выглядит почти как Rust, но делает синтаксис ещё приятнее за счёт более простой семантики и ряда изящных решений.

Числа
Литералы 92 всегда имеют тип comptime_int; при присваивании они неявно приводятся к нужному типу. Суффиксов нет.

Строки
Многострочные «сырые» строки пишутся через \\ в начале каждой строки; \ не экранируется, отступы не портятся, а лексер работает построчно.

Структуры
.{ .x = 1, .y = 2 } — запись поля через .x = совпадает с присваиванием, что позволяет грепом находить именно записи, а не чтения.

Типы
Все типы префиксные: u32, [3]u32, ?[3]u32, *const ?[3]u32. Разыменование постфиксное: ptr.*.

Идентификаторы
Синтаксис @"имя с пробелом" позволяет обходить ключевые слова и экспортировать любые имена.

Функции
fn add(x: i32, y: i32) i32 — без стрелки ->, так как лямбд нет, а возвращаемый тип всегда обязателен. pub fn main() void {}.

Переменные
const и var; часто используемое const короче, чем в Rust, но всё же длиннее Kotlin-овского val.

by Bogdanp • 10 августа 2025 г. в 15:33 • 157 points

ОригиналHN

#zig#rust#kotlin#csharp#go#dlang

Комментарии (156)

  • Обсуждение разделилось: кому-то синтаксис Zig кажется «прекрасным» минимализмом, другим — «шумным» и «капризным».
  • Спор о порядке «имя: тип» vs «тип имя»: одни хотят видеть тип первым, другие — имя.
  • Критика деталей: @-префиксы, .{}, отсутствие лямбд, перенос строк, orelse без пробела.
  • Плюсы: raw-строки Zig решают проблему отступов; обработка ошибок через try нравится многим.
  • Сравнения: Kotlin, C#, Go, Rust, D — каждый считает «своё» лучше.
  • Итог: «красота» синтаксиса субъективна и во многом привычна; после практики Zig начинает нравиться.