avva: (Default)
[personal profile] avva
(эта запись будет интересна лишь программистам, знающим C)

[livejournal.com profile] 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, которым, видимо, ну очень надоело нижнее подчеркивание.

Date: 2011-11-04 01:02 am (UTC)
From: [identity profile] alta-voce.livejournal.com
Хмм, мне кажется, я это давно знала.

круто! :)

Date: 2011-11-04 01:26 am (UTC)
From: [identity profile] niobium0.livejournal.com
#define цел int
#define коль if
#define доколь while
#define уменябудетсвойсипласплассблекджекомишлюхами 1

Re: круто! :)

Date: 2011-11-04 01:49 am (UTC)
From: [identity profile] meshko.livejournal.com
Ну, был же Русский Алгоритмический Язык. Начать Созидание, Кончить Созидание.

Date: 2011-11-04 01:27 am (UTC)
From: [identity profile] spamsink.livejournal.com
Осторожно, ящик Пандоры открывается...

+1

Date: 2011-11-04 01:50 am (UTC)
From: [identity profile] meshko.livejournal.com
Голосую за немедленное удаление поста.

Re: +1

From: [personal profile] wizzard - Date: 2011-11-04 02:09 am (UTC) - Expand

Re: +1

From: [identity profile] huzhepidarasa.livejournal.com - Date: 2011-11-06 12:11 pm (UTC) - Expand

Date: 2011-11-04 02:28 am (UTC)
From: [identity profile] ygam.livejournal.com
В Джаве и Сишарпе это уже давно.

Date: 2011-11-04 02:36 am (UTC)
From: [identity profile] eldarm.livejournal.com
К сожалению, использование нестандартных символов - это такая задница... Надо сохрянать в UTF-8, и прочее. Поэтому, увы, пока все это всерьез не работает. Поскольку серьезный програмиист готов при необходимости ("фикс это дерьмо поскольку мы теряем пользвателей на миллион баксов в десять минут!!!") программу чем угодно править, хоть vim'ом, а что угодно unicode еще не поддерживает.

(no subject)

From: [identity profile] qehgt.livejournal.com - Date: 2011-11-04 02:39 am (UTC) - Expand

(no subject)

From: [identity profile] eldarm.livejournal.com - Date: 2011-11-04 02:58 am (UTC) - Expand

(no subject)

From: [identity profile] max-gashkov.livejournal.com - Date: 2011-11-04 03:03 am (UTC) - Expand

(no subject)

From: [identity profile] eldarm.livejournal.com - Date: 2011-11-04 03:09 am (UTC) - Expand

(no subject)

From: [identity profile] salas.livejournal.com - Date: 2011-11-04 03:38 am (UTC) - Expand

(no subject)

From: [identity profile] eldarm.livejournal.com - Date: 2011-11-04 04:55 am (UTC) - Expand

(no subject)

From: [identity profile] nec-p1us-u1tra.livejournal.com - Date: 2011-11-04 02:07 pm (UTC) - Expand

(no subject)

From: [identity profile] shadow-at-night.livejournal.com - Date: 2011-11-04 11:38 pm (UTC) - Expand

(no subject)

From: [identity profile] itman.livejournal.com - Date: 2011-11-07 10:49 pm (UTC) - Expand

(no subject)

From: [identity profile] vyhuhol.livejournal.com - Date: 2011-11-04 07:55 am (UTC) - Expand

(no subject)

From: [identity profile] ilya-dogolazky.livejournal.com - Date: 2011-11-04 03:42 pm (UTC) - Expand

Date: 2011-11-04 08:36 am (UTC)
From: [identity profile] efix.livejournal.com
Так то оно так, но вот только миддл дот в идентификаторе на с# нельзя использовать.

(no subject)

From: [identity profile] eldarm.livejournal.com - Date: 2011-11-08 03:54 am (UTC) - Expand

Date: 2011-11-04 02:52 am (UTC)
From: [identity profile] zhengxi.livejournal.com
Обратил внимание на юникодные символы, то даже не подумал, что это есть в стандарте.

Те C и ASM файлы в исходниках Go, где применяются идентификаторы с unicode, компиляются не gcc, а их собственным компилятором C (8c,6c,5c) и ассемблером, которые все из себя нестандартые.

Date: 2011-11-04 03:42 am (UTC)
From: [identity profile] msh.livejournal.com
А U+1F4A9 использовать можно? Мне бы пригодился.

Date: 2011-11-04 07:33 am (UTC)

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2011-11-04 09:48 am (UTC) - Expand

Date: 2011-11-04 05:04 am (UTC)
From: [identity profile] vitaly-il.livejournal.com
совсем уже хотел было прокомментировать "нету их и все разрешено", но потом прочитал след. абзац про то что этому стандарту уже 10 лет :-)
интересно, не знал.

Date: 2011-11-04 06:13 am (UTC)
From: [identity profile] toothedgoo.livejournal.com
Отвратительно же. Столь же отвратительно, как и 1 и l, отличающиеся одним пикселом.

Date: 2011-11-04 09:25 am (UTC)
From: [identity profile] eisenberg.livejournal.com
Как c и с, не отличающиеся вообще ни одним.

(no subject)

From: (Anonymous) - Date: 2011-11-04 02:03 pm (UTC) - Expand

Date: 2011-11-04 07:01 am (UTC)
From: [identity profile] greena.livejournal.com
Все, окончательно перевожу себя в разряд динозавров.

Date: 2011-11-04 07:52 am (UTC)
From: [identity profile] beldmit.livejournal.com
Куда катится этот мир.

Я до сих пор стараюсь файлы по-русски не называть, а тут ТАКОЕ!

Date: 2011-11-04 09:59 am (UTC)
From: [identity profile] bolk.livejournal.com
Почему нет?

Date: 2011-11-04 09:13 am (UTC)
From: [identity profile] egorfine.livejournal.com
Ну и в самом деле - как такой код править vim'ом? Как прогонять через ctags? Оно может и поддерживается, но какой практический смысл?...

Date: 2011-11-04 09:23 am (UTC)
From: [identity profile] triampurum.livejournal.com
http://vimdoc.sourceforge.net/htmldoc/digraph.html
практический смысл: меньше места визуально на экране занимает, чем подчеркивание, выглядит чище.

(no subject)

From: [identity profile] nec-p1us-u1tra.livejournal.com - Date: 2011-11-04 02:11 pm (UTC) - Expand

(no subject)

From: [identity profile] egorfine.livejournal.com - Date: 2011-11-04 02:16 pm (UTC) - Expand

(no subject)

From: [identity profile] nec-p1us-u1tra.livejournal.com - Date: 2011-11-04 02:24 pm (UTC) - Expand

(no subject)

From: [identity profile] master-frenzy.livejournal.com - Date: 2011-11-04 05:01 pm (UTC) - Expand

Date: 2011-11-04 09:32 am (UTC)
From: [identity profile] triampurum.livejournal.com
вообще, если вспомнить, что эти люди придумали юникод, их любовь к юникодным символам становится более понятной :)

Date: 2011-11-04 09:59 am (UTC)
From: [identity profile] bolk.livejournal.com
Почему «язык С»? С чем? «Си» же. И кроме нижнего подчёркивания какое ещё бывает? Среднее? Верхнее?

Date: 2011-11-04 08:30 pm (UTC)
From: [identity profile] omened-drunkard.livejournal.com
«Язык С», конечно, идиотизм :-)
Но вот знак называется нижним подчеркиванием, по-другому люди путают и переспрашивают. Почему он так называется, писал Лебедев (http://tema.livejournal.com/151813.html), но это и не важно. Вам ведь не мешает отсутствие «Мертвого журнала» называть этот сайт «Живым журналом», например.

(no subject)

From: [identity profile] voldmar.livejournal.com - Date: 2011-11-04 10:29 pm (UTC) - Expand

(no subject)

From: [identity profile] bolk.livejournal.com - Date: 2011-11-05 06:15 am (UTC) - Expand

Date: 2011-11-04 11:01 am (UTC)
From: [identity profile] auto194419.livejournal.com
не совсем в тему - а не в курсе случайно, когда эти неприятные люди сделают go app engine sdk for windows?! для питона он давно есть, а для go - сосаети, как говорил один мой знакомый.

Date: 2011-11-04 05:04 pm (UTC)
From: [identity profile] master-frenzy.livejournal.com
Не раньше чем появится Go версии 1.

Date: 2011-11-04 04:57 pm (UTC)
From: [identity profile] tat-ti.livejournal.com
Угу, яблочко юникодное, с которого началось грехопадение.
Сначала _ на точку_которая_не_точка заменят, а в конце рыдаем над:
Сообщить("Здравствуй, Мир!"); (http://ru.wikipedia.org/wiki/1%D0%A1_%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)

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

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

Упаси господь от такого.
Мы уж лучше в интернациональных проектах по-старинке, на какбыанглийском.

Date: 2011-11-04 07:38 pm (UTC)
From: [identity profile] softmaster.livejournal.com
... дай людям язык, чтобы можно называть всё по-русски -- и они с удовольствием станут называть всё по-русски, например, типичными русскими словами обСпрВыгр и обСпрЗагр.

Date: 2011-11-05 01:50 pm (UTC)
From: [identity profile] rezdm.livejournal.com
Довелось в институте какие-то лабы писать на Смоллтолке на русском языке.
Объект, цикл, пока, до.

Вроде ещё в 1С встроенный язык по-рюсски программируется.

Адъ!

Date: 2011-11-05 02:58 pm (UTC)
From: [identity profile] migmit.livejournal.com
Может, не надо этого? Чем меньше в программе символов, отсутствующих на клавиатуре, тем лучше.

Date: 2011-11-06 05:18 am (UTC)
From: (Anonymous)
Ни фига подобного, нельзя. Стандарт говорит:

identifier:
    identifier-nondigit
    identifier identifier-nondigit
    identifier digit

identifier-nondigit:
    nondigit
    universal-character-name
    other implementation-defined characters

nondigit: one of
    _ a b c ... z A B C ... Z
digit: one of
    0 1 2 3 4 5 6 7 8 9

universal-character-name:
    \u hex-quad
    \U hex-quad hex-quad
hex-quad:
    hexadecimal-digit hexadecimal-digit hexadecimal-digit hexadecimal-digit

Так что средние точки эти — other implementation-defined characters, а кто хочет переносимо, должен писать \u00B7. Что не способствует.

Date: 2011-11-08 12:06 pm (UTC)
From: [identity profile] janatem.livejournal.com
Кстати, да. Мне не удалось заставить gcc схавать юникодный идентификатор. То, что называется universal characters, засунуть в текст можно, но только в виде \u<номер>. И то, если включить -fextended-identifiers.

То есть можно написать
int runtime\u00b7f();

но что в этом полезного?

Date: 2011-11-08 12:12 pm (UTC)
From: [identity profile] avva.livejournal.com
Как же компилируется этот код, имплементирующий Go, не хотите проверить?

(no subject)

From: [identity profile] janatem.livejournal.com - Date: 2011-11-08 03:57 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2011-11-08 04:10 pm (UTC) - Expand

(no subject)

From: [identity profile] janatem.livejournal.com - Date: 2011-11-08 07:33 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2011-11-08 07:39 pm (UTC) - Expand

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 30th, 2025 03:33 am
Powered by Dreamwidth Studios