Size: a a a

Compiler Development

2020 May 10

DS

Doge Shibu in Compiler Development
Михаил Бахтерев
Фишка мелких утилиток, на которые Go и рассчитан, в том, что, ну, не нужно там 20 вариантов min на все случаи жизни. Обычно, парочки хватает. И обычно, они, всё-равно специализированные какие-нибудь под нужды конкретной утилиты, и их, всё равно, необходимо писать. Что проще: написать специализированный min или же реализовать класс Ord для того, чтобы воспользоваться полиморфным, поимев с этого все проблемы с неявной передачей словарей? Я вот не знаю.
Так проблема не в конечных приложениях, а в библиотеках, где такой расширяемый код как раз и необходим для удобного UX их использования
источник

M

MaxGraey in Compiler Development
Andrei Kurosh
Вот в дотнете была такая же история. Там есть 16 вариантов Func, Action, Tuple и тэдэ - по количеству аргументов. Когда предложили ввести variadic generics, чтобы сделать это как следует, мейнтейнеры сказали «ну это дофига пилить придется, а так оно костыльненько но работает»
Вот лентяи! Ждут пока меинтейнеры F# придут и все за них сделают)
источник

p

polunin.ai in Compiler Development
Михаил Бахтерев
Как переиспользовать? Вот есть у меня, условно, grep - она строки молотит в файлах. А есть какая-нибудь xinetd, которая соединения пробрасывает. Функциональность очень разная. Всё разное. Не понятно, что можно переиспользовать.

Это концепция unix. Система специально так проектировалась, чтобы можно было изолировать домены ответственности и домены ошибок в небольших независимых, ортогональных по функциональности, процессах, чтобы в целом всё работало стабильнее.

Противоположностью к unix, кстати, были lisp-машины, в которых всё было монолитно, один image на всё, общий код и т.д. и т.п. Ну и где сейчас lisp-машины?
для таких низкоуровневых задач лучше Rust взять, зачем го? тот же grep написанный на расте пока самый быстрый grep (на всем диком западе)
источник

VS

Vasily Shapenko in Compiler Development
MaxGraey
Вот лентяи! Ждут пока меинтейнеры F# придут и все за них сделают)
Сайма на всё не хватит, к сожалению
источник

p

polunin.ai in Compiler Development
Andrei Kurosh
1. Функция вида printf может и должна иметь сколько хочешь аргументов, а не только 16
2. Это факт, просто аналогичная ситуация на другом уровне )
часто у вас была нужда написать обобщенный printf?
источник

AK

Andrei Kurosh in Compiler Development
MaxGraey
Вот лентяи! Ждут пока меинтейнеры F# придут и все за них сделают)
Да в языке-то сделать не проблема, умельцы найдутся, а вот внести правки в CLR и Reflection API никто не даст
источник

p

polunin.ai in Compiler Development
я думаю что это очень специфический кейс. в большинстве же случаев отсутсвие variadic generics бъет сильно только на коллекции.
источник

AK

Andrei Kurosh in Compiler Development
polunin.ai
часто у вас была нужда написать обобщенный printf?
В стандартной библиотеке таких вариантов много. Обычно решается боксингом к object[], что вызывает аллокации
источник

AK

Andrei Kurosh in Compiler Development
Инфраструктурных сторонних вариантов тоже можно кучу привести - всякие фреймворки для моков/тестирования, логгеры, ормки, короче много кому пригодится. Я сам писал недавно утилиту для частичного применения Expression<...> и запарился копировать 8 вариантов
источник

p

polunin.ai in Compiler Development
что вы хотите сказать? что лучше отсутсвие обобщений чем их хоть какое-то наличие?
источник

p

polunin.ai in Compiler Development
ну и частично можно покрыть с помощью HList, если в языке есть нормальные тип-суммы.
источник

В

Вафель in Compiler Development
Для HList'а нужны же только дженерики, не?
источник

МБ

Михаил Бахтерев... in Compiler Development
polunin.ai
для таких низкоуровневых задач лучше Rust взять, зачем го? тот же grep написанный на расте пока самый быстрый grep (на всем диком западе)
Лучше по какой метрике? Go предлагает простую модель программирования, и за счёт этого задачи решаются быстрее. Можно научить Go девочку-дизайнера одежды (ну, хорошего дизайнера с аналитическим мозгом), и она сядет писать систему примерки платьев (видел такие стартапы на конкурсе). Можно ли научить эту девочку Rust? Можно, наверное, но не забудет ли она при этом, как шить? Сколько времени займёт обучение? Как быстро обойдут её конкуренты на Питончике? Для жизни - это архиважные вопросы.

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

AK

Andrei Kurosh in Compiler Development
polunin.ai
что вы хотите сказать? что лучше отсутсвие обобщений чем их хоть какое-то наличие?
Нет, я хочу сказать совершенно другое. Всегда будут фичи, которые кому-то хочется впилить, но не всегда эти фичи экономически и идеологически оправданы. Обобщений в го нет - это общеизвестный факт. Но есть люди, кого это не смущает, они копипастят код и живут себе припеваючи в своем неведении - ну и на здоровье. А те, кого это не устраивает, уходят в более продвинутые языки. И все довольны
источник

МБ

Михаил Бахтерев... in Compiler Development
Andrei Kurosh
Нет, я хочу сказать совершенно другое. Всегда будут фичи, которые кому-то хочется впилить, но не всегда эти фичи экономически и идеологически оправданы. Обобщений в го нет - это общеизвестный факт. Но есть люди, кого это не смущает, они копипастят код и живут себе припеваючи в своем неведении - ну и на здоровье. А те, кого это не устраивает, уходят в более продвинутые языки. И все довольны
+1
источник

ИЧ

Илья Чистяков... in Compiler Development
Doge Shibu
Так проблема не в конечных приложениях, а в библиотеках, где такой расширяемый код как раз и необходим для удобного UX их использования
это актуально только для редких либ и фреймворков, живущих на гитхабе, гуглу не оч интересно что там во внешнем мире, а внутренний код обобщить сложно, если и получается, то выгода очень сомнительная, слишком мало потребителей, чтоб окупилась сложность версионирования, документирования и цена наращивания функционала
источник

DS

Doge Shibu in Compiler Development
Илья Чистяков
это актуально только для редких либ и фреймворков, живущих на гитхабе, гуглу не оч интересно что там во внешнем мире, а внутренний код обобщить сложно, если и получается, то выгода очень сомнительная, слишком мало потребителей, чтоб окупилась сложность версионирования, документирования и цена наращивания функционала
Ну проблема в том, что го вышел за пределы гугла и используют его не так, как это изначально задумывалось где-то внутри.
источник

ИЧ

Илья Чистяков... in Compiler Development
Doge Shibu
Ну проблема в том, что го вышел за пределы гугла и используют его не так, как это изначально задумывалось где-то внутри.
верно, поэтому вокруг него столько непонимания, и идеи светлого будущего с Go2
источник

ИЧ

Илья Чистяков... in Compiler Development
Илья Чистяков
верно, поэтому вокруг него столько непонимания, и идеи светлого будущего с Go2
кстати возможно Go2 способен заменить Go1, сложно теоретически прикинуть какой минимум у языка должен быть, чтоб всё сложилось
источник

а

акварель на мету... in Compiler Development
как можно переалокейтить объект в плюсах?
источник