Тема открыта по просьбе жителей Королевства и посвящена обсуждению вопросов оптимизации кода. Выставляйте свои лучшие и худшие тексты и не стесняйтесь их обсуждать. В споре рождается истина. Или, по крайней мере, оптимизация.
Всего в теме 737 сообщений
Добавить свое сообщение
Отслеживать это обсуждение 
- Тестирование проекта. Отладка.
- Подводные камни
- Централизованная обработка ошибок
- Бета-тестирование
- Давайте учиться на ошибках.
- Почему программисты допускают ошибки?
- Автоматизированные тесты для GUI
- О системах контроля ошибок
№ 277 08-09-2005 00:49 |  |
Ответ на »сообщение 274« (J.K.J.)
___________________________
Вы сами признали, что компилятор написан не на самой Delphi, т.е. фактически подтвердили мои слова, но при этом что-то там говорите про историю :). Компилятор - это самое главное.
Компилятор в современных средах разработки уже давно перестал быть самым главным. Поскольку никакой компилятор не позволит Вам быстрее разработать программу. Почитайте обсуждение внимательнее (с чего все начиналось).
Если компилятор для Delphi 1 был написан на самой Delphi 1 - значит я не прав. Если нет - значит это Вы наводите "исторический туман" :)
Ну давайте посмотрим, кто быстрее "напишет" программу для просмотра БД - я на Delphi или Вы на Borland C++ 5.5 (у которого есть только компилятор, но зато какой крутой, а ведь компилятор - это главное). Естественно не прибегая к использованию библиотек, не входящих в поставку продукта.
№ 276 07-09-2005 16:06 |  |
Ответ на »сообщение 275« (Unkas)
___________________________
Прочитал все. Понял, что безнадежно туп :))). Никак не могу понять:
Может быть, это будет понятно? См. ниже.
Дано: компилятор с D на X, реализованный на D; D<D>X
Получить: компилятор с D на X, реализованный на X; D<X>X
Общий вид T-диаграмм, применяемых для описания раскрутки компиляторов, имеет вид:
S - T
|
I
где S – входной язык, T – целевой язык, I – язык реализации.
Будем записывать это в виде S<I>T.
Введем следующие условные обозначения:
D = Delphi
P = Turbo Pascal
X = x86 (бинарный код процессора x86)
Решение:
1. Cтроим компилятор с D на X, реализованный на P.
2. Транслируем этот компилятор имеющимся компилятором с P на X, реализованным на X.
3. Компилятор c D на X, реализованный на P, готов.
4. Транслируем компилятор с D на X, реализованный на D, полученным компилятором D<P>X.
5. Требуемый компилятор D<X>X готов.
В виде T-диаграмм выглядит так:
D - X D - X
| |
D D – X X
|
P
При стыковки T-диаграмм между собой совмещают левое крыло (входной язык) с основанием левого T-блока (языком его реализации), а правое крыло (целевой язык) с основанием правого T-блока (языком реализации этого блока). Слева размещают то, с чего начинают, а справа – то, что требуется получить.
Формулой записывается так: D<D>X + D<P>X = D<X>X
№ 275 07-09-2005 12:43 |  |
>>>Ответ на »сообщение 269« (Unkas)
>>>Вы все обсуждение читаете или только последние
>>>два сообщения?
Прочитал все. Понял, что безнадежно туп :))).
Никак не могу понять:
Чем можно откомпилировать исходный текст самого компилятора, если исполнительного кода компилятора еще не существует: мы еще только хотим его получить.
№ 274 07-09-2005 12:18 |  |
>>>Ответ на »сообщение 253« (J.K.J.)
>>>Delphi 1 была написана на Delphi 1. В 90-е гг.
>>>это был довольно-таки общеизвестный факт.
>>>Единственное, что там было написано не на
>>>самой Delphi, это естественно, компилятор. Но,
>>>видимо, современная молодежь совсем не любит
>>>учить историю :-(
Что-то я Ваши "намеки" не пойму.
Вы сами признали, что компилятор написан не на самой Delphi, т.е. фактически подтвердили мои слова, но при этом что-то там говорите про историю :). Компилятор - это самое главное. Если компилятор для Delphi 1 был написан на самой Delphi 1 - значит я не прав. Если нет - значит это Вы наводите "исторический туман" :)
P.S. А про молодежь - аккуратнее. Еще неизвестно, кто из нас моложе :).
№ 273 07-09-2005 07:14 |  |
Ответ на »сообщение 272« (Ким)
___________________________
Вы очень узко понимаете оптимизацию.
№ 272 07-09-2005 04:11 |  |
Как я вижу, тема оптимизации незаметно выродилась в обсуждение истоков и перспектив сред разработки и языков программирования. В принципе оно и понятно, в Delphi не такой уж и большой простор для оптимизации, чаще всего эта оптимизация сводится к устранению типичных глупостей, вроде наращивания строки в цикле по одному символу без предварительного выделения памяти :).
В отличии от того же С, Delphi почти не позволяет влиять на генерируемый код, если только не прибегать к полузаконным ухищрениям или ассемблеру. Таким образом, оптимизация как таковая возможна лишь на уровне алгоритма, который мало зависит от применяемого языка. В итоге получается, что по вопросу оптимизации кода в Delphi обсуждать вроде бы и нечего - нужно обсуждать оптимизацию алгоритмов в целом, без привязки к чему-либо. Так-то вот.
Извините, если отклонился от вновь предложенной темы.
№ 271 07-09-2005 02:20 |  |
Еще прикольно сделали в Сквике: сначала сделали подмножество солтока, компилируемое в си, а потом на нем откомпилировали интерпретатор:
http://users.ipa.net/~dwighth/squeak/oopsla_squeak.html
...
Compile the interpreter to make it practical:
*Design a translator from a subset of Smalltalk-80 to C.
*Implement this translator.
*Translate the virtual machine to C and compile it.
*Write a small C interface to the Mac OS.
*Run the compiled interpreter with the new image.
...
Вобщем и целом, конечно нельзя откомпилировать первую версию компилятора в первый раз не используя ничего кроме этого компилятора.
(Другое дело, что это можно сделать вручную или с помощью другого языка высокого уровня.)
Конечно всегда сохранится некоторая ниша для тех, кто будет работать на машкоде и низкоуровневых языках (хотя бы программисты кодогенераторов) но эта ниша будет сокращаться.
Довольно интересные размышления здесь (на каком языке программирования мы будет писать через 100 лет):
http://www.paulgraham.com/hundred.html
№ 270 06-09-2005 12:21 |  |
Ответ на »сообщение 269« (Unkas)
___________________________
Вы все обсуждение читаете или только последние два сообщения?
№ 269 06-09-2005 12:03 |  |
>>>Чего-то я не понимаю. Чисто теоретически,
>>>компилятор языка можно написать на любом
>>>языке, если в нем есть функция вывода в файл.
>>>Ведь нужно всего лишь создать exe, не так ли?
>>>И практически тоже.
Я тоже чего-то не понимаю.
Допустим я написал на языке ABC исходный текст компилятора для этого самого языка (ABC).
А теперь объясните, как я могу откомпилировать этот текст, чтобы получить исполнительный код написанного компилятора? Ведь исполнительного кода компилятора у меня еще нет - он существует только в виде исходного текста на языке ABC.
№ 268 06-09-2005 08:02 |  |
Ответ на »сообщение 266« ()
___________________________
Чего-то я не понимаю. Чисто теоретически, компилятор языка можно написать на любом языке, если в нем есть функция вывода в файл. Ведь нужно всего лишь создать exe, не так ли?
И практически тоже.
А если так, то что особенного в том, что Delphi написана на Delphi?
В том, что если у нас есть только dcc32.exe, мы не можем сказать, что у нас есть среда разработки
Далее просто компилятор ПОМ напишут на Delphi, а далее на самом ПОМ можно его же (ПОМ) и развивать.
О чем и речь. Ранее поднимался вопрос о том, что кто-то должен делать ПОМ и что это должен быть программист, знающий низкоуровневое программирование. Пример Delphi показывает, что это, в принципе, нужно только для разработки компилятора. А дальше - все намного проще.
Добавить свое сообщение
Отслеживать это обсуждение 
Дополнительная навигация: |
|