Pull to refresh
19
0

Инженегр АСУТП

Send message

Как я написал платформу для высокочастотного трейдинга на D

Reading time5 min
Views13K

Я использовал язык программирования D для реализации платформы высокочастотного трейдинга (HFT). Я был вполне удовлетворен полученным опытом и решил поделиться тем, как я пришел к этому. Этот путь был тернист.

Читать далее
Total votes 16: ↑12 and ↓4+8
Comments12

За рулем с D

Reading time7 min
Views8.9K

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

Вот мой почтенный автомобиль Holden VZ Ute. С завода он поставлялся с убогой четырехступенчатой автоматической коробкой передач. За 18 месяцев владения автомобилем я сломал четыре коробки передач. В то время я не мог позволить себе новый автомобиль, поэтому мне пришлось творчески подойти к делу. Я купил железобетонную, дуракоустойчивую шестиступенчатую автоматическую коробку передач от другого автомобиля. Но на этом я уперся в тупик. Чтобы заставить ее работать, мне пришлось собрать собственную печатную плату, систему управления и прошивку для управления соленоидами, гидравликой и сцеплениями внутри коробки передач, обработки команд водителя, принятия решений о переключении передач и взаимодействия с автомобилем, притворяясь четырехступенчатым автоматом.

Гони!
Total votes 19: ↑18 and ↓1+17
Comments1

Современный C++ нас не спасет

Reading time5 min
Views22K

Я часто критикую небезопасные при работе с памятью языки, в основном C и C++, и то, как они провоцируют необычайное количество уязвимостей безопасности. Моё резюме, основанное на изучении доказательств из многочисленных крупных программных проектов на С и С++, заключается в том, что нам необходимо мигрировать нашу индустрию на безопасные для памяти языки по умолчанию (такие как Rust и Swift). Один из ответов, который я часто получаю, заключается в том, что проблема не в самих С и С++, разработчики просто неправильно их готовят. В частности, я часто получаю в защиту C++ ответ типа: "C++ безопасен, если вы не используете унаследованную от C функциональность" [1] или аналогичный, что если вы используете типы и идиомы современного C++, то вы будете застрахованы от уязвимостей типа повреждения памяти, которые терзают другие проекты.

Хотелось бы отдать должное умным указателям С++, потому что они существенно помогают. К сожалению, мой опыт работы над большими С++ проектами, использующими современные идиомы, заключается в том, что этого даже близко недостаточно, чтобы остановить наплыв уязвимостей. Моя цель на оставшуюся часть этой заметки - выделить ряд совершенно современных идиом С++, которые порождают уязвимости.

Читать далее
Total votes 52: ↑32 and ↓20+12
Comments313

Почему я переписал прошивку для клавиатуры с Rust на Zig: слаженность, мастерство и развлечение

Reading time16 min
Views8.5K

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

Первоначально, я писал их на Rust, но несмотря на годы опыта разработки на нем, приходилось повоевать. Со временем, я заставил мои клавиатуры работать, но это заняло неприличное количество времени и не приносило мне удовольствия.

После неоднократных предложений от моего более подкованного в Rust-и-вычислительной технике друга Джейми Брэндона, я переписал прошивку на Zig, и вышло очень удачно.

Я нашел это поразительным, учитывая, что я никогда не видел Zig раньше, и этот язык, еще даже не версии 1.0, созданный хипстером из Университета Портленда, и описывается, по сути, всего одной страницей документации.

Читать далее
Total votes 17: ↑13 and ↓4+9
Comments17

О безопасности Сбербанка Онлайн

Reading time2 min
Views122K

Кадр из мультфильма "Сундук"

В общем, что то случилось и у меня перестал восприниматься правильный пароль в Сбербанк Онлайн.

Недолго думая, я набрал техподдержку, и после недолгого ожидания мой вопрос решился.

Оказывается, для получения доступа к моему банку мне (ну или кому угодно) нужно выполнить тривиальную операцию - сменить логин/пароль.

Но суть оказалась в том, что для этого нужно всего две вещи:

Две простых вещи, Карл!
Total votes 38: ↑19 and ↓190
Comments78

Самый быстрый компилятор aka compiler-benchmark

Reading time5 min
Views6.5K

От переводчика: все началось с топика на форуме D.


После оценки скорости компиляции D по сравнению с другими языками мне было интересно, существует ли какой-нибудь язык, который компилируется в нативный код почти так же быстро или быстрее, чем D, за исключением C?
Если да, то скорее всего, он должен использовать бэкэнд, отличный от LLVM.
Я думаю, что Jai способен на это, но он еще не вышел в релиз.

Бенчмарки скорости компиляции различных комбинаций языков и компиляторов. Поддерживаемые языки:


Компиляторы в нативный код


Читать дальше →
Total votes 20: ↑19 and ↓1+18
Comments35

Интереснейшее влияние Cyclone

Reading time16 min
Views5.2K

Оглавление:


  • Cyclone
  • C++, владение и псевдонимы
  • Rust
  • Midori’s M#
  • Pony
  • Cone
  • Резюме

В 2001 году Джим Тревор (AT&T Research) и Грег Моррисетт (Cornell) запустили совместный проект по разработке безопасного диалекта языка программирования C — как развитие более ранних работ над Типизированным Ассемблером. После пяти лет напряженной работы и нескольких опубликованных научных работ, команда (в том числе Дэн Гроссман, Майкл Хикс, Ник Свами и другие) выпустила Cyclone 1.0. А затем разработчики занялись другими делами.

Читать дальше →
Total votes 35: ↑34 and ↓1+33
Comments10

Независимый HttpBench для D, или врут ли тесты TechEmpower?

Reading time6 min
Views1.5K

Простой фреймворк для тестирования HTTP-серверов, вдохновленный Simple Web Benchmark (Прим.пер.Там есть график для многих других языков), но сфокусированный на dlang фреймворках и библиотеках.


Он измеряет достижимый RPS (запросы в секунду) в сценарии простого текстового ответа (plaintext).


Тесты были собраны или изменены из различных мест (в том числе TechEmpower).


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


В качестве генератора нагрузки используется по умолчанию wrk и запрашивает статистику у коллектора, но hey тоже поддерживается (просто используйте ключ --tool).


Тесты можно запускать и без докера, достаточно лишь установить компиляторы для протестированных языков и генератор загрузки wrk/hey (но протестировано только на linux).

Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments3

Портируем утилиту командной строки с Go/Rust на D

Reading time9 min
Views3.6K
Несколько дней назад, на реддите в «программировании», Paulo Henrique Cuchi поделился своим опытом разработки утилиты командной строки на Rust и на Go (перевод на Хабре). Утилита, о которой идет речь, — это клиент для его пет-проекта Hashtrack. Hashtrack предоставляет GraphQL API, с помощью которого клиенты могут отслеживать определенные хэштэги твиттера и получать список соответствующих твитов в реальном времени. Будучи спровоцированным комментарием, я решил написать порт на D, чтобы продемонстрировать, как D может быть использован для подобных целей. Я постараюсь сохранить ту же структуру, которую он использовал в своем блогпосте.

Исходники на Гитхабе

Видео по клику
Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments4

Смотрим на Chapel, D, Julia на задаче вычисления ядра матрицы

Reading time15 min
Views2.9K

Введение


Кажется, стоит вам отвернуться, и появляется новый язык программирования, нацеленный на решение некоторого специфического набора задач. Увеличение количества языков программирования и данных глубоко взаимосвязано, и растущий спрос на вычисления в области «Data Science» является связанным феноменом. В области научных вычислений языки программирования Chapel, D и Julia являются весьма релевантными. Они возникли в связи с различными потребностями и ориентированы на различные группы проблем: Chapel фокусируется на параллелизме данных на отдельных многоядерных машинах и на больших кластерах; D изначально разрабатывался как более продуктивная и безопасная альтернатива C++; Julia разрабатывалась для технических и научных вычислений и была нацелена на освоение преимуществ обоих миров — высокой производительности и безопасности статических языков программирования и гибкости динамических языков программирования. Тем не менее, все они подчеркивают производительность как отличительную особенность. В этой статье мы рассмотрим, как различается их производительность при вычислении ядра матрицы, и представим подходы к оптимизации производительности и другие особенности языков, связанные с удобством использования.
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments4

Перечень изменений в D 2.092. Заимствование заимствования

Reading time12 min
Views1.6K
От переводчика. Обычно не перевожу подобные статьи, т.к не вижу в них ничего интересного. Здесь же, два небольших, но важнейших нововведения — поддержка прямой линковки C++ библиотек и «позаимствованная» из Rust система владения и заимствования (вторая ласточка DFA, первая вышла в GCC10 буквально пару дней как, и в Nim тоже задумываются о подобном) с описанием. Собственно, всякие нудные перечни я не переводил, а ссылки ведут на оригинал.

Предыдущая версия перечня 2.0.91.1 (англ)
Где загрузить

2.092.0 вышла с 15 важными изменениями и 44 исправленными ошибками и улучшениями. Огромная благодарность 47 контрибьюторам, которые сделали этот релиз возможным.

Изменения компилятора

Читать дальше →
Total votes 8: ↑8 and ↓0+8
Comments4

PVS Studio.VS.Статический анализ GCC 10. Независимый минитест

Reading time3 min
Views5.1K
После появления переводной статьи про Статический анализ в GCC 10, и ожидаемой реакции присутствующих здесь представителей разработчика коммерческого статического анализатора PVS-Studio, у меня возник вопрос: «Почему же представители отказываются проверить свой продукт на таких простых примерах для статического анализа, и не скрывают ли они чего?»
Andrey2008 Ды, неинтересно мне это. Поймал/не поймал синтетическую ошибку, это ничего не говорит о возможностях анализатора
Должны же они как то прогонять юнит-тесты своего продукта и как, если не на таких синтетических простых примерах?!

Собственно, пришлось сделать это самому.
Читать дальше →
Total votes 33: ↑31 and ↓2+29
Comments15

Статический анализ в GCC 10

Reading time10 min
Views8.3K

Я работаю в Red Hat над GCC, GNU Compiler Collection. Для следующего основного релиза GCC, GCC 10, я реализовывал новую опцию -fanalyzer: проход статического анализа для выявления различных проблем во время компиляции, а не во время исполнения.

Я думаю, что лучше выявлять проблемы как можно раньше по мере написания кода, используя компилятор, как часть цикла компиляции-редактирования-отладки, а не использовать статический анализ в качестве дополнительного инструмента «на стороне» (возможно, проприетарного). Поэтому, представляется целесообразным иметь встроенный в компилятор статический анализатор, который видит код в точности такой же, какой видит компилятор — ведь это и есть компилятор.
Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments26

wc на D: 712 символов без единого ветвления

Reading time7 min
Views5.9K
После прочтения "Побиваем С программой в 80 строк на Хаскеле", которую я нашел на ХакерНьюс, я решил, что D может и лучше. И я написал wc на D.

Прим.пер. Я предложил вышеупомянутую статью перевести 0xd34df00d, но он предпочел сделать по мотивам свою «Побеждая C двадцатью строками Haskell: пишем свой wc». И теперь статьи множатся как перепевы «чеканной монетой».

Программа


Состоит из одного файла — 34 строки и 712 символов.

Исходник
import std.stdio : writefln, File;
import std.algorithm : map, fold, splitter;
import std.range : walkLength;
import std.typecons : Yes;
import std.uni : byCodePoint;

struct Line {
	size_t chars;
	size_t words;
}

struct Output {
	size_t lines;
	size_t words;
	size_t chars;
}

Output combine(Output a, Line b) pure nothrow {
	return Output(a.lines + 1, a.words + b.words, a.chars + b.chars);
}

Line toLine(char[] l) pure {
	return Line(l.byCodePoint.walkLength, l.splitter.walkLength);
}

void main(string[] args) {
	auto f = File(args[1]);
	Output o = f
		.byLine(Yes.keepTerminator)
		.map!(l => toLine(l))
		.fold!(combine)(Output(0, 0, 0));

	writefln!"%u %u %u %s"(o.lines, o.words, o.chars, args[1]);
}

Читать дальше →
Total votes 16: ↑14 and ↓2+12
Comments14

И мышонок, и лягушка. Универсальный Компилятор

Reading time6 min
Views4.3K
В серии про надежное программирование [1], [2] остался незаслуженно забытым Swift. Я, честно говоря, просто не считал его кроссплатформенным, а работающим исключительно для macOS/iOS. Тут случайно выяснилось, что Swift также поддерживается такой средой разработки, как RemObjects Elements.

Оказалось, у неё Универсальный Компилятор. Умеет компилировать программы на C#, Go, Java, Oxygene Object Pascal, Swift для: Android, Cocoa (MacOS, iOS, tvOS), JVM, Linux (x64, armv6, aarch64), .NET/.NET Core/Mono, Native Windows(x86/x64), WebAssembly.

Причем делает это практически в любых комбинациях язык → целевая система! Например, можно написать программу на Java, которая будет использовать WPF для целевой платформы .NET, и это все есть в примерах, идущих в поставке.

Итак, представляю мини-заметку про RemObjects Elements, а заодно про надежность двух поддерживаемых в ней языков — Swift и Oxygene.

Рисунок с сайта radionetplus

Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments6

Внезапно, одной лишь системы сборки мусора недостаточно

Reading time3 min
Views5.2K
Вот вам небольшая история о таинственных сбоях сервера, которые мне пришлось отлаживать год назад (статья от 05 декабря 2018, прим.пер). Сервера некоторое время работали нормально, а затем в какой-то момент начинали аварийно завершаться. После этого попытки запустить практически любую программу, что были на серверах, терпели неудачу с ошибками «На устройстве нет места», хотя файловая система сообщала только о нескольких занятых гигабайтах на ~20 ГБ дисках.
Читать дальше →
Total votes 9: ↑8 and ↓1+7
Comments12

Последние версии компиляторов D

Reading time3 min
Views3.9K
Группа разработчиков LDC закрыла ушедший год версией 1.19.0 компилятора D, использующего LLVM, а основная команда начала новый год версией 2.090.0 эталонного компилятора DMD. И если вы еще не слышали, не так давно появились важные новости о D-компиляторе на базе GCC, GDC. Наверстываем!
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments0

Мое видение будущего D

Reading time3 min
Views12K
Когда Андрей Александреску покинул пост заместителя руководителя отдела языка программирования D, меня попросили взять на себя эту роль в будущем. Нет необходимости говорить об этом, но я все равно скажу, что эта шапка на меня великовата.
Я все еще вхожу в свою новую роль в обществе и выясняю, как я хочу действовать и что это вообще такое. Этот процесс происходит не в вакууме, так как Уолтер тоже с нами.

На форумах D меня попросили написать в блоге о моих «мечтах и дальнейших шагах для D», так вот результат. Что бы я хотел, чтобы стало с D в ближайшем будущем:
Читать дальше →
Total votes 47: ↑44 and ↓3+41
Comments34

Финансирование Фондом развития языка D: Новые платформы и новые гранты…

Reading time4 min
Views1.3K
Когда я впервые объявил о создании HR-фонда здесь, в блоге в апреле, команда Фондом развития языка D вела переговоры о найме одного или нескольких человек, чтобы конкретизировать спецификацию и реализацию shared (атрибут межпоточного взаимодействия). Такая работа требует очень специфических навыков, которыми обладают лишь немногие люди в кругу D. Пока что мы не смогли найти ни одного из них, у кого было бы достаточно времени. Между тем, HR-Фонд ждет, когда будет использован.

Программирование для мобильных с помощью LDC


Читать дальше →
Total votes 11: ↑7 and ↓4+3
Comments0

Какой язык — D, Go или Rust имеет лучшие перспективы заменить C и почему?

Reading time7 min
Views71K
Несмотря на мой статус и очевидную предвзятость как одного из создателей D, я постараюсь отвечать откровенно; Я следовал путям Go и Rust, и я абсолютно точно знаю, где стирают грязное белье в D. Я поощряю людей на аналогичных позициях в сообществах Rust и Go чтобы и они делились своим мнением. Так вот.

Для начала, где то в вопросе должен фигурировать и C++. Должен ли он быть заменен вместе с С, или же он один из кандидатов на замещение С, но в любом случае С++ это ключевой элемент уравнения. Это ближайший язык к С и очевидный шаг вперед. Учитывая возраст С++, я в дальнейшем полагаю в этом вопросе что С++ вместе с С является целью для замены.
Читать дальше →
Total votes 109: ↑104 and ↓5+99
Comments393
1

Information

Rating
Does not participate
Location
Россия
Registered
Activity