Code WTF

Jun 23, 2007 12:23

Набрёл случайно на community code_wtf. Особенно интересным оно мне не показалось, но вспомнил о замечательном WTF, который лично автор этих строк когда-то нашёл в boot-code нашей системы, и потом долго и с воплями бегал по конторе, всем показывая. Код, кстати не наш, а IBM...( Read more... )

Leave a comment

Comments 17

Давненько я не брал в руки С syarzhuk August 29 2007, 23:27:13 UTC
0xa и 0xA - это одно и то же?
Код глючной, конечно, но язык, который позволяет к символу прибавить число без явного преобразования типов, сам на такое наталкивает. И не надо отмазываться, что язык писался давным-давно, когда компьютеры были большими. В том же Паскале пришлось бы писать что-то вроде if (in (['A'..'F']+['a'..'f'])) then rc = Chr(Asc(in) + Asc('A') - 10 )

Reply

Re: Давненько я не брал в руки С kot_ivanovich August 30 2007, 04:46:06 UTC
0xa и 0xA - это одно и то же?

А чего бы я иначе подпрыгивал?

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

Авторы языка не виноваты, что язык приобрёл такую дикую популярность... Они, по сути, макроассемблер для PDP-11 писали... И очень неплохой у них макроассемблер получился... А то, что сейчас на нём все и пишут, а красоты типа Algol-68, Simula etc. - более или менее забыты, наверное, говорит и о том, что именно этот язык и был нужен человечеству...

В том же Паскале пришлось бы писать что-то вроде if (in (['A'..'F']+['a'..'f'])) then rc = Chr(Asc(in) + Asc('A') - 10 )

На Паскале пришлось бы писать что-то вроде if (_in in [10..16])) then rc = Chr(Asc('A') +_in - 10 );

Reply

Re: Давненько я не брал в руки С syarzhuk August 30 2007, 12:29:38 UTC
А, ну да. Это меня С'шное объявление char in смутило.

Вообще, большинство проблем с С и С-подобными языками идут из нескольких давно известных мест:
- необходимость явно писать break после switch;
- дурацкая ситуация, когда для сравнения используется не знак равенства, а что-то ещё;
- дурацкая ситуация, когда результат присваивания сам является выражением, которое можно использовать дальше. особенно вкупе с предыдущим пунктом. можно было явно оговорить одно исключение вроде a=b=c=0. , но во всех остальных случаях запретить. Хочешь использовать результат присваивания - будь добр, разбей на две строчки
- и конечно, совместимость типов.

Reply

Re: Давненько я не брал в руки С kot_ivanovich August 31 2007, 06:53:36 UTC
  1. необходимость явно писать break после switch - так я же говорю, Керниган & Риччи и не пытались писать язык высокого уровня, а для макроассемблера это вполне естественный подход... Они не виноваты, что всем так понравилось остальное, что и эта глупость (для языка высокого уровня) застряла.
  2. дурацкая ситуация, когда для сравнения используется не знак равенства, а что-то ещё - вопрос привычки.
  3. дурацкая ситуация, когда результат присваивания сам является выражением - тут трудно не согласиться.
  4. и конечно, совместимость типов - не понял. Я, кажется, не видел языков, в которых не было бы какой-нибудь совместимости типов (например, можно присвоить int to double). Трактовка char как целых мне представляется скорее изящной, enum как целых - скорее нет, но тут можно долго дискутировать....

Reply


Жесть.... В code_wtf не показывали? )) poige October 8 2007, 03:20:55 UTC
 

Reply

Re: Жесть.... В code_wtf не показывали? )) kot_ivanovich October 8 2007, 03:31:39 UTC
Поленился... А, кстати, у меня чего-то русский отстаёт от современного: жесть это в переводе на литературный как будет?

Reply

> "жесть" это в переводе на литературный как будет? poige October 8 2007, 06:17:47 UTC
Ну трудно сказать точно, ибо мне тоже никто перевода не показывал, но в данном случае это значило «жёсткий прикол». :) «прикол» переводить не требуется? :)

Reply

Re: > "жесть" это в переводе на литературный как будет? kot_ivanovich October 8 2007, 06:20:57 UTC
Нет, спасибо :)

Reply


Leave a comment

Up