Автор Тема: Нестандартный и непереносимый диалект языка Паскаль  (Прочитано 3337 раз)

pygubanov

  • Newbie
  • *
  • Сообщений: 21
    • Просмотр профиля
Увидел новость на хабре "GCC 4.8 завершил миграцию на C++", в которой  упоминается, что первая версия GCC была написана на непереносимом диалекте языка Паскаль.
Нестандартный и непереносимый диалект языка Паскаль что это такое?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Увидел новость на хабре "GCC 4.8 завершил миграцию на C++", в которой  упоминается, что первая версия GCC была написана на непереносимом диалекте языка Паскаль.
Нестандартный и непереносимый диалект языка Паскаль что это такое?
Это такой паскаль который:
a) не стандартный
b) не переносимый (заточен только под одну ось например)

:-)

Ну, скажем любой турбопаскаль является не стандартным паскалем, ибо не реализует стандарт (ни ISO 7185:1983 ни ISO 7185:1990 ни ISO/IEC 10206).

Реализаций паскаля в 80-х была тонна различных. Был распространен не меньше чем Си.
Y = λf.(λx.f (x x)) (λx.f (x x))

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Увидел новость на хабре "GCC 4.8 завершил миграцию на C++", в которой  упоминается, что первая версия GCC была написана на непереносимом диалекте языка Паскаль.
Нестандартный и непереносимый диалект языка Паскаль что это такое?

А где эту версию написанную на паскале можно скачать? Хотелось бы посмотреть.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Увидел новость на хабре "GCC 4.8 завершил миграцию на C++", в которой  упоминается, что первая версия GCC была написана на непереносимом диалекте языка Паскаль.
Нестандартный и непереносимый диалект языка Паскаль что это такое?

А где эту версию написанную на паскале можно скачать? Хотелось бы посмотреть.

На самом деле не все так просто. История на самом деле такова: GNU нужен был компилятор, и Столлман искал где бы его надыбать с минимальными затратами усилий и времени. Вначале он нашел VUCK (Free University Compiler Kit), написал автору, а автор говорит, что оно конечно все свободное в этом ките, но только не компилятор. После чего, Столлман понял, что без программирования нужный компилятор для GNU добыть не выйдет:

Shortly before beginning the GNU project, I heard about the Free University
Compiler Kit, also known as VUCK. (The Dutch word for "free" is written
with a V.) This was a compiler designed to handle multiple languages,
including C and Pascal, and to support multiple target machines. I wrote to
its author asking if GNU could use it.

He responded derisively, stating that the university was free but the compiler
was not. I therefore decided that my first program for the GNU project
would be a multi-language, multi-platform compiler.

Надеясь все же не писать компилятор целиком, РМС добыл исходники компилятора Pastel - многоплатформенного компилятора писаного на системно-расширенном паскале, и компилирующий его же. РМС дописал туда фронтенд для Си, и начал портировать на моторолу 68k. И все бы хорошо, но оно оказалось дюже жручим - оно жрало стек (хотело его мегабайтами, а в распоряжении на юниксе что работал на этой моторолле было всего лишь 64Кб стека доступно), оно вначале парсило код целиком, строило AST и затем по этому AST генерило цепочку инструкций, при этом, память не освобождалась (да, паскалисты походу не любят работать с памятью сами - нужен сбощик мусора! :-) )

Hoping to avoid the need to write the whole compiler myself, I obtained the
source code for the Pastel compiler, which was a multi-platform compiler
developed at Lawrence Livermore Lab. It supported, and was written in,
an extended version of Pascal, designed to be a system-programming
language. I added a C front end, and began porting it to the Motorola
68000 computer. But I had to give that up when I discovered that the
compiler needed many megabytes of stack space, and the available 68000
Unix system would only allow 64k.

I then realized that the Pastel compiler functioned by parsing the entire
input file into a syntax tree, converting the whole syntax tree into a chain
of "instructions", and then generating the whole output file, without ever
freeing any storage.

Собственно вот что писал Столлман об этом в феврале 1986 года (за год до первого какого-то релиза GCC):
...
Although I have a portable C and Pascal compiler, it has a serious
drawback: it is a very large program, and intrinsically cannot be made
smaller.  It is also very hard to bootstrap.

The problem is that most of the compiler is written in Pastel, a
super-hairy extended Pascal, and it is also the sole compiler for that
language.  To make it smaller, we must eliminate the hair needed to
compile Pastel; then we will not be able to compile Pastel, so it must
all be rewritten into C.

Так, что понял РМС, что писать компилятор таки придется самому, с нуля. Чем он и занялся:
At this point, I concluded I would have to write a new
compiler from scratch. That new compiler is now known as GCC; none of the
Pastel compiler is used in it, but I managed to adapt and use the C front
end that I had written.

Ну и наконец в марте 1987 года вышла первая бета gcc, который был сразу полностью писан на Си, нормально компилировал сам себя и emacs:
Date: Sun, 22 Mar 87 10:56:56 EST
   From: rms (Richard M. Stallman)

   The GNU C compiler is now available for ftp from the file
   /u2/emacs/gcc.tar on prep.ai.mit.edu.  This includes machine
   descriptions for vax and sun, 60 pages of documentation on writing
   machine descriptions (internals.texinfo, internals.dvi and Info
   file internals).

   This also contains the ANSI standard (Nov 86) C preprocessor and 30
   pages of reference manual for it.

   This compiler compiles itself correctly on the 68020 and did so
   recently on the vax.  It recently compiled Emacs correctly on the
   68020, and has also compiled tex-in-C and Kyoto Common Lisp.
   However, it probably still has numerous bugs that I hope you will
   find for me.

   I will be away for a month, so bugs reported now will not be
   handled until then.

   If you can't ftp, you can order a compiler beta-test tape from the
   Free Software Foundation for $150 (plus 5% sales tax in
   Massachusetts, or plus $15 overseas if you want air mail).

   Free Software Foundation
   1000 Mass Ave
   Cambridge, MA  02138

Так что gcc был таки сразу писан на Си.

Ссылки:
http://gcc.gnu.org/wiki/History
http://web.cecs.pdx.edu/~trent/gnu/bull/01/bull01.txt
« Последнее редактирование: Март 25, 2013, 12:22:34 am от valexey_u »
Y = λf.(λx.f (x x)) (λx.f (x x))