×

Створено нову мову програмування Ć: розповідаємо, які її особливості

Розробник із Польщі Петро Фусік заявив на GitHub про створення нової мови програмування Ć. Вона покликана вирішувати одну специфічну проблему: написання коду, який потім буде зручно використовувати в C, C++, C#, Java, JavaScript, Python, Swift та OpenCL одночасно.

Тобто програма на Ć після обробки транслятором cito буде однаково зручна для читання на будь-якій із вищезазначених мов, згідно з принципом найменшого здивування.

Особливості нової мови

Відомо, що синтаксис нової мови програмування схожий на синтаксис мови C#. Автор стверджує, що насправді навіть підсвічування синтаксису C# працює досить добре для Ć. Але при цьому Ć не є клоном C# або його підмножиною.

«Відмінності обумовлені необхідністю повністю автоматизованої трансляції в ефективний код на C і JavaScript зокрема», — пояснив Фусік.

За його словами, Ć є об’єктно-орієнтованою мовою програмування, оскільки більшість цільових мов є такими.

«Це можна розглядати як поліпшення в порівнянні з C, проте об’єктно-орієнтований вивід C досить простий у використанні для програмістів на C», — підкреслив розробник.

Який ще функціонал Ć

Він також розповів, що залежності від бібліотек рантайму мінімальні. Вивід на C часто є самодостатньою парою .c/ .h, яка містить код C99. Аналогічно, вивід на інших мовах не залежить ні від чого, крім стандартної мови.

Управління пам’яттю нативне для цільової мови. Якщо в цільовій мові доступний збирач сміття, то він використовується. В іншому випадку (в C і C++) об’єкти і масиви виділяються в стеку для максимальної продуктивності або в купі для додаткової гнучкості. При виділенні в купі використовуються інтелектуальні вказівники C++.

Відомо, що робота над мовою Ć велася багато років, і ось вона нарешті доросла до «офіційного» оголошення.

Приклад коду на Ć:

public static class HelloCi
{
    public const int VersionMajor = 0;
    public const int VersionMinor = 3;
    public const string Version = VersionMajor + "." + VersionMinor;

    /// Returns `true` if and only if `x` is a power of 2 (1, 2, 4, 8, 16, ...).
    public static bool IsPowerOfTwo(int x)
    {
        return (x & x - 1) == 0 && x > 0;
    }

    /// Calculates greatest common divisor of `a` and `b`.
    public static int GreatestCommonDivisor(int a, int b)
    {
        // Euclidean algorithm
        while (b != 0) {
            int t = b;
            b = a % b;
            a = t;
        }
        return a;
    }

    /// Checks whether the given string is a palindrome.
    /// Note: empty string is considered palindrome.
    public static bool IsPalindrome(string s)
    {
        int j = s.Length;
        for (int i = 0; i < --j; i++)
            if (s[i] != s[j])
                return false;
        return true;
    }

    /// Gets a boolean value out of strings `"true"` and `"false"`.
    /// In other cases returns `defaultValue`.
    public static bool ParseBool(string s, bool defaultValue)
    {
        if (s == "true")
            return true;
        if (s == "false")
            return false;
        return defaultValue;
    }

    /// Converts an unsigned integer from its decimal representation.
    public static int ParseUnsignedInt(string s)
    {
        if (s == null || s.Length == 0)
            throw "null or empty argument";
        int n = s.Length;
        int r = 0;
        for (int i = 0; i < n; i++) {
            int c = s[i];
            if (c < '0' || c > '9')
                throw "Not a digit";
            // TODO: detect overflow
            r = r * 10 + c - '0';
        }
        return r;
    }
}
👍ПодобаєтьсяСподобалось3
До обраногоВ обраному1
LinkedIn

Найкращі коментарі пропустити

Когда прочитала название языка, подумала, что на монитор что-то прилипло, попыталась отодрать — оказалось что сверху эта клякса так и задумана :)

Не вижу оператора kurwa, это точно поляк делал?

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Створити власну мову програмування? Так у нас в Україні на технічних співбесідах складніше завдання дають

З появою LLVM астрологи оголосили початок епохи аматорських мов програмування. Хоча це сіто і не таке блювотне як нім.

Название репозитория данного языка (cito) у меня ассоциируется вот с этим cdn1.ozone.ru/...​a-f/wc1200/6013617411.jpg , хотя я понимаю, что cito скорее всего переводиться по другому....

Я придумал усовершенствование: вместо «паблик» надо писать «пше»

Де ви такі веселі були, коли у ворогів вигадали Котлін? :)

       if (s == "true") return true;
        if (s == "false") return false;
        return defaultValue;

Такое впечатление, что съездил на ж/д вокзал купить билет на поезд, на котором поеду через месяц.

Примерно такое ощущение от этого С с папилломой.

Щось розчарування — ще один до дієз, чом би не зробити щось функціональне? Ех

Просто функціональне не цікаве, ну буде ще один LISP чи Erlang. А щоб зробити щось нове з кваліфікованим автовиводом типів, контролем контрактів і т.п. — треба сильний колектив світового рівня.

return

Да не нужен этот ваш ретурн, только символы жрет

public static class

Это синтаксический мусор

public const int

это тоже

public static bool

и это тоже мусор

if (s == null || s.Length == 0)

ещё и долбаные наллы которые мастдай

if (s == «true»)
return true;
if (s == «false»)
return false;
return defaultValue;

Бойлерплейтом так и хлещет. Паттернматч — та ну его нафиг.

int t = b;

инференция нет не слышали

c < ’0′ || c > ’9′

Сравниваем символы с числами, т.е. 2 разных типа данных, расстрелять. символы != числа

bool defaultValue

а, т.е. в хорошую обработку ошибок мы так и не научились как и во всех остальных с-языках?

while (b != 0) {
for (int i = 0; i < n; i++) {

Форлупы, да ну, уже же по моему все поняли насколько это кривая конструкция.

// TODO: detect overflow

даже тут говнокод недоделаный

Итог: язык пше застрял примерно там где его все начинатели — в 1980, и все 40 лет прогрессса для него остались недоступны. Рациональных причин для его применения — нет.

Option / Optional. Но это требует другого подхода к написанию кода в целом.

Option / Optional. Но это требует другого подхода к написанию кода в целом.

Не требует
Но вот наличие value-type обязательно, иначе этот подход теряет смысл

Но вот наличие value-type обязательно

Да на самом деле нет, в скале и джаве живут с классом.

Не требует

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

Да на самом деле нет, в скале и джаве живут с классом.

И как такая реализация способствует null safety?)
В том и суть реализации через value types, чтобы избежать проверок на null
Хороший пример — LanguageExt

Анврап — обычно криво и многословно

Примеры в студию

И как такая реализация способствует null safety?)

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

LanguageExt

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

Примеры в студию

по другому гет использовать не особо то и безопасно.
try{
...
opt.get
...
} catch (no such element exception) {
...
}

if(opt.isEmpty) {
...
} else {
...
}

opt match {
case Some(...) => ...
case None => ...
}

Толсто и громоздко.

Хотите короткого синтаксиса? Типа как в Swift? Нееее, строгая типизация (тут она по ходу) с
выведением типов это зло.

символы != числа

Я сейчас вас удивлю, на си/с++ символы таки числа (точнее имеют численное представление), так что та конструкция вполне валидная, если непонятно, то вот — пример printf("<<%i>>", (int)’s’);

Я сейчас вас удивлю, на си/с++ символы таки числа (точнее имеют численное представление),

Если символы можно перенумеровать, то это не означает что символы являются числами.

Как раз таки и являются.
Таблицы кодировок в помощь.
nice.artip.ru/...​t/files/files2/cp1251.png

Таблицы кодировок

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

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

подразумевают, что кодировка одна,

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

но обычно подразумевается что человек знает что делает.

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

Незнание человеком всех моментов нужно ставить во главу угла

Идиото-ориентированное программирование это зло и самообман.
Вспомнить хотя-бы историю внедрения эплом Swift`a, дескать станет проще без низкоуровневого наследия си и отсутствия указателей, снизится порог вхождения. Сильно разработка софта на iOS подешевела? Ни на копейку.

Идиото-ориентированное программирование это зло и самообман.

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

Сильно разработка софта на iOS подешевела?

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

Пристрелите это, пока оно не расползлось по проектам.
Зачем приумножать сущности без необходимости?

А что там варианты типа С̀͌̚, С̸͍̼̈́̔̓ , С͔̝̘ или С̶ уже были заняты? Как бы когда строишь велосипед, то должен обеспечить максимальную совместимость с сарафанным радио, а тут выходит «ну тот С, что с фигней сверху»...

Бил бы по рукам если бы на проект кто-то такую приблуду притащил бы.

Да ладно, все уже ударено до вас, без корпоративного лобби такие штуки не живут в массовом продакшене.

Звук як чь, але насправді все ще гірше, бо буква — «Це з крескоу» :-)

C, C++

Что там по указателям и ссылкам?:)

Как на этом написать выборку из списка чтобы в c# оно превратилось в Where а в питоне в filter?

Не вижу оператора kurwa, это точно поляк делал?

if ( static const lvalue == nill) return kurwa

нью курва, то ще целка ...
компілєр не осилить логіку

Даже как то и логичнее выглядит:

if ( !name ){
   okurwa TypeError('foo');
}

Там само, де в Котліні бл*дь :-)

Выучу этот ваш Ć, и наконец получу лычку Ćиниор

лычку Ćиниор

Її можуть отримати лише ті, хто народився у Польщі

Не нужно. Не решает ни одной из существующих задач. Кто-то открыл для себя Bison или ANTLR и решил повыпендриваться?А нет, не открыл.

Интересно, какой из современных распространённых языков программирования укладывается своим парсером в возможности bison+flex или ANTLR ;)
Лисп и Паскаль не вспоминать :)
Я не к тому, что это невозможно, а к тому, что почему-то наблюдается обратная тенденция. И частично даже понятно, почему.

Хм, я бы согласился бесспорно, но стоит подумать над отдельными аспектами. По крайней мере оба они не умеют (уточнить) задавать контексты лексеру из выводов синтаксического парсера; вариант ANTLR без лексера дороговат и поэтому мне не нравится. При этом:

<character string literal> ::=
    [ <introducer><character set specification> ]
    <quote> [ <character representation>... ] <quote>
    [ { <separator> <quote> [ <character representation>... ] <quote> }... ]

<national character string literal> ::=
    N <quote> [ <character representation>... ]
    <quote> [ { <separator> <quote> [ <character representation>... ] <quote> }... ]

<Unicode character string literal> ::=
    [ <introducer><character set specification> ]
    U<ampersand><quote> [ <Unicode representation>... ] <quote>
    [ { <separator> <quote> [ <Unicode representation>... ] <quote> }... ]
    <Unicode escape specifier>

<Unicode escape specifier> ::=
    [ UESCAPE <quote><Unicode escape character><quote> ]

Здесь больше засада не в эскейпинге внутри строки, например, а в том, что разбор последовательностей типа

'abc' 'def'
N'abc' 'def'
U&'abc' 'def'

должен идти так, что вторая часть ’def’ или часть той же лексемы (по-моему, катастрофически усложняется определение лексемы — white space между ними может включать и переводы строк всех видов, и VT, и FF...), или отдельный, но тогда этот отдельный должен задаваться контекстом, полученным из синтаксического парсера(?)
Или тут всегда можно полагаться на то, что если первой шла лексема вида U&’abc’, то мы можем переключиться в контекст «дальше возможна ещё одна часть unicode-литерала»?

Пример интересный, конечно (причём более интересный методологически — тем, что обычно про SQL не думается как про язык программирования). Но не очень ценный именно спецификой языка. Я бы тут его отделил и не учитывал.

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

Коментар порушує правила спільноти і видалений модераторами.

Відколи почитав документацію по Vi, ставлю відповідну розкладку і в Eclipse, і в VS.

А була ще класична розкладка WordStar...

На холме стоят молодой программист (МП) и опытный программист (ОП)
а внизу копошатся фреймворки.
МП — побежали освоим их всех.
ОП — нет, мы медленно спустимся и будем их учить по мере необходимости.

Вже є Haxe, і ніби не дуже зайшло.

правда, оці public static const class напрягають — більше писати, більше візуального шуму, більше коду, через який треба продиратись...

і public static const class напрягають — більше писати,

якщо так:
pscs

PublicMethod()
privateMethod()
PublicVar
privateVar
:)

голенговцы (Golang) считают, что таки да

ну не намного ж ведь преувеличил от public static const foo = ’bar’;

ну в TS похоже ставиться, а C# вообще своеобразный выходит. Если не const, то, небось, какой то readonly со статиком, или ще какая фигня...

private(set) static var something: Int = 0
Новый молодежный Swift

Когда прочитала название языка, подумала, что на монитор что-то прилипло, попыталась отодрать — оказалось что сверху эта клякса так и задумана :)

перша непряма користь від цієї мови — люди протирають монітори :)

Вот что бывает, когда для словянского языка используют латинницу — лепят диакритические знаки для тех звуков, для которых букв нет.

Taк ведь это справедливо не только для славянских языков: чего стоит Ç для романского французского языка или ẞ для германского немецкого языка.

Согласен, латиница не совсем подходит даже для английского (всякие костыли вроде th, ugh и пр.). Её либо обновлять уникальными символами, либо создавать новый алфавит. Ну, или кириллицу использовать (хотя и в ней иногда не хватает уникальных букв).

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

нет знака ни для чешского ř

Погуглил тут. Это составной звук, как Я (йа), только для согласных.

В польском языке этой букве соответствует диграф «rz» (przed — ср. русск. перед), а в русском — сочетания «рь», «ря», «ре», «ри».

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

Но вообще да — надо больше букв, я уже писал выше. Диакритика — так себе выход.

Чем принципиально буква с диакритикой отличается от новой буквы?

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

Это всё костыли. В идеале, произносимый звук должен иметь свою одну букву, а не какие-то там ухищрения вроде диакритических или транскрипцонных значков.

Почему диакритика — это костыль? Кто мешает всякие ż и ó рассматривать как отдельные буквы, а не как вариации z и o? Вот заметьте, в украинском языке буквы ї или й рассматриваются всё же как отдельные буквы, а не как варианты букв i или и с диакритикой.

Вариации — это что такое вообще? Схожие звуки? Если да, то иногда даже незначительная разница звуков может привести к потере смысла. Например, с и з родственные звуки, если смотреть со стороны речевого аппарата, и может получится «сон -> зон». Это абстрактный пример, только для демонстрации. Если звук настолько другой, что может привести к потере смысла, то ему нужна отдельная буква.
А если смысл не теряется, то можно не выпендриваться, и оставить один символ, без всяких диакритик. Пример: печатное слово «еще» (хотя более правильно было бы писать «ещо», но это другая тема, к данной не относится).

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

В идеальном алфавите для каждого звука должна быть своя уникальная буква. Чтобы избежать путаницы с подобными «вариациями» — разными для разных языков.

Вариации — это что такое вообще?

В данном случае я писал о графических вариациях того или другого знака. Так, в исторической ретроспективе знаки V и W являются графическими вариациями знака U, которые стали использоваться для записи разных звуков. В настоящее время мы считаем все три знака — U, V и W разными буквами. В более позднее время для этих же целей стала использоваться диакритика. Так, в том же польском языке знаки z, ż и ź с одной стороны являются графическими вариациями знака z, а с другой стороны используются для записи трех разных звуков. И, возвращаясь к нашим баранам, спросим: почему Вы считаете, что диакритика это костыль? Если для записи звука [з] в русском языке используется буква з, а в польском буква z, а для записи звука [ж] в русском языке используется уникальная буква ж, а в польском уникальная же буква ż, то что в этом плохого? Ведь это и есть реализация Вашего же принципа

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

В польском проблема не в этом. Вот например для «ж» есть ż, а есть rz. Они исторически разные, во многих случаях можно понять по аналогии (наше традиционное «проверочное слово», что должно быть — типа dobrze -> dobry, dobra), но не во всех. А наоборот — вот был такой в позднесоветское время знаменитый «обозреватель» Каверзнев — как его писать, Kawerznew — это Кавежнев?
Как писать «груд» — grud или gród? Опять надо или проверочные слова/формы искать, или тупо запоминать.

И наоборот, Пржевальский и особенно Пиотровский — кто так передал фамилии, понятно, почему? А сочетания sz, cz — их надо читать всегда как один знак или есть всё-таки случаи, когда это раздельно? (на стыке морфем такое запросто получить)

Я тут не согласен с Малеевым, но и польский вариант откровенно крив.

Кстати, к вашему примеру про UVW есть ещё роскошнее пример: когда-то G возникла как модификация C, хотя по-нормальному (без этрусских извращений) должны были остаться K для [к] и C для [г].

Спасибо за ответ.

Вот например для «ж» есть ż, а есть rz. Они исторически разные, во многих случаях можно понять по аналогии (наше традиционное «проверочное слово», что должно быть — типа dobrze -> dobry, dobra), но не во всех.

Чешский язык в большинстве случаев решает этот вопрос :) Как украинский язык является проверочным для определения того, что писалось по дореформенной орфографии в русском языке — ѣ или е, так чешский язык является проверочным что пишем по-польски rz или ż: rzeka, потому что řekа, но żywot, потому что život (и dobrze, потому что dobře).

А наоборот — вот был такой в позднесоветское время знаменитый «обозреватель» Каверзнев — как его писать, Kawerznew — это Кавежнев?

Поляки не морочатся этим. Каверзнева пишут Kawierzniew, и им всё равно, что незнающие русский прочитают [кавежнев], a вот Кавежнева записали бы Kawieżniew. В этом конкретном случае по польской транскрипции без труда можно восстановить русское написание.

Как писать «груд» — grud или gród? Опять надо или проверочные слова/формы искать, или тупо запоминать.

Для меня в этом отношении камнем преткновения было слово numer: так и чесалось мне писать nómer, потому что по-русски номер. Но тут получается, что в русском слове вот эта буковка о непонятно откуда залетела.

Чешский язык в большинстве случаев решает этот вопрос :)

Почему не русский? ;)

Для меня в этом отношении камнем преткновения было слово numer: так и чесалось мне писать nómer, потому что по-русски номер. Но тут получается, что в русском слове вот эта буковка о непонятно откуда залетела.

Из голландского, или из латинского — вариантов много. Как раз переход в «у» тут уже следствие миграций слова через разные языки.

А вот в случае «ноль» как раз исходно «у». Кстати, киевское склонение: ноль — нуля — нулю — ... удивляло москвичей, у которых обычно ноля, нолю и т.д.

В этом конкретном случае по польской транскрипции без труда можно восстановить русское написание.

Ну, может, помогает (и таки устно всё равно сбоит).

Почему не русский? ;)

:) Jerzy, Jiří и ... Георгий. Примеров можно немало подобрать, где русский вариант будет отличаться от чешского и польского.

Из голландского

Nummer

из латинского

Numerus

Как раз переход в «у» тут уже следствие миграций слова через разные языки.

Но не в слове «номер». :)

:) Jerzy, Jiří и ... Георгий.

Юрий, а не Георгий! Как раз Юрий — полное соответствие.

Другие примеры — ну да, я понимаю, что у западнославянских есть какая-то чуть бо́льшая общность, но не настолько существенно.

Numerus

Да, тут что-то заглючил.
Фасмер пишет, что «ноль» и «номер» таки вероятно возводятся к колебаниям в немецких говорах. Ещё мог повлиять французский.

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

У иностранцев и так хватает проблем с латиницей и без всякой диакритики. Например, сочетание ch англичанин прочтёт [ч], француз [ш], а немец или поляк [х]. Поэтому в Польше часто с улыбкой смотрят на написание в загранпаспорте фамилии Чуйко, записанную по правилам украинской или русской транслитерации Chuiko.

Я, собственно, и пишу, что латинница устарела и нуждается в обновлении.
В идеале, для этого нужна филологическая комиссия где-нибудь вроде ООН, с представителями из разных стран, использующих латинницу. Чтобы провели ревизию всех используемых звуков, систематизировали и приняли обновлённый алфавит. Но в реале вряд ли это будет кто-то делать, фактически — только из-за языков восточноевропейских отсталых развивающихся стран.

Хотя, есть надежда, если Германия выступит с такой инициативой — в таком случае, этим странам может повезти.

сочетание ch англичанин прочтёт [ч]

Скорше іспанець.
Для англійців все складніше, бо запозичені слова часто запозичуються разом із вимовою, тому ch буває і [ч] (choice, chapter), і [к] (echo, schema), і ще може чимось іншим (зараз в голову не приходить)

В такому разі раджу прочитати в Вікі статтю про діграф ch, там більш детальніше написано де й як читається цей діграф.

надо чтобы было несколько тысяч иероглифов! вот тогда заживем!

Иероглифы, как правило, обозначают слова, а буквы — звуки.

Это не совсем так. Задайте себе вопрос: как китайцы пишут иностранные личные имена или заимствованные слова? Поймете почему запись 哈利波特 означает «Гарри Поттер» и не может быть понята иначе, а 比雅尼斯特劳斯特鲁普 - Бьярн Страуструп?

почему запись 哈利波特 означает «Гарри Поттер» и не может быть понята иначе, а 比雅尼斯特劳斯特鲁普 - Бьярн Страуструп?

фонетичний запис — викручуються, як можуть
translate.google.com/...​
斯.
特.
鲁.
普.&op=translate

нет знака ни для чешского ř

Так как это развитие (несущественно упрощая) мягкого «р», то řa -> ря, ři -> рі, ř в конце -> рь, и так далее. Далее те же правила, что у нас для гласных, которые смягчают предшествующие согласные.

ни для обсуждаемого польского ć...

Аналогично, «ц» со смягчающими последующими символами. Тут нет проблемы.

PS: да, это уже не 1:1 соответствие символа и фонемы. Но сравнивают-то с нашими восточнославянскими языками, где этот принцип неплохо реализуется, хоть и неожиданно для остальных...

лепят диакритические знаки для тех звуков, для которых букв нет.

Да. При этом:
Щ: диакритическая модификация Ш (изначально это было вообще Ш под которым Т, мы перезаюзали от [шт] к [шч]). Сохранилась, выжила в (нашей) кириллице.
Й: диакритическая модификация И. (Почему не взять J, как у сербов?)
Ё: очевидно.
Ы: вообще суперслучай — реально две буквы (ъі), слившиеся из-за частого использования (сейчас это у большинства один звук, а ранее было нечто вроде «уй»; чехи устно иногда имеют «эй» вместо длинного ý).
Ю: исходно это іоу, где два первых элемента слились, а третий отпал (оу означало [у] по византийской традиции).

По вашему принципу, вместо них надо было тоже что-то другое придумать?

Уже писал выше.

Диакритика — так себе выход.
Кириллица создавалась для старословянского, с тех пор его потомки развились из диалектов в отдельные языки. Но, тем не менее — она всё ещё больше покрывает звуков из словянских языков, чем латинница.

Так что да. Алфавит должен развиваться (но только, если можно выразиться, полноценно) одновременно с развитием языка.

Проблема в том, что добавлять новые буквы сейчас как-то вообще не принято...
а вот диакритики считаются неизбежной нормой.

То-то и оно. Это я и подразумевал под жаргонным словом «костыли».

оказалось что сверху эта клякса так и задумана :)

Cи — козявка

Тобто, я так розумію, що основна фішка мови — компілюватись у іншу поширену target мову?
Типу, одна логіка на сервері на C# та на клієнті на JS.
Ну ок, чого, може комусь і треба буде щоби один і той самий код юзався в 1+ місцях. Запит є на це — ціла node.js, GWT, Blazor, Fable, LiveView та інші подібні штуки...

Все дуже відносно, багато популярних зараз мов почались «від нонейма»
Python, PHP, Ruby, Perl — класичні приклади

З іншого боку, прийшов гугл, приніс Go і Dart (flutter) — всі вивчили, хвалять і користуються

Тим більше, що це не якийся космос типу APL чи kxdb, а цілком прагматична мова і підхід. І думаю, що можна комбінувати у проекті код на цьому Ші і на таргет мові.

Cito cito вы там ниписали?! :-)

«Висновок на C часто...», здається статтю не вичитували перед публікацією

Дякую за уважність, виправили.

як це промовляється? щі? чі? )

С чубом же!

ć — это „чь”. „Пше” — это prze.
Przepraszam, mam na imię Grzegorz Brzęczyszczykiewicz :)

Якщо цікавить коротка консультація з польської мови, то «Ць», якщо просто транслітерувати; однак насправді поляки вимовляють цю букву як щось середнє між «Чь» і «Ць»; тому задля спрощення напишу — «Цчь» (не впевнений чи спростив чи ускладнив).

Підписатись на коментарі