LINUX.ORG.RU

Язык программирования Ü

 ,


3

2

«Почему Ü? Потому, что хотелось однобуквенного названия, а все буквы из набора A-Z уже заняты.»

«Зачем нужен ещё один язык?

Я рассмотрел ряд существующих статически-типизированных компилируемых более-менее известных языков, и пришёл к выводу, что ни один из них меня вполне не устраивает. У всех них есть «фатальные» недостатки.

Конкретно по пунктам:

C — слишком низкоуровневый и небезопасный

C++ — по наследству получил много недостатков низкоуровневости, появились новые способы выстрелить себе в ногу, отсутствие рефлексии

D — сборщик мусора, отдельные ссылочные типы

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

C# — недостатки во многом аналогичны Java

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

Go — сборщик мусора, отсутствие шаблонов

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

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

https://habr.com/ru/post/465553/

https://github.com/Panzerschrek/U-00DC-Sprache


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

А чехам почему-то пришёл.

Во что умею.

Скопипастить алфавит у западных славян звучит чуть менее глупо, да.

anonymous
()

Годно, но тебе надо было документацию нормальную на инглише сделать, да на HN (а не на ЛОР парашу) объяву закинуть. Здесь же по большей части ущербные, что здесь ловить?

anonymous
()

üntermensh

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

Здесь же по большей части ущербные

Да вроде вас тут немного, кто решил что проект ТСа.

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

Нет генериков, сказано же.

В новой сишечке есть. Но они не нужны.

Ага, не нужны. Потому что не те.

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

Они вообще не нужны. Потому что не нужны. Если тебе нужно написать N функций для обработки разных типов аргументов, так возьми, и напиши их!!! Какого черта ты пытаешься возложить это на компилятор? Если ты их ручками напишешь, то меньше шансов, что получится жирное тормознутое дерьмо. Я уж молчу про крестовые макросы, когда исходники на несчастных пару тысяч строк компилятся 10 минут!!!

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

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

Осталось узнать про существование либ.

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

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

Здрасте приехали.

С какой стати я должен делать что-то, что отлично автоматизируется, руками?

С какой стати меньше шансов, что получится томознутое дерьмо, если я вместо компилятора скопирую одну и ту же функцию десять раз?

С какой стати тебя такого пустили программировать?

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

И кроме унылого Си есть несколько ЯП без сборщика мусора, которые позволяют это делать, и не пердолиться с байтами без особой необходимости на постоянной основе.

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

Только так и надо. Иначе, чем ты лучше калькулятора?

Закусывать надо. Тогда не будешь сравнивать себя со счетной машинкой.

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

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

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

И при чем здесь это? В библиотеке ты ничего не перегрузишь, если она на С написана. Если же она написана на крестах, это тупо означает, что у тебя в коде библиотеки есть N версий этих функций для всех разновидностей аргументов. А если там еще и шаблоны используются, то этих версий может быть еще больше!

Поэтому кресты == зло!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от unanimous

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

Кроме божественной сишечки нет ни одного вменяемого ЯП!

Eddy_Em ☆☆☆☆☆
()

наличие явного указания соответствия протоколу

Что имеется в виду?

andalevor ★★
()

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

Мне например вообще всё равно на чём программировать.

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

Мне например всё равно Pascal, C, C++, C# или Java.

Я вообще, когда что-то разрабатываю (придумываю) оно у меня в голове не в виде языка какого-то, а в виде формул и графической визулизации в 4Д (динамически тоесть).

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

Бывают исключения в виде OpenCL, но тоже есть вариант что он более универсален чем тот же CUDA.

А вот эти словоблудия про выразительность и ещё хз чего языков я не понимаю.

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

А чем внешний от внутреннего отличается? Clang-AST и GCC-XML — это внешний или внутренний?

Имелось в виду, что характеристика «внешний/внутренний» больше относится не к самому AST-у, а к утилите (-там), которые с ним работают (поэтому и взял в кавычки).

«Внешний» (в твоём списке - GCC-XML) не даёт по AST-у сделать бинарник.

На сколько я понимаю, Clang-AST, хоть и часть clang-а, т.е. «внутренний», тоже не делает этого, но для этого есть другие утилиты - не?

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

На сколько я понимаю, Clang-AST, хоть и часть clang-а, т.е. «внутренний», тоже не делает этого, но для этого есть другие утилиты - не?

Почему же? Он только по AST и делает бинарник. Между созданием AST и деланием бинарника можно что-то воткнуть: http://www.dreamlandcoder.com/system-security/how-i-learned/clang-libtool/

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

Да уж, смотрел в книгу, видел... Ну значит Clang-AST «внутренний» и «полноценный» в моей левой классификации ))

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

У меня коллега на говнокрестах кодит. Я наслушался уже, какое говно — современные кресты. Когда я их только изучал лет 17 назад, такого говна не было!!!

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

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

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

class A{...};
void validateHeader(const A& a);

class B{...};
void validateHeader(const B& b);

template<typename Obj>
void validate(const Obj& obj) {
    validateHeader(obj);

    // common fields
    obj.getF1() == ...;
    ...
}
BreadFan ★★
()
Последнее исправление: BreadFan (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

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

BreadFan ★★
()

Язык программирования Ü

Хорошо хоть священный python не трогали, ироды

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

А как же преимущество кириллицы при написании не отрывая руки?

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

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

Чего ты несёшь, запартное трепло? Здесь есть ast и тебе об этом сказали - оно везде есть. Но ast любого адекватного языка напрямую завязано на синтаксисе, т.к. именно он определяет все свойства тех абстракций, которые поверх него построены, а не наоборот.

Для начала: что значит «нормальный» и где пруфы?

Пруфы чего, клоун? Бегом побежал C++ парсить pg.

А по сути: ты дебил? Мне не надо какой-то конкретный «нормальный язык» парсить, достаточно распарсить хоть json или xml представление того ast-а, которое автор не предоставил.

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

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

Нет, клоун. Язык определяет синтаксис. В школу сходи - там тебя научат. К тому же, клоун. Тебе уже сообщили, что здесь есть ast. Берёшь и делаешь что угодно, правда ast отображает в себе синтаксис, но то такое - в школе ещё не дошел до этого.

Через что угодно - побежал бегом, клоун, прикручивать что угодно к С++.

А если я укажу на язык, где это возможно, ты скажешь что он ненормальный? Сам в такое играйся.

Очевидно, что то говно, что бездарная школота понимает под языком - языком не является.

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

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

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

У меня коллега на говнокрестах кодит. Я наслушался уже, какое говно — современные кресты.

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

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

Маня, всё полноценное, кроме тебя. По поводу clang-ast - я не вижу методологии его применения описанной тобою, почему? Я уж не буду просить хотя-бы текстовое представление, либо альтернативный синтаксис. Я попросту спрошу про то, почему ты опять обделался.

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

Имелось в виду, что характеристика «внешний/внутренний» больше относится не к самому AST-у, а к утилите (-там), которые с ним работают (поэтому и взял в кавычки).

Опять веб-макака пытается рассуждать о чём-то.

«Внешний» (в твоём списке - GCC-XML) не даёт по AST-у сделать бинарник.

Очевидно, ведь тебе об этом сообщили сразу. Никто за рамками парты не использует подобное мусорное говно. Всё что существует в доступном для тебя, веб-макаки, виде - это обгрызанное говно.

На сколько я понимаю, Clang-AST, хоть и часть clang-а, т.е. «внутренний», тоже не делает этого, но для этого есть другие утилиты - не?

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

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

Эти дауны ниасилили С и считают ссылочные типы недостатком. Чувак сам является недостатком этого мира.

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

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

К тому же, зачем писать это говно руками? Смысл С++ не в том что-бы заниматься индуснёй.

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

Расскажи мне сказку, как я не знаю С =D

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

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

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

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

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

Это не особо показательно. К тому же следует учитывать ещё то, что рядовые адепты даже в рамках С++ не могут осилить перегрузку. За примерами далеко ходить ненужно - clang. С++-компилятор авторы которого не осилили С++. Сильно, конечно. Да и в целом он написан как говно, будто бы стундентота писала. Хотя, вроде как, она же и писала.

Но не это главное. Смысл перегрузки не в только в том, что-бы иметь некое унифицированное имя. Зачем его иметь, казалось бы? Ты частично показал профит, но очень расплывчато + опять же примеры с кодогеном, где нагенерить можно чего угодно.

Поэтому проще всегда описывать профит перегрузки вкупе с обобщением. Т.е. не f(A), f(B) и прочее. Адепты тебе ответят - мы просто имя поменяем. И не в контексте A x; f(x);, где можно попросту заменить f на f_a(x);

Суть в том, что можно написать f(A | B), f(C | D) и использовать в контексте A | B | D x; f(x); Без перегрузки ты это не реализуешь. Генерик может быть реализовать только для T.

Т.е. по-сути клоун выше критикуя «обобщённое говно» критикует именно обобщённое говно, которое не особо имеет отношение к С++ и решается именно что перегрузкой.

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

Это не будет работать, очевидно. Тебе нужен диспатч. Работать это будет только на уровне validateHeaderT(void *).

Так же не будет работать ptr->field т.к. тип ты стёр. По-сути в ситуации с void * тебе нужно либо делать диспатч руками статически, либо уже динамически через тип-тег, либо ещё что-то + switch.

И то и то говно, очевидно. Хотя без концептов С++ в общем случае не сильно лучше, ведь в любом случае тебе нужен кодоген, либо бойлерплейт. А когда у тебя есть кодоген - можно и пожрать говно. Тебе все эти мусорные имена оно само нагенерит.

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

void* - плохо. плюс, даже если мы все правильно кастанули, все равно приходим к исходной задаче.

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

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

кодеген - круто, особенно если это часть языка, а не сторонние тулы или препроцессор, который тоже, по сути, сторонний тул :)

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