?

Log in

No account? Create an account
олдскульная конфигурация - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

олдскульная конфигурация [мар. 8, 2014|05:44 am]
Anatoly Vorobey
[Tags|]

Уолтер Брайт вспоминает, как он сохранял конфигурацию в своих программах в те давние времена, когда будущие изобретатели XML еще пешком под стол ходили:
Back in the bad old DOS days, instead of creating a file format for saving/loading the configuration of the text editor, I simply wrote out the image in memory of the executable to the executable file. (The configuration was written to static global variables.)
Running the new executable then loaded the new configuration. This worked like a champ, up until the Age of Antivirus Software, which always had much grief over writing to executable files.
It's a trick I learned from the original Fortran version of ADVENT.

Думаю, он имееет в виду COM-файлы, потому что с EXE такое бы не вышло, если мне не изменяет память (из-за релокации). Хотя при желании в EXE-файле можно было бы перезаписать только часть, соответствующую глобальным переменным конфигурации - найти, где это, в файле было легко.
СсылкаОтветить

Comments:
[User Picture]From: shadow_ru
2014-03-08 03:52 am
Lisp? Smalltalk? Не, не слышал. :)
(Ответить) (Thread)
[User Picture]From: avva
2014-03-08 04:03 am
Ну это немного другое, там это способ жизни. И вообще, какой Smalltalk в DOSе? :)
(Ответить) (Parent) (Thread)
[User Picture]From: shadow_ru
2014-03-08 04:09 am
Ну, просто не ДОСом же едины. В лиспе SYSOUT/SYSIN появились ещё в конце 60-х.
(Ответить) (Parent) (Thread)
[User Picture]From: shadow_ru
2014-03-08 04:11 am
Я в том смысле, что Брайт заново изобрёл велосипед по-моему.
(Ответить) (Parent) (Thread)
[User Picture]From: bolk
2014-03-08 04:48 am
Тогда все изобретали велосипеды. Интернета не было.
(Ответить) (Parent) (Thread)
[User Picture]From: alexis_m
2014-03-08 09:34 am
Сейчас Интернет есть, а велосипеды продолжают появляться.
(Ответить) (Parent) (Thread)
[User Picture]From: bolk
2014-03-08 09:42 am
Разница в количестве велосипедов. Да и велосипедами в те времена бо́льшую часть не назовёшь — шанса найти готовое было очень мало, только в книгах, которые ещё найти надо было.
(Ответить) (Parent) (Thread)
[User Picture]From: p2004r
2014-03-08 12:09 pm
не знать о Лиспе это подвиг, причем именно в те времена :)
(Ответить) (Parent) (Thread)
(Удалённый комментарий)
[User Picture]From: archaicos
2014-03-08 03:59 am
Релокацию можно обойти соответствующим дизайном (блок данных/массив фиксированной структуры и длины с числами/строками внутри с уникальной меткой перед его началом).

Но у EXE есть и преимущество. К его концу можно тупо дописывать данные.
(Ответить) (Thread)
[User Picture]From: piggymouse
2014-03-08 04:32 am
Вот-вот я лично именно искал сигнатуру и перезаписывал кусок после неё.
(Ответить) (Parent) (Thread)
[User Picture]From: vitus_wagner
2014-03-08 04:47 am
А я как-то написал модуль, который преобразовывал указатель в смещение в exe-файле. Работало гораздо быстрее, чем поиск сигнатуры (который был в широко известной библиотеке Turbo Professional). Оно, правда было заточено под конкретный компилятор и конкретную модель памяти. Впрочем, у Turbo Pascal была ровно одна модель памяти.
(Ответить) (Parent) (Thread)
(Удалённый комментарий)
[User Picture]From: spamsink
2014-03-08 04:20 am
Back in the bad old UNIX days, была еще команда undump.
(Ответить) (Thread)
[User Picture]From: bespechnoepero
2014-03-08 04:57 am
я просто балдею от программистских терминов типа static variable
(Ответить) (Thread)
[User Picture]From: _winnie
2014-03-08 12:21 pm
При переводе на русский оксюморон тоже сохраняется, "неизменяемая переменная".

upd: хотя в данном конкретном случае static означает "имеющая постоянное место (адрес)".

Edited at 2014-03-08 12:22 (UTC)
(Ответить) (Parent) (Thread)
[User Picture]From: migmit
2014-03-10 08:25 pm
А уж от компьютеросборочных терминов вообще должны с ума сходить ("у меня вчера мама умерла, всю ночь с ней трахался, теперь буду мозги продавать").
(Ответить) (Parent) (Thread)
[User Picture]From: ygam
2014-03-11 05:52 am
Ну, это скорее сленг, чем термины.
(Ответить) (Parent) (Thread)
[User Picture]From: gul_kiev
2014-03-08 06:19 am
Да, для com адрес переменной в памяти (offset) соответствует её позиции в исполняемом файле, потому что там на всё (данные, код, стек) один сегмент, загрузка делается тривиально.
А для exe был другой трюк. У него просто узнать размер (из заголовка), и всякие данные можно было сохранять в конце exe-файла.
Дело в том, что один exe-файл считался удобнее, чем несколько файлов (exe, cfg, картинка какая-нибудь).
(Ответить) (Thread)
[User Picture]From: mfi
2014-03-08 06:24 am
В RT-11 помню замечательный драйвер клавиатуры - редактирование строки, простенькиe макросы, хелп, то, се. Программа установки, конфигуратор и собственно драйвер - один файл. И конфиг находился там же, изменил что то, вышел - пре перезагрузке получаешь то что было, а не начальную конфигурацию. Скопировал на другую машину один файл - и все привычно. Мечта ( глядя на тысячи файлов и зависимостей в современном ПО ).

Ясен пень, все это было до массового появления вирусов и запретов на изменения исполняемых файлов.
(Ответить) (Thread)
[User Picture]From: archaicos
2014-03-08 07:57 am
А теперь нужно просто с собой носить свою виртуальную машину. :)
(Ответить) (Parent) (Thread)
[User Picture]From: cat_mucius
2014-03-08 07:58 am
Very user-friendly! В качестве системщика, не могу не оценить.
(Ответить) (Thread)
[User Picture]From: _winnie
2014-03-08 12:27 pm
Я скопировал профиль firefox из x86-32 windows в x64 linux, и он нормально его поднял, с расширениями даже.

Ещё удобно, что конфиги firefox лежат в распространённых форматах, json + SQLite.

Сохранение дампа памяти - плохо переносится между архитектурами, и сложнее версионируется.


Edited at 2014-03-08 12:35 (UTC)
(Ответить) (Thread)
[User Picture]From: archaicos
2014-03-08 01:11 pm
Кто-то тестировал или просто повезло. У меня перенос между двумя одинаковыми виндами тоже сработал. Но когда я ранее экспортировал/импортировал только ссылки, получилась непонятная каша.
(Ответить) (Parent) (Thread)
[User Picture]From: self_perfection
2014-03-08 04:04 pm
Приходил ко мне как-то в гости товарищ, принёсший профиль своей лисы из венды на флэшке.

С ходу под моим линухом это не завелось, что-то разъехалось в регистрах символов названий файлов в профиле. Так что не всё так радужно. Но починилось быстро, помнится достаточно было сделать lowercase всему.
(Ответить) (Parent) (Thread)
[User Picture]From: amarao_san
2014-03-08 02:00 pm
Отладка бага могла быть очень увлекательной в такой ситуации (если промахиваются по месту записи).

А ещё было не понятно, какой вариант исполняемого файла - "правильный". Помню, какой-то русификатор из-за неправильной опции глючил и починить можно было только найдя "непопорченный".
(Ответить) (Thread)
[User Picture]From: voldmar
2014-03-08 03:21 pm
Мне казалось, что из современных авторов так поступили авторы LMAX, но сейчас начал пересматривать и понял, что Java вряд ли так может сохранять состояние. (http://martinfowler.com/articles/lmax.html)

Ещё мне вспомнилась статья про забытые старые техники — http://scottlocklin.wordpress.com/2013/07/28/ruins-of-forgotten-empires-apl-languages/
(Ответить) (Parent) (Thread)
[User Picture]From: amarao_san
2014-03-08 03:36 pm
Почитал. Кроме старопесочного "склонитесь перед авторитетами старших" - большей частью странный бухтёж, который забывает про главное в коммерческом - agile (не техника программирования, а способность быстро реагировать на изменяющиеся потребности) и стоимость изменения кода.

(Ответить) (Parent) (Thread)
From: vgarnick
2014-03-09 12:50 am
Не совсем дампом прямо из памяти, но правкой исполнимого файла в те времена много чего конфигурировалось. q.exe (q editor), keyrus.com, к примеру.
(Ответить) (Thread)
From: morfizm
2014-03-09 06:55 am
Помню, когда конфигурации не так много (скажем, 1-2 числа), удобно было переименовывать бинарник в установленном формате имени и потом в run-time смотреть, с каким именем вызвали.
(Ответить) (Thread)
[User Picture]From: migmit
2014-03-10 08:28 pm
ЕМНИМЭ, релокация — не страшная весч. Даже винда (по крайней мере, старая) грузила бинарники по фиксированному адресу, так что по крайней мере в рамках одной версии системы такое должно было работать.
(Ответить) (Thread)
From: kisaiosya.ya.ru
2014-03-18 06:38 pm
Стоит изучить старые форматы Microsoft.
(Ответить) (Thread)