LINUX.ORG.RU
ФорумTalks

Опубликован код первого компилятора для языка Си

 


0

3

Копипаста с опеннета:

Открыт доступ к исходным текстам первого компилятора для языка Си, написанного Дэнисом Ритчи в 1972 году для платформы PDP-11. Код был обнаружен при разборе архивных магнитных лент в рамках инициированной задолго до смерти Дэниса Ритчи инициативы по поиску и восстановлению первых наработок, связанных с языком Си. Код компилятора написан на первом диалекте языка Си, который сильно отличается от современного Си и уже не поддерживается ни одним из компиляторов

http://www.opennet.ru/opennews/art.shtml?num=36312

★★★★★
Ответ на: комментарий от reserved

Программист на ассемблере может написать компилятор на любом языке на ассемблере.

unsigned ★★★★
()

Но если первый компилятор Си был написан на Си, то это не первый компилятор Си.

CYB3R ★★★★★
()

это примерно как найти первую библию

kto_tama ★★★★★
()
Ответ на: комментарий от CYB3R

Чуваки пытаются нас убедить в том, что начинали с нуликов и единичек.
Возможно и такое, но это будет veeeeeeeeeeeeery slooooooooooowly

Deleted
()
Ответ на: комментарий от Deleted

А на самом деле никаких нулей и единичек нет, а компьютер работает электричеством.

abraziv_whiskey ★★★★★
()

этот код был давно доступен, я даже кидал на ЛОР ссылку когда-то, новость от слоупоков

wota ★★
()
Ответ на: комментарий от buddhist

Прошу прощения, вы сишник?

Я сишник. Код по нынешним времена таки да, говно - но это не код нынешних времен. В Си тогде не было ни структур, ни препроцессора, так что этот компилятор - ассемблерная программа по сути (причем на корявом ассемблере - без макросов).

Хотя за несколько точек возврата из функции и тогда, и сейчас нужно наказывать.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Код вполне похож на то, что сейчас можно увидеть в Plan 9 и, немножко, BSD. И на то, к чему стремится Go.

В Си тогде не было ни структур, ни препроцессора

С этой точки зрения — да, говно.

buddhist ★★★★★
()
Ответ на: комментарий от reserved

Мдаа... по нынешним меркам тот ещё говнокод.

Сказал «эксперт»...

kuzulis ★★
()
Ответ на: комментарий от buddhist

Код вполне похож на то, что сейчас можно увидеть в Plan 9

Стилем имен, отступами - да. Но extern в каждой функции, goto назад, goto в середину switch, даже названия файлов - это Ъ-винтаж, такого нигде нет.

tailgunner ★★★★★
()
Ответ на: комментарий от nerdogeek

Сначала ждем тот код, который у него на Симуле медленно работал.

buddhist ★★★★★
()
Ответ на: комментарий от tailgunner

Хотя за несколько точек возврата из функции и тогда, и сейчас нужно наказывать.

так же удобнее :)

Harald ★★★★★
()
waste()		/* waste space */
{
	waste(waste(waste),waste(waste),waste(waste));
	waste(waste(waste),waste(waste),waste(waste));
	waste(waste(waste),waste(waste),waste(waste));
	waste(waste(waste),waste(waste),waste(waste));
	waste(waste(waste),waste(waste),waste(waste));
	waste(waste(waste),waste(waste),waste(waste));
	waste(waste(waste),waste(waste),waste(waste));
	waste(waste(waste),waste(waste),waste(waste));
}

Бу!

Dragon59 ★★
()
Ответ на: комментарий от tailgunner

Хотя за несколько точек возврата из функции и тогда, и сейчас нужно наказывать.

Реквестую пруф линк с объяснением почему.

joy4eg ★★★★★
()

Дауж. Тряхнули пыльными антресолями. Прикольно.

Я тут недавно (на антресолях) нашел бабину от ленточного магнитофона. Да и сам маг удалось запустить. Ламповый такой. Большоооой!
А на ленте дочка стихшки читает. Ей тогда было полтора года, а сейчас 33 :)
Прикольно. Оцифровал, на диск записал и дочке подарил. :)

vada ★★★★★
()

А всё-таки, где код того компилятора, который собирал этот компилятор?

Xellos ★★★★★
()
Ответ на: комментарий от tailgunner

Представь, что тебе нужно проверить возвращаемое значение функции.

И чем же мне помешают несколько точек возврата?

if ((i = fun()) == 1) ...

Dragon59 ★★
()
Ответ на: комментарий от Dragon59

И чем же мне помешают несколько точек возврата?

А ты правда не понял, что возвращаемое значение нужно проверить в самой функции (в операторе return)?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

А ты правда не понял, что возвращаемое значение нужно проверить в самой функции (в операторе return)?

Кто сказал? Кто мне помешает проверять возвращаемой значение в месте вызова? Или, если функция часто используется, написать обёртку? Твои фантазии?

Dragon59 ★★
()
Ответ на: комментарий от Dragon59

А ты правда не понял, что возвращаемое значение нужно проверить в самой функции (в операторе return)?

Кто сказал?

Я сказал.

Кто мне помешает проверять возвращаемой значение в месте вызова?

Здравый смысл. Если функция возвращает странное значение, значит, что-то не так с контекстом. Этот контекст доступен только в ней самой - следовательно, мы должны смотреть на return.

Твои фантазии?

Прежде чем спорить, сделай попытку понять. Если ты способен на такую попытку.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Хотя за несколько точек возврата из функции и тогда, и сейчас нужно наказывать.

Это почему же?

cruxish ★★★★
()
Ответ на: комментарий от tailgunner

Представь, что тебе нужно проверить возвращаемое значение функции.

Какой по-вашему вариант лучше?

int func () {
    // 2-3 lines of code
    if (/*some check*/) return ERROR1;

    // 2-3 lines of code
    if (/*another check*/) return ERROR2;

    // 2-3 lines of code
    if (/*one more check*/) return ERROR3;

    // 2-3 lines of code
    if (/*the last check*/) return ERROR4;

    // 10-30 lines of code

    return SUCCESS;
}
int func () {
    int ret = SUCCESS;

    // 2-3 lines of code
    if (/*some check*/)
        ret = ERROR1
    else {
        // 2-3 lines of code
        if (/*another check*/)
            ret = ERROR2;
        else {
            // 2-3 lines of code
            if (/*one more check*/)
                ret = ERROR3;
            else {
                // 2-3 lines of code
                if (/*the last check*/)
                    ret = ERROR4;
                else {
                    // 10-30 lines of code
                }
            }
        }
    }

    return ret;
}
pv4 ★★
()
Ответ на: комментарий от tailgunner

Чем return val, где val будет несколько раз за функцию изменён идеологически отличается от нескольких return?

PolarFox ★★★★★
()
Ответ на: комментарий от pv4

в первом случае задолбаешься искать и изменять возвраты, если тебе ВНЕЗАПНО потребуется изменить код. Правда, если ты всегда пишешь правильно и никогда не меняешь - мои доводы ноль.

rikardoac
()
Ответ на: комментарий от cruxish

Что ты предложишь взамен?

Для тривиальных функций я сделаю исключение.

tailgunner ★★★★★
()

Пусть они не врут. Первый компилятор си был написан на фортране. Инфа 146%.

yvv ★★☆
()

первого компилятора для языка Си

Код компилятора написан на первом диалекте языка Си

Эээ? Где логика?

AlexCones ★★★
()

Код компилятора написан на первом диалекте языка Си, который сильно отличается от современного Си и уже не поддерживается ни одним из компиляторов

А как его компилировали, блин!?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от pv4

Первый, ясен пень!

Второй вариант — жуткий быдлокод. На крайняк можно было бы макрос определить вида

#define retA(var) do{ret = var; goto eof;}while 0
а перед `return` поставить метку `eof:`.

Но таки первый вариант в данном случае красивей.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от pv4

Второй вариант лучше, потому что завтра мы захотим не возвращать ret сразу, а ещё немного над ним поиздеваться. Ну а отсутствие elsif... ну что поделаешь, судьба.

Xellos ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.