8,7 Мб, 3888x2592
Почему бы не почувствовать себя language дизайнером и не пофантазировать на тему разработки собственного языка?
Так в моем яп сущностью первого класса будет выражение (expression), соответственно авто return и авто yield, что-то типа
List<Int> mul2 = for i <- [1..5] => i 2
Да кстати помимо обычного фора я наконец, первым в мире, сделаю отдельный цикл без переменной который просто повторяется n раз:
5 times => print("blabla")
=> используется только если блок состоит из одной строки, иначе {} и стрелка уже отсутствует.
Конечно надо делать язык с моделью конкурентности а-ля Go, причем без простых вариантов заюзать потоки операционной системы. Это должно быть не просто библиотекой, а именно основой языка, чтобы все IO-библиотеки использовали эту модель. Я предлагаю синтаксис ~имя_функции() для спавна корутины/легкого потока (вместо ключевого слова go из одноименного языка. Надо изучить возможность реализовать (без сильных потерь производительности) реализацию принудительного закрытия легкого потока и других операций, если получится, то спавн легкого потока должен возвращать объект для управления им:
sendRequest(s String) {
resp := Http.get(s)
println("content type: ", resp.headers.contentType)
}
t := ~sendRequest("https://google.com/")
sleep(1500)
if t.isRunning {
t.shutDown()
println("Server took too long to respond.")
}
Разумеется в языке должны быть указатели, в целом это база. Но предлагаю использовать символы ^ и @ соответственно, как в Object pascal. Звездочка - это знак умножения, & - логическое и. По этой же причине есть искушение сделать символом комментария решетку, а многострочный коммент - ###.
Должны быть дженерики (в том числе в рантайме), встроенная библиотека коллекций с соответствующими методами для программирования в функциональном (полу-функциональном) стиле, как в джаве начиная с 8. Я бы также полностью избавился от массивов, заменив их листами (с возможностью произвольной индексации []). Также я бы добавил такой синтактический сахар для перебора коллекции
print2x(x int) => println(x 2)
List<Int> list = [1,2,3,4]
x<-list => print2x(x)
<-list => print2x //то же, что выше
m := Map<Int, String>[
1 -> "one"
2 -> "two"
] //автоматическое определение типа перемнной
k, v <- m => println(k, "'s name is ", v)
Еще очень хочется модульный рантайм, чтобы компилятор вырезал буквально каждую неиспользуемую функцию, либо на крайний случай заменял их пустыми стабами. Плюс хорошо бы добавить аннотацию likely, чтобы была возможность влиять на бранч предиктор.
В целом надо так продумать язык, чтобы легко и непринужденно реализовать хотя бы самые популярные монады по типу Maybe, Option, Either без их ручного вкручивания в синтаксис. Как минимум нужные юнион типы, нормальные перечисления (а не мусор как в упомянутом Go), ковариантность. Полноценные кортежи. И сделать классы, интерфейсы и это вот все, люди хотят писать ООП код, а не прикручивать функции к структурам (для этого существует C). Value классы тоже нужны, как аналог структур, уже с готовыми конструкторами и прочими операциями. Помимо всего прочего частью концепции языка должно быть то, что программист должен писать код, выражающий его идею и минимум постороннего/бойлерплейта.
Без переопределения операторов тоже никуда.
Иммутабельность по умолчанию для переменных, всякие val-let'ы, ключевое слово mut - это мусор, если значение не изменяется, его нужно объявлять как const. Нужно сделать что-то типа глубокой константы или как это назвать, чтобы было не как в js, а в объекте-константе нельзя было менять значения полей.
Так в моем яп сущностью первого класса будет выражение (expression), соответственно авто return и авто yield, что-то типа
List<Int> mul2 = for i <- [1..5] => i 2
Да кстати помимо обычного фора я наконец, первым в мире, сделаю отдельный цикл без переменной который просто повторяется n раз:
5 times => print("blabla")
=> используется только если блок состоит из одной строки, иначе {} и стрелка уже отсутствует.
Конечно надо делать язык с моделью конкурентности а-ля Go, причем без простых вариантов заюзать потоки операционной системы. Это должно быть не просто библиотекой, а именно основой языка, чтобы все IO-библиотеки использовали эту модель. Я предлагаю синтаксис ~имя_функции() для спавна корутины/легкого потока (вместо ключевого слова go из одноименного языка. Надо изучить возможность реализовать (без сильных потерь производительности) реализацию принудительного закрытия легкого потока и других операций, если получится, то спавн легкого потока должен возвращать объект для управления им:
sendRequest(s String) {
resp := Http.get(s)
println("content type: ", resp.headers.contentType)
}
t := ~sendRequest("https://google.com/")
sleep(1500)
if t.isRunning {
t.shutDown()
println("Server took too long to respond.")
}
Разумеется в языке должны быть указатели, в целом это база. Но предлагаю использовать символы ^ и @ соответственно, как в Object pascal. Звездочка - это знак умножения, & - логическое и. По этой же причине есть искушение сделать символом комментария решетку, а многострочный коммент - ###.
Должны быть дженерики (в том числе в рантайме), встроенная библиотека коллекций с соответствующими методами для программирования в функциональном (полу-функциональном) стиле, как в джаве начиная с 8. Я бы также полностью избавился от массивов, заменив их листами (с возможностью произвольной индексации []). Также я бы добавил такой синтактический сахар для перебора коллекции
print2x(x int) => println(x 2)
List<Int> list = [1,2,3,4]
x<-list => print2x(x)
<-list => print2x //то же, что выше
m := Map<Int, String>[
1 -> "one"
2 -> "two"
] //автоматическое определение типа перемнной
k, v <- m => println(k, "'s name is ", v)
Еще очень хочется модульный рантайм, чтобы компилятор вырезал буквально каждую неиспользуемую функцию, либо на крайний случай заменял их пустыми стабами. Плюс хорошо бы добавить аннотацию likely, чтобы была возможность влиять на бранч предиктор.
В целом надо так продумать язык, чтобы легко и непринужденно реализовать хотя бы самые популярные монады по типу Maybe, Option, Either без их ручного вкручивания в синтаксис. Как минимум нужные юнион типы, нормальные перечисления (а не мусор как в упомянутом Go), ковариантность. Полноценные кортежи. И сделать классы, интерфейсы и это вот все, люди хотят писать ООП код, а не прикручивать функции к структурам (для этого существует C). Value классы тоже нужны, как аналог структур, уже с готовыми конструкторами и прочими операциями. Помимо всего прочего частью концепции языка должно быть то, что программист должен писать код, выражающий его идею и минимум постороннего/бойлерплейта.
Без переопределения операторов тоже никуда.
Иммутабельность по умолчанию для переменных, всякие val-let'ы, ключевое слово mut - это мусор, если значение не изменяется, его нужно объявлять как const. Нужно сделать что-то типа глубокой константы или как это назвать, чтобы было не как в js, а в объекте-константе нельзя было менять значения полей.
>>43930 (OP)
Очень плохо
Это константы
Чатгопота снова генерирует развлекательный контент на потеху посетителям социальной сети для тинейджеров?
>if govno.isMocha() { взять(копьё); убить(мамонта); }
>sendRequest http moveJson() paintButton()
Очень плохо
>Иммутабельность по умолчанию для переменных
Это константы
Чатгопота снова генерирует развлекательный контент на потеху посетителям социальной сети для тинейджеров?
Обновить тред