April 20th, 2010

Book

Наведение антенны GSM/EDGE

Есть антенна Yagi/волновой канал для 3G-модема. Подключение оной антенны поразительно влияет на скорость работы, но не влияет на сообщаемый модемом уровень сигнала. Что это может быть? И как наводить антенну (судя по аналогичным конструкциям диаграмма направленности +- 25 градусов), если по сути из показателей есть только работа TCP/IP?
Book

Краткое описание HN

Предлагаемый специализированный язык с возможностями ML и моделью исполнения Си (включая управление памятью) предназначен для применения в проектах на С++ с целью генерации отдельных модулей на С++ из более компактных описаний на предлагаемом языке. Компактность обеспечивается благодаря выводу типов по Хиндли-Милнеру, небольшому количеству знаков препинания в духе Haskell и Javascript, первоклассному параметрическому полиморфизму и перво¬классным функ¬ци¬ям высших порядков (включая замыкания). В отличие от других кодогенераторов, код на С++ будет не отличим от написанного человеком. Это планируется обеспечить сохранением в выходном коде иден¬ти¬фика¬торов входного языка, а также правилами оптимизации, понижающими абстрактность входного кода путем встраивания (inline) функций высшего порядка и инстанцирования полиморфных типов в мономорфные там, где это улучшит близость кода к написанному вручную.
Book

Задачи, решаемые HN0

  • Более быстрая и дешевая разработка программ в областях, традиционно требующих С++
  • Возможность инкрементального и избирательного переписывания существующего кода на С++ на менее многословный язык
  • Возможность отдавать заказчику код на С++, а разрабатывать на менее многословном языке
  • Более компактный код с сохранением всех преимуществ С++, включая производительность, переносимость на платформы, для которых не существует реализаций других языков, кроме С++, и возможность низкоуровневой работы с памятью.
Book

Отличия HN от существующих решений

  • Идентичные с С++ модель памяти (кучи, в частности) и система типов позволяют избавится от маршаллинга и сохранить производительность при вызовах, переходящих языковую границу, даже в случае маленьких или часто вызываемых функций. Такие характеристики производительности, в свою очередь, облегчают инкрементальное переписывание.
  • Выходной код, неотличимый от написанного человеком (это единственное новшество и основное направление исследовательской работы)
  • Легкость написания бэк-ендов для других императивных выходных языков после реализации бэк-енда для С++.
  • Малый объем компилятора (по прогнозам, от 3 до 5 тыс строк), позволяющий использовать его для исследований в области разработки компиляторов
Book

Имеющийся прототип HN0

Состояние дел
  • Горы прочитанной литературы по языкам, компиляторам, оптимизаторам и системам типов
  • 2500 уродливых строк на Haskell и UUAG
  • Компилирует несколько программ с сохранением идентификаторов, но без оптимизаций для похожести на написанный человеком
  • SVN-репозиторий на Google Code
Используемые технологии
  • Haskell
  • Парсер Parsec 3
  • Препроцессор атрибутных грамматик UUAGC
  • Библиотеки тестирования HUnit, Quickcheck
Ближайшие планы (на ближайшие годы, судя по темпу написания оных 2.5к строк):
  • Переписать компилятор замыканий и вывод типов на UUAG
  • Переписать вывод типов с adhoc-алгоритма на стандартный Hindley-Milner-Damas-Mycroft
  • Закончить «компилятор замыканий»
  • Сделать FFI
  • Начать коммерческую эксплуатацию (мной)
  • Продолжить исследования и разработку оптимизатора для повышения «человекоподобности»
Book

Примечания к описанию HN0

  • Входной язык может быть существенно расширен или полностью заменён. Убогий входной язык был выбран для облегчения реализации прототипа. Быстрый и грязный прототип нужен, в свою очередь, для проверки гипотезы о возможности генерировать человекоподобный код.
  • Побочной целью проекта является написание маленького или по крайней мере модульного компилятора (с возможностью отключения-удаления ненужных модулей) для исследований в компиляторостроении. Идея сделать язык, тривиально компилирующийся в другой высоко¬уров¬не¬вый язык, возникла именно из-за желания уменьшить объём работ и сделать возмож¬ной разработку компилятора «на коленках» малой командой, а также из-за наивных подозрений в чрезмерной раздутости кода коммерческих компиляторов.
  • В настоящий момент реализуется «функциональное» подмножество входного языка. Для обеспечения человекочитаемости необходимо будет пополнить язык присваиванием, составным оператором и циклом. В отдаленном будущем планируется вновь избавиться от нефункциональных конструкций, дополнив систему компилятором из функционального высокоуровневого языка в текущий входной язык (императивный низкоуровневый).