Интервью с Privalov'ым, создателем FASM — Архив WASM.RU
- Почему вы решили написать свой ассемблер?
В 1998 году я писал свою собственную операционую систему и мне был нужен хороший инструмент для этого. Тогда я пользовался Turbo Assembler, но в нём недоставало некоторых возможностей, которые мне были нужны - мне очень не нравилось жёстко задавать инструкции с помощью DB-директив. Поэтому я начал проект по созданию собственного ассемблера. Я также сделал его независимым от операционной системы, чтобы можно было легко спортировать в свою OS и в дальнейшем проводить всю разработку там. Я также написал портабельный редактор с подстветкой синтаксиса в тех же целях, он назывался "flat editor", и исходники от него должны где-то валяться.
Позже я потерял интерес к разработке этой OS и, к превеличайшему сожалению, даже потерял исходники от последней версии (с работающими портами flat assembler'а и flat editor'а). Но в бэкапах у меня была досовская версия flat assembler'а, и в 2000 году я решил зарелизить её в интернет, просто потому что подумал, что кому-то она может оказаться полезной для разработки OS. И когда я обнаружил, что интерес к flat assembler гораздо больше, чем казалось вначале, я начал улучшать его и адаптировать для других целей, пока он не стал достаточно универсальным средством.
- Сколько времени у вас заняло написание первой версии FASM?
Во-первых, пожалуйста, обратите внимание, что это был уже второй раз, когда я писал ассемблер. Первый, созданный в 1998 году, был написан без малейшего представления, как надо писать компилятор или ассемблер. Но таким образом я получил опыт, позволивший мне в 1999 году начать FASM и закончить первую довольно быстро. Я начал этот проект 23 марта, а первая версия с полной поддержкой набора инструкций .386 и способная компилировать саму себя, была готова в начале мая. Так что это заняло у меня около месяца.
- FASM очень удобен, но при этом не стоит ни копейки. Не жалеете ли вы, что приходится давать его забесплатно?
Я не думаю, что он был бы очень популярен, если бы он был коммерческим продуктом, особенно, если учесть, что сейчас гораздо меньше ассемблерщиков, чем было раньше, поэтому сомневаюсь, что это дало бы мне сколько-нибудь серьёзный доход. Хотя я подумывал о том, чтобы выпустить 64-х битную версию fasm как коммерческий продукт, если только в этом будет достаточный интерес. Я должен признаться, что у меня не достаёт мотивации работать над 64-х битной версией FASM бесплатно.
(Впоследствии Privalov решил не делать 64-х битную верси коммерческой.)- Будут ли добавлены высокоуровневые конструкции (встроенный PROC, .IF/.WHILE и т.д.) в FASM?
Мне всегда хотелось держать синтаксис fasm'а очень простым и основанным на небольшом количестве директив, которые бы позволяли реализовывать другие фичи вроде макросов. И хотя директивы fasm ещё недостаточно могущественны, чтобы реализовать некоторые очень сложные высокоуровневые конструкции, в общем случае этих директив более чем достаточно, чтобы реализовать практически любую возможность, каким-либо боком относящуюся к ассемблеру. И если кому-то действительно нужно больше, я бы посоветовал использовать какой-либо компилятор с fasm в качестве постпроцессора (back-end).
- Будет ли FASM добавлена оптимизация, как формальная (например, замена lea на mov, замена одних опкодов на более короткие), так и неформальная (например, перегруппировка инструкций, выкидывание ненужного кода)?
Нет, на мой взгляд, даже эта формальная оптимизация слишком противоречива, чтобы помещать её в ассемблер. Тем не менее, практически для всего из вышеперечисленного можно сделать соответсвующий макрос.
- Макроязык FASM нетривиален и отличается от MASM/TASM. Вы планируете добавить режим совместимости?
Ну, он всё же немного похож на тот, который использовался в режиме "ideal" TASM'а, так как когда я проектировал FASM, я во всю пользовался TASM'ом. Все элементарные возможности макроязыка очень похожи, единственная разница, что в fasm'е содержимое макроса заключается в фигурные скобки. Но даже это можно изменить с помощью fasm'овской директивы "fix".
А более продвинутые возможности макроязыка мне пришлось проектировать с учётом уже существующей архитектуры FASM, вот почему они стали такими, какие они есть. Я никогда не думал о добавление какого бы то ни было "режима совместимости".
- Будет ли 64-х битный режим добавлен в FASM?
Он находится в разработке, но сейчас немного заморожен, так как я работаю над многими другими вещами в то же самое время. Также, как я уже сказал выше, я подумывал о том, чтобы продолжить его разработку только в виде коммерческого проекта.
- Позволяет ли архитектура FASM адаптировать его для поддержки других процессоров (например, GameBoy )?
Да, я старался сделать архитектуру fasm такой, чтобы подобную адаптацию можно было сделать достаточно легко (что всё равно будет кросс-ассемблированием, так как сам fasm написан под x86), однако если вы захотите использовать инструкции, синтаксис которых очень сильно отличается от Интеловских, вам придётся сделать довольно большие изменения в модуле парсинга, который ответственнен за отделение и распознование все синтаксических частей каждой строки исходного кода.
- Планируете ли вы добавить поддержку других OS в FASM?
Да, FASM должен без особых проблем работать на любой системе, предназначенной для процессора, совместимого с IA32. Я недавно сделал версию, которая скомпилирована в объектный код, линкующего стандартную C-библиотеку, что должно позволить прилинковывать его к любому exe на любой операционной системе, имеющего такую C-библиотеку.
Также я планировал сделать версию для OS/2, так как некоторые люди просили её, но у меня просто никогда не было этой системы и у меня нет никакой информации, как сделать такой порт.
- Самый глупый вопрос: мёртв ли ассемблер?
Исходя из того, что это интервью имеет место быть, мы можем сказать, что нет. Однако многое изменилось со времён "золотого века" ассемблера, и я могу сказать, что он мёртв в некоторых аспектах. Десять лет назад мнение о языке ассемблера, которое вы могли услышать от среднего программиста, заключалось в том, что ассемблер - это что-то вроде высшего искусства, требующего очень глубокого знания и большого опыта, но дающего вам огромное могущество. Я думаю, что это было что-то вроде программерской мечты получить умения высокого уровня с помощью ассемблера. А сегодна вы скорее всего услышите что-то вроде следующего: "Ассемблер? Разве это не пустая трата времени?"
- Что вы думаете о .NET и IL?
Идея промежуточного кода на самом деле очень стара и хотя она имеет много преимуществ для HLL-кодеров (особенно в тех языках, которые должны быть "мудрее чем программист", но гораздо более стабильными благодаря этому, в некоторых случаях очень важно давать программисту МЕНЬШЕ силы - вот хотя бы механизмы защиты членов классов являются примером такого подхода). Но сейчас очевидно, что такие программы никогда не смогут побить хорошо написанный нативный машинный код в плане качества. Поэтому похоже, что это просто тенденция к ещё большему разделения языков программирования на две основные области: одна, в которой более важная стабильность, и другая, где более важно качество и сила. Конечно, программисты на ассемблере - это ядро второй группы.
- Что вы думаете об open-source проектах?
Очень хорошо видеть исходный код программы, которую вы используете, так как вы также можете убедиться, что внутри нет никакого опасного кода. И возможность использовать код в ваших собственных проектах ткже очень хорошо, хотя в случае с GPL мне кажется, что палка немного перегнута, так как она заставляет использовать ваш проект также под GPL. Поэтому я предпочитаю гораздо более простую лицензию в стиле BSD.
- Знаете ли вы о демосцене? Есть ли у вас любимые группы, демки или интро?
Я интересовался этой темой в старые времена, но сейчас все контакты в этой области потеряны. Что касается любимых демо, то это "Second Reality" от Future Crew.
- Ваше мнение о вирусной сцене? Действительно ли она умерла и хорошо это или плохо?
У меня никогда не было никаких контактов с такой сценой, фактически я даже никогда не осозновал её существования.
- Ваше мнение о крэк-сцене и исследовании программ?
Мне бы не следовало оправдывать reverse engineering, так как это сейчас незаконно во многих странах, хотя по-моему мнение у вас всегда должно быть право реверсировать программу, стоящую на вашем компьютере - у вас просто должно быть право знать, что вы запускаете, так же как вы имеет право знать, что вы едите, когда покупаете какую-либо еду. Но в обоих случаях происходят определённые манипуляции, позволяющие концерная держать свои секреты под замком (я имею ввиду что-нибудь вроде рецепта Кока-колы).
Конечно, в большинстве случаев реверсинг используется для преодоления программной защиты - и снова, у вас должно быть это право, если вы купили программное обеспечение, например, если вы хотите сделать программу, которой вы владеете, более лёгкой в использовании - единственное, что должно быть незаконным - это копирование её другим.
Это было моё мнение насчёт проблем с легальностью, что касается самого reverse engineering и крэкинга, я должен признаться, что делал подобные вещи довольно часто в собственных целях во времена DOS, и на мой взгляд, это может дать огромный опыт с ассемблером и ведёт к получения знаний действительно высокого уровня. Вероятно, среди крэкеров можно найти лучших ассемблерщиков.
- Каким вы видите будущее программирования?
Программирование сейчас разделяется на разные области, и мне кажется, что в будущем они станут ещё более специализированным, так как действительно универсального языка не существует, и сомневаюсь, что когда-нибудь такой появится.
- Где вы живёте и почему?
Я живу в Польше, потому что я поляк. Конкретно сейчас я в Кракове, где находится мой университет.
- Ваше любимое блюдо .
Ох, это трудный вопрос. Скажем... курица с картошкой .
- Ваши любимые книги и/или жанры книг.
Мне всегда нравилось читать, много читать - и я люблю разные жанры, но SF и фэнтези - это жанры, которые читал больше всего. Поэтому такие книги занимают большую часть списка моих любимых книг, хотя он постоянно меняется. Некоторые из моих любимых книг следующие: "Большой, маленький" Джона Кроули, "Хроники Томаса Ковенанта" Стивена Р. Дональдсона, "Понедельник начинается в субботу" и "Пикник на обочине" Стругацких, многие книги Филиппа К. Дика и Курта Воннегута и другие.
А один из моих любимых авторов книг, не относящихся к SF&F, - это Эрих Мария Ремарк.
- Вам нравятся компьютерные игры?
Я играл много несколько лет назад, когда игры выходили в основном под DOS. Поэтому вем мои любимые игры досовские, я упомяну только "Betrayal at Krondor" и "Privateer", но это только вершина айсберга.
- Вы верите в Бога или другое высшее существо?
Да, я верующий католик.
- Пробовали ли вы когда-нибудь осознанные сновидения?
Я делал это довольно часто на протижение многих лет, иногда получая действительно большой контроль (даже изменения всей сцены действия), но затем мне это немного наскучило от этого, и теперь это происходит гораздо реже. И только недавно я узнал, что этот феномен имеет собственное название и даже обсуждается в интернете.
- Нравится ли вам аниме или нет и почему?
Я не могу ответить на этот вопрос просто потому, что никогда особенно не сталкивался с этим явлением. © Aquila / WASM.RU
Интервью с Privalov'ым, создателем FASM
Дата публикации 12 авг 2004