?

Log in

No account? Create an account
когда надоело подчеркивание (программистское) - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

когда надоело подчеркивание (программистское) [ноя. 4, 2011|02:54 am]
Anatoly Vorobey
(эта запись будет интересна лишь программистам, знающим C)

gaal обратил мое внимание на потрясающую особенность C-кода, на котором написаны части языка Go (например, рантайм-поддержка). Кто пишет Go, нужды объяснять нет, думаю.

Вот, например:
int32
runtime·funcline(Func *f, uintptr targetpc)
{

или:

        if(debug && !runtime·panicking)
                runtime·printf("funcline start pc=%p targetpc=%p line=%d tab=%p+%d\n",
                        pc, targetpc, line, p, (int32)f->pcln.len);
        for(;;) {

Вот что вот это такое, это "runtime·printf", например? Да-да, вы правильно углядели, в середине там не ASCII-символ. Это юникодный символ U+00B7 MIDDLE DOT, если что.

Это не какая-то специальная нестандартная директива или ключевое слово. Это просто часть идентификатора, который, оказывается, в наше время в C (в C, заметьте! Не в каком-нибудь там C++!) может быть юникодным. В стандарте C99 есть приложение D, которое описывает полный набор законных юникодных символов в идентификаторах. Этот набор включает в себя U+00B7 MIDDLE DOT, а также много других полезных символов и целых алфавитов; и русский алфавит, и ивритский, например, целиком туда уместились.

Вот живешь так, живешь, а тут оказывается официально можно русские имена переменным в C давать. Уже 10 лет причем. А я бы и не знал, если бы не авторы языка Go, которым, видимо, ну очень надоело нижнее подчеркивание.
СсылкаОтветить

Comments:
Страница 1 из 2
<<[1] [2] >>
[User Picture]From: alta_voce
2011-11-04 01:02 am
Хмм, мне кажется, я это давно знала.
(Ответить) (Thread)
[User Picture]From: niobium0
2011-11-04 01:26 am

круто! :)

#define цел int
#define коль if
#define доколь while
#define уменябудетсвойсипласплассблекджекомишлюхами 1
(Ответить) (Thread)
[User Picture]From: meshko
2011-11-04 01:49 am

Re: круто! :)

Ну, был же Русский Алгоритмический Язык. Начать Созидание, Кончить Созидание.
(Ответить) (Parent) (Thread)
[User Picture]From: spamsink
2011-11-04 01:27 am
Осторожно, ящик Пандоры открывается...
(Ответить) (Thread)
[User Picture]From: meshko
2011-11-04 01:50 am

+1

Голосую за немедленное удаление поста.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: ygam
2011-11-04 02:28 am
В Джаве и Сишарпе это уже давно.
(Ответить) (Thread)
[User Picture]From: eldarm
2011-11-04 02:36 am
К сожалению, использование нестандартных символов - это такая задница... Надо сохрянать в UTF-8, и прочее. Поэтому, увы, пока все это всерьез не работает. Поскольку серьезный програмиист готов при необходимости ("фикс это дерьмо поскольку мы теряем пользвателей на миллион баксов в десять минут!!!") программу чем угодно править, хоть vim'ом, а что угодно unicode еще не поддерживает.
(Ответить) (Parent) (Thread) (Развернуть)
From: zhengxi
2011-11-04 02:52 am
Обратил внимание на юникодные символы, то даже не подумал, что это есть в стандарте.

Те C и ASM файлы в исходниках Go, где применяются идентификаторы с unicode, компиляются не gcc, а их собственным компилятором C (8c,6c,5c) и ассемблером, которые все из себя нестандартые.
(Ответить) (Thread)
[User Picture]From: msh
2011-11-04 03:42 am
А U+1F4A9 использовать можно? Мне бы пригодился.
(Ответить) (Thread)
[User Picture]From: mff
2011-11-04 07:33 am
LOL
(Ответить) (Parent) (Thread)
[User Picture]From: vitaly_il
2011-11-04 05:04 am
совсем уже хотел было прокомментировать "нету их и все разрешено", но потом прочитал след. абзац про то что этому стандарту уже 10 лет :-)
интересно, не знал.
(Ответить) (Thread)
[User Picture]From: toothedgoo
2011-11-04 06:13 am
Отвратительно же. Столь же отвратительно, как и 1 и l, отличающиеся одним пикселом.
(Ответить) (Thread)
[User Picture]From: eisenberg
2011-11-04 09:25 am
Как c и с, не отличающиеся вообще ни одним.
(Ответить) (Parent) (Thread)
[User Picture]From: greena
2011-11-04 07:01 am
Все, окончательно перевожу себя в разряд динозавров.
(Ответить) (Thread)
[User Picture]From: beldmit
2011-11-04 07:52 am
Куда катится этот мир.

Я до сих пор стараюсь файлы по-русски не называть, а тут ТАКОЕ!
(Ответить) (Thread)
[User Picture]From: bolk
2011-11-04 09:59 am
Почему нет?
(Ответить) (Parent) (Thread)
[User Picture]From: egorfine
2011-11-04 09:13 am
Ну и в самом деле - как такой код править vim'ом? Как прогонять через ctags? Оно может и поддерживается, но какой практический смысл?...
(Ответить) (Thread)
From: triampurum
2011-11-04 09:23 am
http://vimdoc.sourceforge.net/htmldoc/digraph.html
практический смысл: меньше места визуально на экране занимает, чем подчеркивание, выглядит чище.
(Ответить) (Parent) (Thread)
From: triampurum
2011-11-04 09:32 am
вообще, если вспомнить, что эти люди придумали юникод, их любовь к юникодным символам становится более понятной :)
(Ответить) (Thread)
[User Picture]From: bolk
2011-11-04 09:59 am
Почему «язык С»? С чем? «Си» же. И кроме нижнего подчёркивания какое ещё бывает? Среднее? Верхнее?
(Ответить) (Thread)
From: omened_drunkard
2011-11-04 08:30 pm
«Язык С», конечно, идиотизм :-)
Но вот знак называется нижним подчеркиванием, по-другому люди путают и переспрашивают. Почему он так называется, писал Лебедев, но это и не важно. Вам ведь не мешает отсутствие «Мертвого журнала» называть этот сайт «Живым журналом», например.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: auto194419
2011-11-04 11:01 am
не совсем в тему - а не в курсе случайно, когда эти неприятные люди сделают go app engine sdk for windows?! для питона он давно есть, а для go - сосаети, как говорил один мой знакомый.
(Ответить) (Thread)
From: master_frenzy
2011-11-04 05:04 pm
Не раньше чем появится Go версии 1.
(Ответить) (Parent) (Thread)
[User Picture]From: tat_ti
2011-11-04 04:57 pm
Угу, яблочко юникодное, с которого началось грехопадение.
Сначала _ на точку_которая_не_точка заменят, а в конце рыдаем над:
Сообщить("Здравствуй, Мир!");

Пример функции, возвращающей квадрат числа:

Функция КвадратЧисла(прЧисло)
Возврат прЧисло * прЧисло;
КонецФункции

Упаси господь от такого.
Мы уж лучше в интернациональных проектах по-старинке, на какбыанглийском.
(Ответить) (Thread)
Страница 1 из 2
<<[1] [2] >>