LINUX.ORG.RU
ФорумTalks

Вместо Python. Huawei создала собственный простой в освоении язык Cangjie

 ,


0

4

Huawei открыла доступ к своему фирменному языку программирования Cangjie, на разработку которого потратила, по меньшей мере, три года. Он ориентирован в первую очередь на ее собственную экосистему на базе платформы Harmony OS, которую Huawei развивает с 2019 г. в ответ на санкции Запада. Cangjie позиционируется как простой в освоении язык – этим же качеством на протяжении многих лет щеголяет Python. По словам разработчиков, этот язык ориентирован на создание «интеллектуальных приложений».

Название языка произносится не как «Кэнгжи», как можно было бы подумать, а «Цанцзе».

По словам разработчиков, Cangjie – это так называемый «мультипарадигмальный» (multi-paradigm) язык программирования, поддерживающий функциональное, императивное и объектно-ориентированное программирование.

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

Особенностью Cangjie является наличие полноценной интеграции со средой разработки (фреймворком) AgileDSL, в которой объединены естественный язык и традиционное программирование. Тем самым существенно снижен порог входа для изучения и использования Cangjie для написания программ.

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

Пример кода

struct Rectanglel {
  let width1: Int32
  let length1: Int32
  let perimeter1: 0 →> Int32
  
  init (width1: Int32, lengthl: Int32) {
    this.width1 = width1
    this.length1 = length1
    this.perimeter1 = { = 2 * (width1 + length1) }
  }
  
  init (side: Int32) {
    this(side, side)
  }
  func areal (): Int32 { width1 * length1 }
}

https://www.cnews.ru/news/top/2024-06-24_vmesto_pythonhuawei_sozdala_sobstvennyj

Ссылка на документацию:

https://developer.huawei.com/consumer/cn/doc/openharmony-cangjie/cj-lan-spec

Пользуясь случаем, спрошу: а когда там уже Mojo будет готов, никто не в курсе?


а когда там уже Mojo будет готов, никто не в курсе?

Судя по https://docs.modular.com/mojo/roadmap – не скоро.

Mojo SDK known issues The Mojo SDK is still in early development and currently only available for Ubuntu Linux and macOS (Apple silicon) systems. Here are some of the notable issues that we plan to fix:

Missing native support for Windows, Intel Macs, and Linux distributions other than Ubuntu. Currently, we support Ubuntu systems with x86-64 processors and Apple Silicon macOS. Support for more Linux distributions (including Debian and RHEL) and Windows is in progress.

dataman ★★★★★
()

Cangjie позиционируется как простой в освоении язык

Название языка произносится не как «Кэнгжи», как можно было бы подумать, а «Цанцзе».

Чёт мне уже сложнА…😔

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

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

MoldAndLimeHoney
()

более интуитивный синтаксис

О, как же я люблю всратый, не похожий на техдокументацию или математическую нотацию синтаксис:

let perimeter1: 0 →> Int32
- чем это отличается от Int32?
this.perimeter1 = { = 2 * (width1 + length1) }
- возможно, это всратое замыкание или хитровыдуманная адресация уровня контекста. Но ЗАЧЕМ???? Слава Богу, Вирт умер.

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

Ну хорошо хоть, что не «Кайдзю». GOTO есть в этой мультипарадигменной поделке?

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

Компилируемый python

ну такое

Requirements

    Mac
    Linux
    Windows

    Apple silicon (M1/M2/M3 processor)
    macOS Ventura (13) or later
    Python 3.9 - 3.11
    Xcode or Xcode Command Line Tools
FishHook
()
Последнее исправление: FishHook (всего исправлений: 1)
Ответ на: комментарий от Shadow

Cython неудобно отлаживать по сравнению с Mojo

C
() автор топика
Ответ на: комментарий от Shadow
  • возможно, это всратое замыкание или хитровыдуманная адресация уровня контекста.

Мне это больше напоминает башевские $(). Типа perimeter=$((2*(w+l))).

Aceler ★★★★★
()

Пример кода

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

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

Миллиард китайцев напишет каждый по одной библиотеке…

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

А давайте все пользоваться мощным гибким синтаксисом перловых однострочников!

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

Скорее, -->>, но легче от этого не становится. Не надо тащить Dia в код.

Shadow ★★★★★
()

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

В каждом классе сидит майор китайского КГБ и в случае нарушений бьёт по рукам уязвителя.

seiken ★★★★★
()
Ответ на: комментарий от Shadow
  • чем это отличается от Int32?

Пока его не прочитал надмозг-сканер это было

let perimeter1: () -> Int32

То, что на Cи было бы

int32 (*perimeter1)();
monk ★★★★★
()
Ответ на: комментарий от monk

Что такое «замыкания»? В python они есть? Как выглядят если есть, может я ими пользовался но просто не знал про это...

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

Как выглядят если есть, может я ими пользовался но просто не знал про это…

def counter():
    count = 0

    def increment():
        nonlocal count  # Use nonlocal to modify the count variable in the enclosing scope
        count += 1
        return count

    def decrement():
        nonlocal count
        count -= 1
        return count

    return increment, decrement

inc, dec = counter()  # Get closures for increment and decrement
print(inc())  # Output: 1
print(inc())  # Output: 2
print(dec())  # Output: 1
monk ★★★★★
()
Ответ на: комментарий от monk

Спасибо, идею кода понял, про вложенные def не знал)

Kolins ★★★★
()

Прикольная штука. Похожа на Rust, только со сборщиком мусора вместо проверяющего владения.

Количество синтаксического сахара зашкаливает: свойства, замыкания, функциональные комбинаторы, декораторы, макросы, мьютексы, методы к литеральным значениям, …

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

Я же говорил, английский прошлый век, надо учить китайский.

monk ★★★★★
()

Получай клоуна за последнюю строчку.

Начинал хорошо: рассказал о новом продукте известной компании. А в конце вставил этот унылый троллинг не пойми зачем.

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

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

hobbit ★★★★★
()

Мне кажется это не совсем замыкание, это то что называется getter property, и возможно с ошибкой и должно быть { = 2 * (this.width1 + this.length1) } . Иначе непонятно какой смысл в этом «замыкании» если оно оптимизируется в константу

А так конечно мрак, как для языка в 2024 году

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

По крайней мере в js они используются потому, что нет области видимости. Типа, что плохого в микроскопах, если нет молотков?

Shadow ★★★★★
()

Название языка произносится не как «Кэнгжи», как можно было бы подумать, а «Цанцзе».

Ганглие же. Межушное.

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

В стандартной библиотеке такого нет. Такое в JS сплошь и рядом. Ч классами даже строк меньше занимает:

form dataclasses import dataclass

@dataclass 
class Counter:
    count: int = 0

    def increment(self) -> int:
        self.count += 1
        return self.count

    def decrement(self) -> int:
        self.count -= 1
        return self.count
rtxtxtrx ★★
()
Ответ на: комментарий от Shadow

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

1) записать его на языке, где отступы кодируются другими символами

2) просматривать такой модифицированный текст через специальную утилиту, имитирующую наличие отступов

Не кажется, что в этой схеме есть нечто лишнее?

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

Иначе непонятно какой смысл в этом «замыкании» если оно оптимизируется в константу

Там и такой пример есть:

func returnAdd(a: Int32, b: Int32): (Int32, Int32) -> Int32 {
  { a, b => a + b }  
}

Для любых двух чисел возвращается функцию, суммирующая свои аргументы.

Я почитал внимательней, замыкания тут с сильным ограничением: нельзя в переменную сохранить замыкание, ссылающееся на изменяемое значение.

P. S. Для этого примера perimeter1 всегда будет возвращать константу, потому что поля width1 и length1 неизменяемые (иначе они должны быть определены не через let, а через var).

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

Также как и в C++

int f() { return 1; }
auto g = []{return 2;};
monk ★★★★★
()
Ответ на: комментарий от MoldAndLimeHoney

и не добавили нормальные блоки..

Это какие? Чего не хватило?

monk ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.