Re[8]: Про идеальный ЯП
От: novitk США  
Дата: 30.07.24 08:50
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Пытаемся решить проблему выразительности интерфейсов. Типа, что файл надо сначала открыть, потом можно из него произвольное количество раз читать, потом надо его закрыть (после чего читать нельзя).

S>И вот нам надо убедиться, что а) реализация корректно реализует заявленную state machine, и что б) вторая сторона тоже корректно реализует свою часть протокола. И некоторая алгебра над протоколами, которая должна проверять, что некая суперпозиция нескольких протокольных ролей является конформным расширением над некоей заданной протокольной ролью.
DSL нужен. C# не супер для этих целей, но если вы на dotnet, МSFT делает же всякие blazor/razor. Скала сильно лучше и позволяет делать приличный внутренний DSL, но менять tech stack я бы не стал. Ну или к Владу за Nitro-й
Что касается, где бы стырить идею спеков и алгебры, которые вам нужны, то тут я
Отредактировано 30.07.2024 9:08 novitk . Предыдущая версия . Еще …
Отредактировано 30.07.2024 9:06 novitk . Предыдущая версия .
Отредактировано 30.07.2024 8:57 novitk . Предыдущая версия .
Re[9]: Про идеальный ЯП
От: Sinclair Россия https://github.com/evilguest/
Дата: 30.07.24 09:32
Оценка:
Здравствуйте, novitk, Вы писали:
N>DSL нужен.
Вот DSL мы и пилим.
N>C# не супер для этих целей, но если вы на dotnet, МSFT делает же всякие blazor/razor.
Не, там основатели не верят в управляемые платформы. Так что — суровый натив, плюс мультиагентная среда исполнения с гарантиями доставки и восстановления после сбоев.
N>Скала сильно лучше и позволяет делать приличный внутренний DSL, но менять tech stack я бы не стал.
Ну, тут пока что основная проблема — именно что в семантике. Ковыряем потихонечку.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Про идеальный ЯП
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 30.07.24 09:36
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>У нас протокол — это именно что протокол, соглашение о порядке отправки и приёма сообщений.

S>Пытаемся решить проблему выразительности интерфейсов. Типа, что файл надо сначала открыть, потом можно из него произвольное количество раз читать, потом надо его закрыть (после чего читать нельзя).

https://en.wikipedia.org/wiki/Typestate_analysis
https://en.wikipedia.org/wiki/Session_type
Re[3]: Про идеальный ЯП
От: L_G Россия  
Дата: 30.07.24 09:51
Оценка:
vsb>Тут возникает проблема с тем, что современный ИИ, показывающий интересные результаты, обучался на огромных массивах готового кода. У меня нет уверенности, что получится сделать ИИ, показывающий похожие результаты с языком, на котором никто ничего не написал.

Язык и компилятор для него наверняка будут сделаны без применения ИИ / LLM. Думается, их преимущества могут оказаться значительными сразу.
Поначалу "чат" предполагался как интерфейсная часть компилятора, основная задача которой — сухую суть ошибок компиляции переформулировать максимально понятным человеку языком и сразу предлагать варианты их решения. На первом этапе это можно сделать и на эвристиках, а по мере накопления данных для обучения переделать на LLM (если будет смысл вообще).

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

Со временем может стать совсем хорошо: если начинающий программист просто "говорит по человечески", ИИ-чат, угадывая смысл, поправляет его, в результате совместных усилий получается текст на ЯП (на экране перед глазами человека). Так человек будет запоминать все отличия языка программирования от естественного и постепенно научится сразу говорить/писать корректные фразы на ЯП — так-то оно быстрее будет! Но это именно для функции обучения нужен такой ИИ-чат.

А мастеру программирования ИИ-чат поможет едва ли: он будет сразу думать на ЯП и печатать/диктовать почти готовый код. Ему ведь не надо для этого помнить наизусть кучу библиотечных функций — только ключевики и предметную область программы, а синтаксис языка — и вовсе родной, ну почти.
Текущая функция ИИ-чата — переводить краткие ТЗ (на человеческом языке) в длинные простыни императива (с большой вероятностью сочинить полный бред) — с новым языком должна перейти к компилятору: разворачивать НЕПРОТИВОРЕЧИВОЕ ТЗ в императив может и должна строгая логика (без LLM)!
Каша в голове — пища для ума (с)
Re[5]: Про идеальный ЯП
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 30.07.24 09:54
Оценка: 2 (1)
Здравствуйте, novitk, Вы писали:

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

N>Как с tooling в win/linux?


Что-то есть и работает, я на линуксе как раз играюсь. Поставил пакет swift-bin и вперед.

N>в vscode LSP рабочее?


Хз. Но в Helix'e LSP сразу подцепился и как-то работает — автокомплит, ошибки, все такое.

N>jupyter kernel?


Хз.

N>Что с пакетным менеджером, типа nuget/cargo? В репо библиотеки должны быть под платформу или пакетный менеджер их при установке адаптирует? Там оно все к МаcOS не привязано?


Какой-то есть свой. Кроме компилятора swiftc там есть команда swift, которая как раз рулит процессом, умеет создавать проекты, качать зависимости, собирать всё и т.д. https://swiftpackageindex.com/ показывает больше 7к пакетов.

N>Байндинг к C++?


Хз.

N>собирается в ~static linking ехе? если да, то размер helloworld.exe?


По умолчанию helloworld — маленький бинарник (16 КБ), но ссылающийся на кучку .so, в сумме мегов 20 они.
Если скомпилить swiftc -static-executable hey.swift -o hey, то получается 9 МБ, полностью статичный, но не работает.
Пишут, что в Swift 6 будет работать нормально, пока что нужно с бубном поприседать.
Re[5]: Про идеальный ЯП
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 30.07.24 10:11
Оценка:
Здравствуйте, novitk, Вы писали:

DM>>Если чуть строже язык сделать, убрать кое-какие неоднозначности/оверлоадинг, наверняка можно исправить. Вон в OCaml, Haxe, Elm тот же Хиндли-Милнер вывод типов, и все очень быстро типизируется и компилируется.


N>В этом и проблема — в Swift не ХМ, как и в Скале.


И там, и там ХМ, просто с наворотами/расширениями.

N>Скрестить ужа (знакомые ООП фишки) и ежа (вывод типов и implicits за конечное время) пока не получается. Это по мнению Одерски, который в type theory собаку сьел.


В разном виде скрещивать уже давно научились, тот же Одерски про добавление сабтайпинга в ХМ еще в 97 году писал.
https://www.cs.tufts.edu/~nr/cs257/archive/martin-odersky/hmx.pdf

Потом эту тему еще много раз по-разному пинали, видимо, одного идеального подхода нет. Из недавних интересных подходов — algebraic subtyping Долана, см. например MLscript.
Re[6]: Про идеальный ЯП
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 30.07.24 12:18
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>Причём тут интерфейсы.


Дык, непосредственно.

A>В чём была бы польза от ключевого слова abstract для классов в C++?


Почему "бы"? В VC++ давным-давно есть и abstract, и __abstract. Очень способствует унификации определений как интерфейсного (абстрактного) класса, так и его реализации, чтобы не выписывать "= 0" при каждой функции интерфейса.

P.S. И даже __interface есть.
Отредактировано 30.07.2024 12:24 Евгений Музыченко . Предыдущая версия .
Re[7]: Про идеальный ЯП
От: Alekzander  
Дата: 30.07.24 13:10
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

A>>В чём была бы польза от ключевого слова abstract для классов в C++?


ЕМ>Почему "бы"? В VC++ давным-давно есть и abstract, и __abstract. Очень способствует унификации определений как интерфейсного (абстрактного) класса, так и его реализации, чтобы не выписывать "= 0" при каждой функции интерфейса.


Мне очень понравился диалог на эту тему на StackOverflow.

— Могу ли я использовать ключевое слово abstract при объявлении класса?
— Да, конечно можете. К сожалению, ваша программа после этого перестанет компилироваться.


Прямо какое-то армянское радио.

Насколько я в курсе, это расширение, которое Microsoft добавил в VC++ ради C++/CLI, и так оно там и осталось. Поэтому и "бы". А если я ошибаюсь и это часть языка, то просьба дать ссылку куда-нибудь в районе cppreference.com.
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[8]: Про идеальный ЯП
От: so5team https://stiffstream.com
Дата: 30.07.24 13:17
Оценка: :)
Здравствуйте, Alekzander, Вы писали:

A>Насколько я в курсе, это расширение, которое Microsoft добавил в VC++ ради C++/CLI, и так оно там и осталось. Поэтому и "бы". А если я ошибаюсь и это часть языка, то просьба дать ссылку куда-нибудь в районе cppreference.com.


Господин Музыченко 30 лет живет в уютном мире Windows и компиляторов от Microsoft. Поэтому то, что есть в VC++ для него есть и в C++.
Re[8]: Про идеальный ЯП
От: Shmj Ниоткуда  
Дата: 30.07.24 13:31
Оценка:
Здравствуйте, Alekzander, Вы писали:

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

A>Но я, возможно, ошибаюсь, и ты мне сейчас объяснишь, зачем гарантировать "невозможность потом добавить в интерфейс реализацию" на C++?

Это позволяет разделить работу проектировщика архитектуры и девелоперов/реализаторов.

В C++ в принципе концепция — интерфейс это h-файл, по сути. Который включает в себя еще много всякого. Как бы это легаси ломает простую концепцию.
Re[3]: Про идеальный ЯП
От: Alekzander  
Дата: 30.07.24 13:33
Оценка: +1
Здравствуйте, Went, Вы писали:

L_G>>Характеристики, которые будут оптимизироваться при разработке такого языка — это его 1) человеко-читаемость и 2) выразительность — по этим показателям он может значительно обогнать существующие ЯП.

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

У меня в школе была учительница математики (м.учительница), которая требовала исключительно символьной записи теорем. С кванторами (∀, Ǝ), конъюнкциями (∧), импликациями (⇒) и т.д. Запись доказательства выглядела примерно так:

А ∈ α ∧ B ∉ α ⇒ a ≡ c

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

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

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

И, кстати, программистский способ символьной записи (плоский, с сокращёнными алфавитами и т.п.) лично мне нравится гораздо больше математического. Одна из причин, по которой мне всегда нравилось программирование и никогда не нравилась математика.
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Отредактировано 30.07.2024 13:42 Alekzander . Предыдущая версия . Еще …
Отредактировано 30.07.2024 13:40 Alekzander . Предыдущая версия .
Re[8]: Про идеальный ЯП
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 30.07.24 13:48
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>Насколько я в курсе, это расширение, которое Microsoft добавил в VC++ ради C++/CLI, и так оно там и осталось.


Да, сперва добавил abstract в CLR, а затем — __abstract и __interface в обычный режим C++. Я активно пользуюсь.

Еще они давно добавили compiler-supported type traits. Но адекватной условной компиляции так и не сделали, так что во всем этом мало смысла без остальной шаблонной магии.
Re[9]: Про идеальный ЯП
От: Alekzander  
Дата: 30.07.24 13:48
Оценка:
Здравствуйте, so5team, Вы писали:

A>>Насколько я в курсе, это расширение, которое Microsoft добавил в VC++ ради C++/CLI, и так оно там и осталось. Поэтому и "бы". А если я ошибаюсь и это часть языка, то просьба дать ссылку куда-нибудь в районе cppreference.com.


S>Господин Музыченко 30 лет живет в уютном мире Windows и компиляторов от Microsoft. Поэтому то, что есть в VC++ для него есть и в C++.


Так и я тоже. Некоторые из этих расширений для поддержки интерфейсов кажутся мне весьма полезными. Например, __uuidof.
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[9]: Про идеальный ЯП
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 30.07.24 13:52
Оценка:
Здравствуйте, so5team, Вы писали:

S>Господин Музыченко 30 лет живет в уютном мире Windows и компиляторов от Microsoft. Поэтому то, что есть в VC++ для него есть и в C++.


Не, господин Музыченко краем уха слышал, что бывают какие-то другие платформы и компиляторы, у него есть даже пара версий GCC, и он иногда ходит на godbolt.

А пример с VC++ показателен тем, что расширения, однажды введенные разработчиками компилятора для собственных нужд, нередко становятся стандартом де-факто. И в стандарты C++ что-то притащили из бывших локальных расширений от Borland, MS и GNU.
Re[9]: Про идеальный ЯП
От: Alekzander  
Дата: 30.07.24 14:03
Оценка:
Здравствуйте, Shmj, Вы писали:

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

A>>Но я, возможно, ошибаюсь, и ты мне сейчас объяснишь, зачем гарантировать "невозможность потом добавить в интерфейс реализацию" на C++?

S>Это позволяет разделить работу проектировщика архитектуры и девелоперов/реализаторов.


S>В C++ в принципе концепция — интерфейс это h-файл, по сути. Который включает в себя еще много всякого. Как бы это легаси ломает простую концепцию.


А что изменится, если ты опишешь интерфейс не в .h-файле, а в модуле? Или даже просто на бумажке? И будешь реализовывать интерфейс в классе, глядя на бумажку?

В C++ интерфейсы это про vtbl. В C# и Java интерфейсы это про данные типа, доступные в рантайме. Интерфейсам на vtbl нужно заполнение vtbl. Данные типа, доступные в рантайме, им не нужны. (Конечно, кроме гуида, имени библиотеки, разных флагов и пр. )
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[10]: Про идеальный ЯП
От: korvin_  
Дата: 30.07.24 14:24
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>В C++ интерфейсы это про vtbl. В C# и Java интерфейсы это про данные типа, доступные в рантайме. Интерфейсам на vtbl нужно заполнение vtbl. Данные типа, доступные в рантайме, им не нужны. (Конечно, кроме гуида, имени библиотеки, разных флагов и пр. )


Какие данные типа.
Re[11]: Про идеальный ЯП
От: Alekzander  
Дата: 30.07.24 14:32
Оценка:
Здравствуйте, korvin_, Вы писали:

A>>В C++ интерфейсы это про vtbl. В C# и Java интерфейсы это про данные типа, доступные в рантайме. Интерфейсам на vtbl нужно заполнение vtbl. Данные типа, доступные в рантайме, им не нужны. (Конечно, кроме гуида, имени библиотеки, разных флагов и пр. )


_>Какие данные типа.


Type.IsInterface.
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[10]: Про идеальный ЯП
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 30.07.24 15:05
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>Интерфейсам на vtbl нужно заполнение vtbl. Данные типа, доступные в рантайме, им не нужны. (Конечно, кроме гуида, имени библиотеки, разных флагов и пр. )


Для чего "интерфейсам на vtbl" могло бы потребоваться перечисленное?
Re[10]: Про идеальный ЯП
От: so5team https://stiffstream.com
Дата: 30.07.24 15:22
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

S>>Господин Музыченко 30 лет живет в уютном мире Windows и компиляторов от Microsoft. Поэтому то, что есть в VC++ для него есть и в C++.


ЕМ>Не, господин Музыченко краем уха слышал, что бывают какие-то другие платформы и компиляторы, у него есть даже пара версий GCC, и он иногда ходит на godbolt.


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

ЕМ>А пример с VC++ показателен тем, что расширения, однажды введенные разработчиками компилятора для собственных нужд, нередко становятся стандартом де-факто. И в стандарты C++ что-то притащили из бывших локальных расширений от Borland, MS и GNU.


Но есть нюанс: когда что-то включается в язык (вроде [[likely]]), то это перестает быть расширением. А до того это именно что расширение, которого нет в C++. И тем, кто пишет под несколько платформ, с этим приходится считаться. Но в вашем манямирке этого, очевидно, нет.
Re[11]: Про идеальный ЯП
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 30.07.24 15:54
Оценка:
Здравствуйте, so5team, Вы писали:

S>тем, кто пишет под несколько платформ, с этим приходится считаться.


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