Начальная загрузка компилятора: почему?

Вы могли создать псевдослучайное количество Н цифры от определенного семени ("родительское число"). Затем Вы делите цифры на группы и используете их для ответа на Ваши вопросы.

Пример: N=20

-> одна цифра: сколько пропускает дополнительный переход?
-> три цифры: семя для генерации соответствующих продолжительностей каждого доступного перехода
-> шесть цифр: семя для генерации этой солнечной системы
-> десять цифр: семя для генерации новых 20 семян цифры для каждой связанной солнечной системы

Тогда рекурсивно вызывает. Каждая система (со стабильными орбитами и т.д.) сгенерирована во время 0, и необходимо будет вычислить, как это смотрит теперь .

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

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

30
задан Mark Rushakoff 29 September 2009 в 23:44
поделиться

9 ответов

Есть принцип, называемый «есть свою собачью еду». Используя инструмент, вы демонстрируете его полезность.

Часто спрашивают: «Если компилятор для языка X написан не на языке X, почему я должен рисковать его использованием?»

Это, конечно, применяется только к языкам, подходящим для области написания компиляторов.

31
ответ дан 27 November 2019 в 23:16
поделиться

There are two main advantages to bootstrapped language implementations: first, as you suggest, to take advantages of the high-level features of said language in the implementation. However, a less-obvious but no less important advantage is that it lets you customize and extend the language without dropping into a lower layer written in C (or Java, or whatever sits below the new language runtime).

Metaprogramming may not be useful for most day-to-day tasks, but there are times where it can save you a lot of duplicated or boilerplate code. Being able to hook into the compiler and core runtime for a language at a high level can make advanced metaprogramming tasks much easier.

13
ответ дан 27 November 2019 в 23:16
поделиться

It can be considered the bar that separates "toy" languages from "real" languages. If the language isn't rich enough to implement itself, it's still a toy. But this is probably an attitude from a largely bygone era, given the number of popular languages today that are implemented in C.

9
ответ дан 27 November 2019 в 23:16
поделиться

One advantage would be that developers working on the compiler would only need to know the language being compiled. Otherwise developers would need to know the language being compiled as well as the language the compiler is written in.

7
ответ дан 27 November 2019 в 23:16
поделиться

You don't bootstrap a compiler for DSL. You don't write an SQL query compiler in SQL. MATLAB might look like a general purpose language, but actually it isn't -- it is a language designed for numerical calculations.

2
ответ дан 27 November 2019 в 23:16
поделиться

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

Есть и другие способы сделать это, например, создание кросс-компилятора, в большинстве систем, которые вы никогда не необходимо иметь возможность компилировать статические языки на самом устройстве при обычном использовании (на самом деле, такие системы, как Windows, поставляются без компилятора).

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

Я думаю, что начальная загрузка языков высокого уровня в основном делается для того, чтобы продемонстрировать свои непослушные навыки программирования. 118810] вам требуется только наличие вашего собственного кода для компиляции и улучшения вашего собственного кода.

Есть другие способы сделать это, например, создание кросс-компилятора, в большинстве систем вам никогда не понадобится компилировать статические языки. на самом устройстве при обычном использовании (фактически, такие системы, как Windows, поставляются без компилятора).

Другая причина, по которой компиляторы часто загружаются, заключается в том, что им не нужно беспокоиться об ошибках в компиляторе, с которым они компилируются. Убедитесь, что ваш компилятор может быть скомпилирован сам с собой, и что вы ограничиваете комбинации ошибок, которые в противном случае могли бы появиться, если вы компилируете с другим компилятором.

Я думаю, что начальная загрузка языков высокого уровня в основном делается для того, чтобы продемонстрировать свои непослушные навыки программирования. 118810] вам требуется только наличие вашего собственного кода для компиляции и улучшения вашего собственного кода.

Есть другие способы сделать это, например, создание кросс-компилятора, в большинстве систем вам никогда не понадобится компилировать статические языки. на самом устройстве при обычном использовании (фактически, такие системы, как Windows, поставляются без компилятора).

Другая причина, по которой компиляторы часто загружаются, заключается в том, что им не нужно беспокоиться об ошибках в компиляторе, с которым они компилируются. Убедитесь, что ваш компилятор может быть скомпилирован сам с собой, и что вы ограничиваете комбинации ошибок, которые в противном случае могли бы появиться, если вы компилируете с другим компилятором.

Я думаю, что начальная загрузка языков высокого уровня в основном делается для того, чтобы продемонстрировать свои непослушные навыки программирования. 118810] подобно созданию кросс-компилятора, в большинстве систем вам никогда не понадобится компилировать статические языки на самом устройстве при обычном использовании (на самом деле, такие системы, как Windows, поставляются без компилятора).

Другая причина, по которой компиляторы часто загружаются, такова что им не нужно беспокоиться об ошибках в компиляторе, с которым они скомпилированы. Убедитесь, что ваш компилятор может быть скомпилирован сам с собой, и что вы ограничиваете комбинации ошибок, которые в противном случае могли бы появиться, если вы компилируете с другим компилятором.

Я думаю, что начальная загрузка языков высокого уровня в основном делается для того, чтобы продемонстрировать свои непослушные навыки программирования. 118810] подобно созданию кросс-компилятора, в большинстве систем вам никогда не понадобится компилировать статические языки на самом устройстве при обычном использовании (на самом деле, такие системы, как Windows, поставляются без компилятора).

Другая причина, по которой компиляторы часто загружаются, такова что им не нужно беспокоиться об ошибках в компиляторе, с которым они скомпилированы. Убедитесь, что ваш компилятор может быть скомпилирован сам с собой, и что вы ограничиваете комбинации ошибок, которые в противном случае могли бы появиться, если вы компилируете с другим компилятором.

Я думаю, что начальная загрузка языков высокого уровня в основном делается для того, чтобы продемонстрировать свои непослушные навыки программирования. 118810]

Другая причина, по которой компиляторы часто загружаются, заключается в том, что им не нужно беспокоиться об ошибках в компиляторе, с которым они компилируются. Убедитесь, что ваш компилятор может быть скомпилирован сам с собой, и что вы ограничиваете комбинации ошибок, которые в противном случае могли бы появиться, если вы компилируете с другим компилятором.

Я думаю, что начальная загрузка языков высокого уровня в основном делается для того, чтобы продемонстрировать свои непослушные навыки программирования. 118810]

Другая причина, по которой компиляторы часто загружаются, заключается в том, что им не нужно беспокоиться об ошибках в компиляторе, с которым они компилируются. Убедитесь, что ваш компилятор может быть скомпилирован сам с собой, и что вы ограничиваете комбинации ошибок, которые в противном случае могли бы появиться, если вы компилируете с другим компилятором.

Я думаю, что начальная загрузка языков высокого уровня в основном делается для того, чтобы продемонстрировать свои непослушные навыки программирования. 118810]

3
ответ дан 27 November 2019 в 23:16
поделиться

У начальной загрузки есть еще одно преимущество: если у вас хороший язык, вы можете сэкономить время, написав свой компилятор на <вставьте язык сюда>, чем, скажем, на C. Например, был написан компилятор C # на C ++, но теперь они переписывают его на C #, что позволяет им (среди прочего) использовать фреймворк потоковой передачи из CLR вместо того, чтобы использовать свой собственный на C ++ (и следовать примеру ребят из Mono, продвигая разумные , Mono оказался в лучшем положении, поскольку мог сказать, что наш компилятор C # на самом деле написан на C #).

2
ответ дан 27 November 2019 в 23:16
поделиться

Есть несколько причин, по которым вы можете захотеть это сделать (теоретически):

  1. Ваш компилятор генерирует больше оптимизированный код по сравнению с другими компиляторами на платформе начальной загрузки.
  2. Ваш компилятор генерирует более правильный кода, чем другие компиляторы на платформа бутстрапа.
  3. Вы эгоистичный придурок, который убежден, что одно из вышеперечисленных правда, даже если это не так.
  4. Компилятор недоступен для ваша платформа (это был GCC оригинальная логика, потому что многие платформы не имели компилятора C в тот же день).
  5. Вы хотите доказать, что ваш компилятор может справиться с этим (в конце концов, это довольно хороший тест компилятора).
1
ответ дан 27 November 2019 в 23:16
поделиться
[

] Компиляторы решают широкий спектр нетривиальных задач, включая манипулирование строками, работу с большими структурами данных, взаимодействие с операционной системой. Если Ваш язык предназначен для решения этих задач, то написание компилятора на Вашем языке демонстрирует эти возможности. Кроме того, это создает экспоненциальный эффект, поскольку по мере того, как Ваш язык включает в себя больше возможностей, у Вас появляется больше возможностей, которые Вы можете использовать в компиляторе. Если Вы реализуете какие-либо уникальные возможности, которые сделают написание компилятора более легким, у Вас есть эти новые инструменты для реализации еще большего количества возможностей.[

] [

]Однако, если Ваш язык не предназначен для решения тех же проблем, что и компиляция, то загрузка только соблазнит Вас загромождать Ваш язык возможностями, которые связаны с компиляцией, но не с Вашей целевой проблемой. Самокомпиляция с Matlab или SQL была бы смешной; у Matlab нет причин включать сильные функции манипулирования строками, а у SQL нет причин поддерживать генерацию кода. Получившийся в результате язык был бы ненужным и загроможденным.[

] [

]Стоит также отметить, что интерпретируемые языки - это немного другая проблема, и к ней следует относиться соответствующим образом.[

].
3
ответ дан 27 November 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: