LINUX.ORG.RU

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

 , ,


0

3

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

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

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

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

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

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

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

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

★★★★★

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

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

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

Прикинь, какое извращение прогать на английском для его носителей ;)

Valkeru ★★★★
()

Категорически плохо. Убивать за такое. И не обсуждается.

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

В строках и комментариях тоже не нужно и за это бить по голове.

ВСЕ строки - ТОЛЬКО из внешних ресурсов. За строки в коде - канделябром, если это не hello world. (это говорит опыт разработки многоязыкового приложения... и это были всего лишь два языка - немецкий и английский)

Все комментарии - только на английском.

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

Все комментарии - только на английском.

Я бы тоже так делал, но если кто-то сильно хочет делать на родном, то на мой взгляд, иногда не страшно.

Klymedy ★★★★★
()

А если код в консоли надо редактировать то что? Не не не, не вижу смысла.

Что-то менять надо тогда, когда есть ощутимый профит от содеянного.

I-Love-Microsoft ★★★★★
()

Да даже не надо юникода. Возьми шрифт с лигатурами, например, Fira Code и пробуй.

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

не нужно, но прикольненько, на часик побаловаться сойдет

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

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

А что мешает быстро притащить с собой конфиг и положить в ~/.vimrc ?

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

Я бы отдал всё что угодно, чтобы в коде на питоне можно было свободно использовать математическую нотацию, Например, перевёрнутые буквы А и Е, и большую сигму в обычном смысле, и чтобы компилятор это понимал.

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

А зачем ты мучаешься и жуёшь кактус питон? Есть же Tcl например, там вообще процедуру можно назвать символом \0 и будет работать...

А не мог бы ты пояснить конкретнее, как ты хочешь применять эти самые ∀, ∃, и ∑ на примере гипотетического кода?

А кстати вариант сделать редактор, который будет при отображении подставлять лигатуры/спецсимволы, а сохранять в ASCII не вариант? Выше в треде обсуждалось.

Правда, для поддержки UTF-8 за пределами BMP нужно интерпретатор пересобирать с недефолтными опциями.

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

Например, записывать что-то типа SUM_{d|n} {…} - сумма по всем делителям числа n. Сейчас для этого приходится городить вложенные циклы.

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

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

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

Откуда путаница то возьмется? Каждый же настраивает отображение по своему и для себя. Но то что это не нужно — тут согласен. Если уж что то-заменять то целыми блоками, сокращать. А так — это непонятно вообще зачем. От знания реального синтаксиса это все равно не освобождает.

callbackhell
()

Появилась идея для стартапа: дополнительная клавиатура с UTF-8 закорючками для программистов

I60R ★★
()

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

Насчет кода не скажу, но ограничения в тексте программы не приветствую. Довелось мне писать для soc adsp-21xx, а там буква 'я' запрещена - код у нее служебный, вот цирк с комментами был, не на ломаном английском же писать!

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

Например, записывать что-то типа SUM_{d|n} {…} - сумма по всем делителям числа n. Сейчас для этого приходится городить вложенные циклы.

Я вот для пробы что-то такое накостылил на Tcl, на предложенном примере работает:

proc from {first to last {stringStep step} {step 1}} {
	if {$first > $last} {
		set tmp $first
		set first $last
		set last $tmp
		unset tmp
	}
	if {$to ne "to" || $stringStep ne "step"} {
		error "usage: from First to Last ?step Step?"
	}
	set result {}
	for {set i $first} {$i<=$last} {incr i $step} {
		lappend result $i
	}
	return $result
}

proc ∑ {varName expression listInt args} {
	set result 0
	#  determine condition to use
	if {[llength $args]==0} {
		set cond 1
	} elseif {[llength $args]!=2 || [lindex $args 0] ne "|"} {
		error "usage: ∑ varName expression listInt ?| condition?"
	} else {
		set cond [lindex $args 1]
	}

	# actual cycle
	foreach item [uplevel [
		list lmap $varName $listInt "
			if [list $cond] {
				apply [list [list $varName [list expr $expression]]] $[list $varName]
			} else {
				continue
			}"
	]] {
		set result [expr {$result+$item}]
	}
	return $result
}
Если этот код выполнить в текущем интерпретаторе (например положить в файл sum.tcl и сделать source sum.tcl), потом можно будет сделать вот так:
% set n 12
% ∑ i {$i**2} [from 1 to $n] | {$n%$i==0}
210
И получить сумму квадратов делителей числа $n, например.

Можно ли так сделать в других скриптовых языках?

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

Ты пытаешься заменить уже сложившийся язык международного общения новым. Какой от этого будет профит? Если никакого, то это бессмысленная трата времени.

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

Да, есть, например, заказной софт, который пишется под конкретного заказчика и с вероятностью 99% никогда не выйдет за пределы страны. В этом случае комментарии на родном языке выглядят вполне нормально.

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

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

Можно ли так сделать в других скриптовых языках?

sum(i**2 for r in range(1, n+1) if not n % i)
A1
()
Ответ на: комментарий от hobbit

Вы думаете, носителю английского будет проще читать на родном языке разработчика, чем на английском, пусть даже безграмотном?

Klymedy ★★★★★
()

Категорически плохо. По крайней мере пока этих символов не будет на любой стандартной клавиатуре.

iu0v1
()

как к токсичным отходам

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

Носителю английского его по крайней мере не предложат, потратятся на переводчиков.

Ну и главным у меня всё же был первый абзац.

А если говорить про опенсорс, то да, там английский безусловно предпочтителен. Но и здесь не надо впадать в религиозный фанатизм: если выбор между «мы получим код с комментариями не на английском» и «мы никакого кода не получим», думаю, большинство разумных людей выберут первое.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)

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

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

А где взбурливший Эдичка?

Партизанит — настраивает музейный запрещенный koi8-ru во вражеском юникодном окружении.

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

Ну, я бы ушел в подполье, если бы меня не забанили по IP :)

// сейчас, наверное, еще и этот IP забанят «за флуд»...

anonymous
()

Вот открываешь ты такой чужой код, а там ЭТО. И как ты его править будешь?

А если там индусский в прямом смысле этого слова код? Ты легко отличишь «ढ» от «ढ़»?

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

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

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

Вот открываешь ты такой чужой код, а там ЭТО. И как ты его править будешь?

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

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

Думаю, все более-менее нужные математические и графические символы расположены в BMP и в распространённых шрифтах есть.

Ага, теперь осталось только десять кнопочек на клавиатуру добавить и заставить всех ими пользоваться, и все будет зашибись.

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

Ага, теперь осталось только десять кнопочек на клавиатуру добавить и заставить всех ими пользоваться, и все будет зашибись.

Есть дофига методов ввода для символов, которых нету на клавиатуре, например Compose Key, автозамена и AltGr, не говоря уже о не очень удобном вводе кодов.

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