LINUX.ORG.RU

Как вы относитесь к коду с юникодными символами?

 , ,


0

3

Уже довольно давно везде доминирует UTF-8, в GNU/Linux это системная локаль по умолчанию, и в этой кодировке и файловая система и большинство текстовых файлов.

Языки программирования, использующие особые символы появились давно, например APL появился ещё в 1964 году, но он сильно опередил своё время, поскольку тогда ещё не было никаких юникодов и не-ASCII символы автоматически сильно ограничивали переносимость на другие системы. Но сейчас-то особых препятствий уже нет.

А как с этим в ваших любимых языках — поддерживают ли они не-ascii символы вне строк вообще? Есть ли языки, где юникодные символы определены в стандартной библиотеке, кроме APL?

А что вы думаете насчёт того, чтобы применить например #define в C, чтобы в самом коде можно было использовать ≤ ≥ ≠ ≡ вместо <= >= != == например? Кроме того, можно использовать греческие буквы для имён переменных, например ε обозначать предел при интерполяции.

В других языках можно другие операторы заменять, например → ⇒ вместо -> =>

Вводить их можно как специальными средствами текстового редактора, так и общеиксовыми методами ввода, например использованием Compose. Не знаю, можно ли настроить или нет, чтобы разные символы вводились одновременным нажатием двух кнопок, но это тоже вариант. Так же есть AltGr и возможность сделать для этого специальную раскладку.

Кстати, теоретически, на основе юникода можно в принципе вообще заменить английские лексемы, сделав языки программирования международными — например вместо слова print использовать иконку принтера.

Но это так, отдельные символы. А что если использовать что-то вроде LaTeX-а чтобы программы вообще имели двухмерную типографскую нотацию?

★★★★★

Последнее исправление: Xenius (всего исправлений: 3)

Печатать такие символы неудобно, а у человека, читающего окд, может не быть их в шрифте. Вердикт: выжечь напалмом

annulen ★★★★★
()

Ненужное говно, которое хрен наберёшь на клавиатуре или отобразишь в кастомном шрифте. ASCII навсегда.

Иначе до извращений вроде «программируем» на русском/китайском языке дело дойдёт.

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

Вердикт: выжечь напалмом

Не надо таких преждевременных выводов.

а у человека, читающего окд, может не быть их в шрифте.

Подозреваю, что уж BMP-то в шрифтах у всех есть, ну может кроме виндузятников. А нет — можно поставить. Вот что-то за её пределами использовать в коде я бы поостерёгся, да.

Печатать такие символы неудобно

Есть множество вариантов методов ввода, при которых печатать их вполне удобно. Настроить текстовый редактор и/или раскладку и/или иной метод ввода один раз не так уж трудно.

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

Печатать такие символы неудобно

простейшая автозамена вида " => " → " ⇒ "

у человека, читающего окд, может не быть их в шрифте

скоро такие шрифты станут называть устаревшими

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

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

скорее потому что либо кому-то другому придётся настраивать редактор для этого

Ну кстати, а почему бы не сделать редактор, который при загрузке автоматически отображает шорткаты как юникод, а при сохранении их обратно раскрывает, сохраняя совместимость с ASCII-онли редакторами?

Xenius ★★★★★
() автор топика

Вброс так себе. Вот если бы ты спросил как вы относитесь к решению какой-нибудь проблемы посредством юникодных символов, еще можно было что пообсасывать. Сейчас пост выглядит как «почему бы не обмазаться utf-8, потому что мы можем».

A1
()

1) Всяких спецсимволов банально нет на клавиатуре. Их будет тяжело и долго набирать, что сильно снижает производительность труда программиста.

2) Использование локализованных имён переменных и т. п. сделает код совершенно непереносимым. Сейчас любой язык программирования является международным. То есть любой фрагмент кода одинаково хорошо поймёт хоть китаец, хоть русский, хоть американец. Можно скопипастить без изменений фрагмент кода на форум или отправить его коллеге и получить помощь, вне зависимости от национальности отвечающего и вопрошающего. Также как и над проектом может без проблем работать многонациональная команда. Наконец, при программировании на таком языке потребуется постоянно переключать раскладку, что также снижает производительность кодинга. А если в языке и ключевые слова будут локализованы, то это будет ещё хуже. Ибо получается, что учить этот язык можно только по узкому кругу национальных учебников, различные статьи и справочная литература на языке отличным от национального также пропадает.

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

да, но, к сожалению, с fira code не работает emacs(хз почему, даже workaround, предлагаемый на гитхабе, не помогает).

f1u77y ★★★★
()

Насчёт математических символов — хорошая идея. Насчёт принтера — не очень. Про LaTeX — ничего не понял.

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

2

тут не про локализацию, а скорее про замену стрелочек на математические символы. ещё, кстати, иногда полезно было бы называть переменную греческой буквой

f1u77y ★★★★
()

Так уже:

┌ home :: ~ :: cd
└ d_a % ненужно() { echo "$@ не нужно"; }
┌ home :: ~ :: ненужно() { echo "$@ не нужно"; } 
└ d_a % ненужно
 не нужно

Хотя в то же время всё ещё
┌ home :: ~ :: пряники=1 (rc = 127) 
└ d_a % неготово=1
bash: неготово=1: команда не найдена...

i.e. парсер весь nonlatin разбирает по правилам для команд. Впрочем, не очень-то и хотелось.

d_a ★★★★★
()

Не очень хорошо. Так как у меня не настроен редактор под них и пришлось бы тратить дополнительное время на разворачивания env. Хотя если в команде было бы всё унифицированно и выдали настроенную среду, то норм. С другой стороны профита особого нету.

Captcha
420

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

Этих символов нет на клавиатуре 99.9% компьютеров. Как их будешь набирать? Compose key? Его нет на винде, да и на Linux не у всех он настроен одинаковым образом. Alt + код символа? Да ты задолбаешься учить все коды. Пока ты будешь тыкаться и набирать свою греческую альфу, я быстрее напишу alpha.

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

KivApple ★★★★★
()

В *моем* языке вот такая фигня вполне прокатывает


ффф := method(1 print)
ффф

-> := method(2 print)
->


#>>>> 12
Твои мечты — это моя реальность.

callbackhell
()

Если юникодные символы будут опциональными, то пусть будут. Например, в perl6 символ » используется как синоним оператора >>.

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

В хацкиле хссоурс их не отображает все ещё,что печально, а так в емаксах и вимах автозамена легко настраивается (хотя я не использую).

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

fish

Оно уже научилось читать environment на posix sh из /etc/profile.d? Если нет, то ни для чего кроме симпатичной безделушки для кухни оно неготово.

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

если говорить о emacs, например, то с input-metod tex ты набираешь «\alpha», а emacs вставляет в текст α. с другими редакторами такие же фишки наверняка есть. так же и со стрелочками

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

автозамена это пока еще плохо, т.к. все еще юзают шревты без стрелочек. а лигатурные шревты это хорошо, хотя в gui емаксе не работает

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

он же умер вроде, нет? а так он бы сам пришёл

f1u77y ★★★★
()

А как с этим в ваших любимых языках — поддерживают ли они не-ascii символы вне строк вообще? Есть ли языки, где юникодные символы определены в стандартной библиотеке, кроме APL?

Язык 1С. По стандарту весь код для России должен быть написан на русском языке.

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

если ты сидишь в иксах и не в standalone wm, то всякие профайлы читает запускатор для de, написанный на баше. если в standalone wm, то написать wrapper — плёвое дело

f1u77y ★★★★
()

А что вы думаете насчёт того, чтобы применить например #define в C, чтобы в самом коде можно было использовать ≥ ≠ ≡ вместо <= >= != == например?

РАССТРЕЛЯТЬ!

Но вообще, ты просто ничего не понял. Нужно в редакторе настроить замену отображения, например <= отображать как ≤ и т.д. И наоборот, если ты вводишь ≤, то оно заменяется на <=.

no-such-file ★★★★★
()
Ответ на: комментарий от A1

Скорее понтануться в каком-нибудь инстаграмме для кода, мол, зырьте, ASCII-плебеи, какие у меня красивые значки в моём любимом язычке.

Как папуасы на бусы, короч.

На деле такая возможность не добавляет никаких новых возможностей или удобств, а лишь создаёт проблемы староверам и олдфагам, добавляет разногласия в Coding Conventions, представьте что в вашей хипстерской компании упоротый идиот-разработчик постановил использовать такую мургу и теперь нормальные разработчики, если им придётся развернуться на какой-то хост без IDE, на котором доступен лишь ванильный vim, будут мудохаться с этими спец-символами.

Так что эта хрень, к счастью сыскает популярность лишь у хипстоты, да и то упоротой, вроде агрессивных антиэдиков.

EXL ★★★★★
()

Используй нормальные редакторы, которые могут заменять != на ≠ при отображении, оставляя код чистым ascii. И тебе символьное счастья, и с набором проблем нет, и другим разработчикам жизнь не испортишь.

anonymous
()

Короч, ребят, проще в IDE забульбенить замену тем, что нужно. А файле при этом хранить именно ASCII.

Это отделит всякую хипстоту от нормальных людей, причём те и другие останутся довольными.

EXL ★★★★★
()
Ответ на: комментарий от no-such-file

а собсна почему не в шрифте? я вон ради интереса в konsole fira code поставил, с вимом сразу заработало, как и с emacs -nw. только гуевый емакс чет не хочет воспринимать. тут да, надо конфигать редактор

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

Нужны критически для работы с CUDA SDK и другой проприетарщиной от хуанга, которая развёрнута в свой prefix, например, такие портяны (цитирую):

#
# Экспорт пути к исполняемым файлам
#

NVIDIA_BINDIR=$(rpm --eval '%{_nvidia_bindir}')

if ! echo ${PATH} | /bin/grep -q ${NVIDIA_BINDIR} ; then
    export PATH=${NVIDIA_BINDIR}${PATH:+:${PATH}}
fi

unset NVIDIA_BINDIR

#
# Экспорт пути поиска для pkg-config
#

NVIDIA_LIBDIR=$(rpm --eval '%{_nvidia_libdir}')

if ! echo ${PKG_CONFIG_PATH} | /bin/grep -q ${NVIDIA_LIBDIR}/pkgconfig ; then
    export PKG_CONFIG_PATH=${NVIDIA_LIBDIR}/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}
fi

unset NVIDIA_LIBDIR

#
# Экспорт пути для поиска man-страниц
#

if command -v manpath >/dev/null ; then
    NVIDIA_MANDIR=$(rpm --eval '%{_nvidia_mandir}')
    __MANPATH=$(manpath)

    if ! echo ${__MANPATH} | /bin/grep -q ${NVIDIA_MANDIR} ; then
        export MANPATH=${NVIDIA_MANDIR}${__MANPATH:+:${__MANPATH}}
    fi

    unset __MANPATH
    unset NVIDIA_MANDIR
fi

SCL в RHEL на похожем принципе работает, когда всё разворачивается в свой prefix и это надо экспортировать per-process или per-user, и там тоже может быть посложнее чем башизм export aaa=bbb.

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

башизм export aaa=bbb

башизмом у тебя тут скорее являются ифы, потому что export key=value fish из коробки отлично ест. тогда, к сожалению, не придумывается ничего лучше враппера, который читает профайл и пускает фиш.

но опять же, если вдруг срочно не понадобится работать из tty(хз зачем), то проблемы вообще нет

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

нет, не создает. они будут видеть привычный ascii, а те, кто юзают другой редактор, будут видеть лигатуры. шо не так?

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

Из коробки ничего не ело, когда я смотрел. Т.е. вообще на профиль забивался большой и толстый. Но вообще да, апстримный костыль fish.sh, который ставится шеллом и последней строкой делает exec fish, наверное бы сработал. А так вообще у меня даже банальный lang.sh сильно сложнее чем export key=value, чтож теперь, с LANG=C сидеть.

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

из коробки ничего не шло

$ export fish=нужно
$ echo $fish
нужно

на профиль забивался большой и толстый

в $XDG_CONFIG_DIR/fish/config.fish надо добавить че-то типа

source {/etc/,$HOME/.}{profile.d/**,profile}

lang.sh сложный

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

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

source {/etc/,$HOME/.}{profile.d/**,profile}

Ну почти, это ещё *.csh подмахнёт, а там совсем эрогуро. Мне кажется кому-то поплохеет.

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

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

На rh такое любят:

┌ home :: ~ :: less /etc/profile.d/abrt-console-notification.sh  
└ d_a % cat /etc/profile.d/abrt-console-notification.sh 
# If shell is not connect to a terminal, return immediately, because this script
# should print out ABRT's status and it is senseless to continue without
# terminal.
tty -s || return 0

# Skip all for noninteractive shells for the same reason as above.
[ -z "$PS1" ] && return 0

# If $HOME is not set, a non human user is logging in to shell but this script
# should provide information to human users, therefore returning immediately
# without showing the notification.
if [ -z "$HOME" ]; then
    return 0
fi

if [ -z "$ABRT_DEBUG_LOG" ]; then
    ABRT_DEBUG_LOG="/dev/null"
fi

LPATHDIR="$HOME/.cache/abrt"
SINCEFILE="$LPATHDIR/lastnotification"

if [ ! -f "$LPATHDIR" ]; then
    # It might happen that user doesn't have write access on his home.
    mkdir -p "$LPATHDIR" >"$ABRT_DEBUG_LOG" 2>&1 || return 0
fi

TMPPATH=`mktemp --tmpdir="$LPATHDIR" lastnotification.XXXXXXXX 2> "$ABRT_DEBUG_LOG"`

SINCE=0
if [ -f "$SINCEFILE" ]; then
    SINCE=`cat $SINCEFILE 2>"$ABRT_DEBUG_LOG"`
fi

# always update the lastnotification
if [ -f "$TMPPATH" ]; then
    # Be quite in case of errors and don't scare users by strange error messages.
    date +%s > "$TMPPATH" 2>"$ABRT_DEBUG_LOG"
    mv -f "$TMPPATH" "$SINCEFILE" >"$ABRT_DEBUG_LOG" 2>&1
fi

abrt-cli status --since="$SINCE" 2>"$ABRT_DEBUG_LOG"

И ведь не выкинешь, полезная тема.

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

Сейчас любой язык программирования является международным. То есть любой фрагмент кода одинаково хорошо поймёт хоть китаец, хоть русский, хоть американец.

Угу, помню, как я копался в коде библиотеки с комментариями и именами переменных на итальянском :)

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

выжечь напалмом

Не надо таких преждевременных выводов.

Да-да, потяните еще время, надо сбегать за напалмом.

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

А моему коллеге недавно выдали разбирать бесценный код на фортране и французском. Надо ему сказать, что

сейчас любой язык программирования является международным. То есть любой фрагмент кода одинаково хорошо поймёт хоть китаец, хоть русский, хоть американец.

а то он что-то выпендривается.

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