Про идеальный ЯП
От: Shmj Ниоткуда  
Дата: 29.07.24 13:52
Оценка: :)
Вот взять популярные языки — C#, Java, Dart, TypeScript даже.

По сути они мало чем друг от друга отличаются. Ну разве что в Dart и TypeScript другая концепция работы с многопоточностью, а так отличаются в мелочах лишь.

Что-то усредненное из этого можно назвать идеальным ЯП для среднего человека. Экзотику типа Haskell оставим гениям, коих не много. А вот самое идеальное, максимально понятно, к чему пришло человечество — некий усредненный язык из этих.

Основной минус этих языков — слишком большое расходование памяти (хотя C# позволяет и управлять памятью напрямую — все библиотеки то построены на GCC).

Rust и ООП

Вроде попытались сделать Rust, который и без легаси и памятью позволяет управлять. Но там нет самого главного, что есть в 4-ке лидеров — полноценного ООП с понятным наследованием и простой реализацией ООП-паттернов. Как-то его можно делать через одно место + макросы (к примеру, чтобы не делать override всех функций а только тех, которые нужны) — но не оно

И убеждать себя или других что ООП не нужно — глупо. Все популярные языки из 4-ки выше его содержат и примерно в одинаковой реализации, концепции те же самые. Нужно, еще как нужно.

C++

В C++ есть ООП можно сказать даже избыточное — есть private, protected и public -наследование, есть множественное наследование. Зато нет ключевых слов для интерфейсов и абстрактных классов, хотя это полезно (в 4-ке лидеров это есть).

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

Итого. Идеальный язык мне представляется как Rust, но с полноценным ООП и отсутствием макросов. Т.е. макросы могут быть, но не системные — т.к. это весьма усложняет. В 4-ке лучших языков нет особенной привязки к макросам или вообще их нет.
Re: Про идеальный ЯП
От: reversecode google
Дата: 29.07.24 14:05
Оценка: +1 -1
шмыга-балабол нафлудивший килотонны мусорного бреда на форуме за, без малого 20 лет
так и не изучивший не одного языка
сидит и вбрасывает очередной висер про идеальный язык

это прям как про пельмешки, которые по силе мысли должны обкатываться в сметане и прыгать в рот
Re: Про идеальный ЯП
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 29.07.24 14:15
Оценка: 1 (1) +1
Здравствуйте, Shmj, Вы писали:

S>Что-то усредненное из этого можно назвать идеальным ЯП для среднего человека.

S>Итого. Идеальный язык мне представляется как Rust, но с полноценным ООП и ...

Я тут недавно на современный Swift смотрел, вот он реально выглядит как такое усреднение с выбором всего хорошего и отбрасыванием плохого. И ООП есть, и традиционные для ФП фишки вроде алгебраических типов, паттерн матчинга, тайпклассов/трейтов, при этом вместо GC встроенный подсчет ссылок. Памяти ест мало, работает быстро. Вполне себе кандидат.
Re: Про идеальный ЯП
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.07.24 14:18
Оценка: +3
Здравствуйте, Shmj, Вы писали:

S>Вот взять популярные языки — C#, Java, Dart, TypeScript даже.


S>По сути они мало чем друг от друга отличаются. Ну разве что в Dart и TypeScript другая концепция работы с многопоточностью, а так отличаются в мелочах лишь.


Ты перечислил 4 языка, которые (1) из семейства Си-подобных языков с классами (2) с автоматическим управлением памятью и сборкой мусора (3) компилируются не в машинные коды, а во что-то промежуточное, что потом или интерпретируется или JIT-ится.

Ну, довольно не удивительно, что они чем-то похожи

S>Основной минус этих языков — слишком большое расходование памяти (хотя C# позволяет и управлять памятью напрямую — все библиотеки то построены на GCC).


Язык не может расходовать память. Память расходует программист.

S>И убеждать себя или других что ООП не нужно — глупо. Все популярные языки из 4-ки выше его содержат и примерно в одинаковой реализации, концепции те же самые. Нужно, еще как нужно.


Это из серии, что опрос среди пользователей интернета показал, что 100% населения используют интернет.
Re: Про идеальный ЯП
От: Alekzander  
Дата: 29.07.24 14:20
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Зато нет ключевых слов для ... абстрактных классов, хотя это полезно


Чем полезно? Что тебя не устраивает в абстрактности, выводимой из отсутствующих методов?
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[2]: Про идеальный ЯП
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.07.24 15:02
Оценка:
Здравствуйте, Alekzander, Вы писали:

S>>Зато нет ключевых слов для ... абстрактных классов, хотя это полезно


A>Чем полезно? Что тебя не устраивает в абстрактности, выводимой из отсутствующих методов?


Вообще, не понятно, чем так уж полезны ключевые слова.

Вот, например, в Go есть ключевое слово new с семантикой, напоминающей привычную. Но только это не ключевое слово, а встроенная функция. Программист может определить свою функцию new, она будет иметь приоритет в соответствующем скопе. Ключевое слово тут не очень-то нужно.

Более того, даже int в Go — не ключевое слово, а встроенный тип (семантикой, аналогичной Сишному int-у). Можно определить свой тип с таким же именем, опять же, он будет иметь приоритет над встроенным в соответствующем скопе.

В целом, в Си могло бы быть точно так же, и в любом наследнике Си.
Re[2]: Про идеальный ЯП
От: Shmj Ниоткуда  
Дата: 29.07.24 15:15
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>Чем полезно? Что тебя не устраивает в абстрактности, выводимой из отсутствующих методов?


А вдруг я забыл добавить?
Re[2]: Про идеальный ЯП
От: novitk США  
Дата: 29.07.24 15:58
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Я тут недавно на современный Swift смотрел, вот он реально выглядит как такое усреднение с выбором всего хорошего и отбрасыванием плохого. И ООП есть, и традиционные для ФП фишки вроде алгебраических типов, паттерн матчинга, тайпклассов/трейтов, при этом вместо GC встроенный подсчет ссылок. Памяти ест мало, работает быстро. Вполне себе кандидат.


Быстро посмотрел wiki. Он чем-то от C# отличается кроме нативной поддержки ADT? refcounting GC & llvm AOT это про рантайм.
Отредактировано 29.07.2024 19:36 novitk . Предыдущая версия . Еще …
Отредактировано 29.07.2024 15:59 novitk . Предыдущая версия .
Re[3]: Про идеальный ЯП
От: Alekzander  
Дата: 29.07.24 16:38
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Вообще, не понятно, чем так уж полезны ключевые слова.


Так тут речь не про ключевые слова, а про объявление класса абстрактным вместо выведения факта абстрактности.

А если философски, "Кароши люблю, плохой — нет". Мне = 0 и & в С++ норм. И ref в C# норм. А конструкция = delete это просто лучшее из обоих миров, бл!
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[3]: Про идеальный ЯП
От: Alekzander  
Дата: 29.07.24 16:42
Оценка:
Здравствуйте, Shmj, Вы писали:

A>>Чем полезно? Что тебя не устраивает в абстрактности, выводимой из отсутствующих методов?


S>А вдруг я забыл добавить?


"Отсутствующий метод" в данном контексте это не дырка в декларации класса, а pure virtual function, т.е. метод, маркированный при помощи = 0;. Например, void foo() = 0;.
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Отредактировано 29.07.2024 16:43 Alekzander . Предыдущая версия .
Re: Про идеальный ЯП
От: kov_serg Россия  
Дата: 29.07.24 17:15
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>По сути они мало чем друг от друга отличаются. Ну разве что в Dart и TypeScript другая концепция работы с многопоточностью, а так отличаются в мелочах лишь.

Так вы просто не стем сравниваете, сравните с erlan, apl, sql, vhdl, lisp

S>Что-то усредненное из этого можно назвать идеальным ЯП для среднего человека.

Для среднего человека вая ЯП "нафиг не нужон"


S>Итого. Идеальный язык мне представляется...

Идельный для чего?
Re[2]: Про идеальный ЯП
От: SkyDance Земля  
Дата: 29.07.24 17:49
Оценка:
DM>Я тут недавно на современный Swift смотрел, вот он реально выглядит как такое усреднение с выбором всего хорошего и отбрасыванием плохого. И ООП есть, и традиционные для ФП фишки вроде алгебраических типов, паттерн матчинга, тайпклассов/трейтов, при этом вместо GC встроенный подсчет ссылок. Памяти ест мало, работает быстро. Вполне себе кандидат.

Мне тоже понравился. Но не взлетит, т.к. Apple...
Re[4]: Про идеальный ЯП
От: Shmj Ниоткуда  
Дата: 29.07.24 18:38
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>"Отсутствующий метод" в данном контексте это не дырка в декларации класса, а pure virtual function, т.е. метод, маркированный при помощи = 0;. Например, void foo() = 0;.


Вот в Dart, C#, Java и TS — интерфейс и абстрактный класс — всегда разные сущности. А абстрактном классе так же могут быть все методы без реализации и это, по сути, полный аналог интерфейса. Однако же разница в идее (хотя иногда эту идею портят, как в последних версиях C#).
Re: Держи идею идеального ЯП
От: Wolverrum Ниоткуда  
Дата: 29.07.24 19:17
Оценка:
Здравствуйте, Shmj,

Делаешь LLM для генерации в несколько более узкую LLM2
Делаешь LLM для генерации из языка LLM2 в еще более узкую LLM3
и уже потом LLM для генерации из LLM3 в CLI/прочийбайткод
Ну а дальше скармливаешь результат конпелятору

Сейчас пробуют в основном делать прямо из LLM в змия образно говоря байткод, но получается фигня
Re[5]: Про идеальный ЯП
От: Alekzander  
Дата: 29.07.24 19:31
Оценка:
Здравствуйте, Shmj, Вы писали:

A>>"Отсутствующий метод" в данном контексте это не дырка в декларации класса, а pure virtual function, т.е. метод, маркированный при помощи = 0;. Например, void foo() = 0;.


S>Вот в Dart, C#, Java и TS — интерфейс и абстрактный класс — всегда разные сущности. А абстрактном классе так же могут быть все методы без реализации и это, по сути, полный аналог интерфейса. Однако же разница в идее (хотя иногда эту идею портят, как в последних версиях C#).


Причём тут интерфейсы. В чём была бы польза от ключевого слова abstract для классов в C++?

>В C++ есть [...]. Зато нет ключевых слов для ... абстрактных классов, хотя это полезно
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[3]: Про идеальный ЯП
От: novitk США  
Дата: 29.07.24 19:41
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>Мне тоже понравился. Но не взлетит, т.к. Apple...

Кто-нибудь мне может обьяснить, что в нем нового чего нет в С#, Котлине или Скале. Или после GoLang "Только АOT, JIT не нужен!" считается "крутой" фичей?
Отредактировано 29.07.2024 19:41 novitk . Предыдущая версия .
Re[6]: Про идеальный ЯП
От: Shmj Ниоткуда  
Дата: 29.07.24 19:42
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>Причём тут интерфейсы. В чём была бы польза от ключевого слова abstract для классов в C++?

>>В C++ есть [...]. Зато нет ключевых слов для ... абстрактных классов, хотя это полезно

Ладно, не так выразился — точнее будет сказать — спец. механизм для интерфейсов, отличающий их от абстрактных классов — и невозможность потом добавить в интерфейс реализацию.
Re[3]: Про идеальный ЯП
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 29.07.24 20:11
Оценка: 2 (1)
Здравствуйте, novitk, Вы писали:

DM>> современный Swift


N> Он чем-то от C# отличается кроме нативной поддержки ADT? refcounting GC & llvm AOT это про рантайм.


Там вместо ООПшных интерфейсов — протоколы, подобные multiparameter type classes из хаскеля или traits из Раста. Когда можно свой интерфейс/трейт придумать и уже существующие чужие типы объявить, что они ему соответствуют, и как именно. И есть то, что хаскель называет existential types, а раст — dyn traits, когда передается "точно не знаю что, но оно умеет вот в этот интерфейс". Можно иметь "список хреней, умеющих то-то", причем это необязательно классы с общим предком, вообще не классы могут быть. Функция может возвращать разные неродственные типы, если они один протокол реализуют, такое вообще мало где есть.

Нет привычных исключений, но есть внешне похожие на них способы возвращать и передавать дальше ошибку, похоже на то, что в Zig.

Параметры у функций по умолчанию иммутабельны. Даже если передаешь объект с мутирующими методами, функция, куда передал, не сможет их вызвать. Нужно или явно разрешить мутирующий доступ, объявив параметр inout и передавая его как &x, или функция может сделать локальную копию, и мутировать ее, а оригинальный объект при этом не изменится.

Довольно неплохо сделаны optional types, которые на первый взгляд похожи на nullable, но на самом деле ближе к ФП-шным Maybe / option — они нестятся, потому Int? и Int?? это разные типы с разной информацией.
Re[3]: Про идеальный ЯП
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 29.07.24 20:17
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>Мне тоже понравился. Но не взлетит, т.к. Apple...


Он уже лет 10 как летит, куча народу где-то его используют (под iOS в основном, видимо), тысячи библиотек уже понаписали. В наш век ни один язык не может так "взлететь", чтобы всех повытеснить. Но при этом масса языков появилась и спокойно кем-то используются, разговоры про "взлет" давно уже бессмысленны. Берешь язык и пишешь. Кто-то вон игры на Beef-lang выпускает, кто-то профессионально на D пишет (как я), кто-то на хаскеле и т.д.
Re[4]: Про идеальный ЯП
От: SkyDance Земля  
Дата: 29.07.24 20:36
Оценка:
N>Кто-нибудь мне может обьяснить, что в нем нового чего нет в С#, Котлине или Скале.

Ничего.
Основное достоинство заключается не в том, что есть, а в том, чего нет — многих лет всяческого легаси и прочей обратной совместимости.

N>Или после GoLang "Только АOT, JIT не нужен!" считается "крутой" фичей?


А это вообще к языку имеет отдаленное отношение. Деталь реализации рантайма.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.