LINUX.ORG.RU
ФорумTalks

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

 


0

3

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

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

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

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

Тебя убивать. А эта конструкция у меня частенько появляется в несколько другом виде (в случае ошибки `goto` переходит на метку, где происходит вызов кучи `free()`, а затем уже выполняется `return ret`).

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

Оба говно. Используй стандартную идиому с goto.

OK. Ну хотя бы против goto ничего не имеете :) В отличие от некото^Wмногих.

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

На самом деле всё сильно зависит от контекста, и если это чистый C-style, то что-нибудь типичное пишется просто на уровне шаблонов:

do_part(int argc, char **argv) {
  int ret = ERR_NOERROR;

  if (argc < 3) {
    usage();
    return ERR_ARG;
  }

  if ((fd = open(argv[1], O_RDONLY)) < 0) {
    warn("…"); // #include <err.h> или макрос какой
    return ERR_OPEN;
  }

  while (…) {
    …
    if (…) {
      warn("…");
      ret = ERR_SOMERR;
      goto done;
    }
    …
  }
done:
  return ret;
}

То есть ты предлагаешь и в тривиальных случаях писать goto? Да ну нафиг.

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

void чтоли?

Упоротые животные могут проверять и void.

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

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

Оба говно.

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

Лучше, когда один. Можно два - для нормального случая и для ошибки. Но когда return'ов больше и они рассеяны по всему телу функции - за это надо наказывать.

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

Лучше, когда один. Можно два - для нормального случая и для ошибки. Но когда return'ов больше и они рассеяны по всему телу функции - за это надо наказывать.

ты не прав. Иногда полезно, учти, что pure C вообще бедный ЯП, а ты его последних фич лишаешь.

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

Нет правил, которые нельзя нарушить, имея на то веские причины.

дык и я о том. Говнокод, где Over9000 return без всякой видимой причины - говнокод. Также как и goto не на месте(а особенно вместо запятых, как неопределённый артикул «пилять» в русской речи).

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

Но когда return'ов больше и они рассеяны по всему телу функции - за это надо наказывать.

функция должна умещаться целиком на экране, тогда все return-ы будут видны, иначе это плохая негодная функция

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

функция должна умещаться целиком на экране, тогда все return-ы будут видны

тогда все return-ы будут видны

Глупости.

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

когда return'ов больше и они рассеяны по всему телу функции - за это надо наказывать.

Так 90% софта так написано, включая ядро. Значит моё утверждение что всё говно имеет какое-то обоснование :). Правда, для меня это не является большим грехом.

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

+1

лет как 10 на беллабе куски опубликованы были ,

или довыложили до полной коммилябельности либо литнегры на опеннете халтурят

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

ха ха ха

defer (golang) - вот их ответ на ловушки от ретурнов из разных мест одной функции.

мультивыходы кошернее мультувходов( анафема entry которые в этой версии ещё были вроде)

если же теор_мод_он: у функции автоматом один вход - один выход (стек гарантирует - если конечно не( set_jamp и прочии срывы стека) :) ) - так что аксиома/постулат блокового программирования - один вход один выход - у функций (втом числе и с многочислеными return'ами) автоматом.

gdb вроде способен культурно обрабатывать пожелание stop on return of func? да и вообще если иде(или что там?) не удобна зачем язык прокрустить?

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

Цифра от балды, конечно

Пойнт в том, что использование какой-то конструкции в ядре не делает автоматически эту конструкцию правильной или приемлемой.

P.S. жаль, не могу найти сейчас, как Эл Виро высказывался о cgroups.

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

скажи

ON EXIT из VB (или там только ON ERROR и эмуляция ON EXIT) - очень нравились тебе когда(предположение) ты им пользовался?

goto ниже по коду ок - а переменую селектор(перед каждым готу) что бы в месте реального выхода(уникального ретурна этой функции) видет from ведь не всегда выставляеш ведь так?

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

ха ха ха

Норкоман, уходи.

defer (golang) - вот их ответ на ловушки от ретурнов из разных мест одной функции.

Норкоман, пошел вон.

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

жаль, не могу найти сейчас, как Эл Виро высказывался о cgroups.

А что Эл Виро сказал? Спрашиваю потому что я видел этот код и интересно как другие его оценивают.

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

А что Эл Виро сказал?

Много плохих слов. Затейливо так, как он умеет.

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

мультиретурн приемлим если функция(её листинг) обозрим одним взглядом.

Что значит «одним взглядом»? Вот до тебя тут говорили «функция должна помещаться на экран». Но у меня на экране уже 70+ строк - это «обозримо одним взглядом»? А логика, реализуемая в функции - она в «одним взглядом» как-то учитывается? Мультиретурн приемлем для тривиальных функций, но общего определения тривиальности нет.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

по легенде с этой целью(обозримости) Кен Томпсон похачил ЭЛТ для вывода текста(одного потока) в две колонки.

про классификацию ситуации : да . прогер решает сам как именно кодить. если речь про кодестандарты в конторе/сообществе - то включаются соц_механизмы.

кстати как уже заметили

код(стиль) подобен и более поздним plan9 и go - что показывает , что писалось всё группой(1-5) единомышлеников.

qulinxao ★★☆
()

Ух, вот это реликвия! Эти тексты как-будто пропитаны духом старых больших машин. Пошёл изучать..

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

во-первых вам известно, во вторых тут нет детерминированого(обязательного ) следования к мозгоё-pl.

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