Pull to refresh
12
0.8

Пользователь

Send message

 язык - простой, писать на нем программы - сложно

 Го - простой язык. Самый простой, пожалуй, из существующих энтерпрайзных языков.

Он не в понимании простой, он по своей организации простой

С этим я вполне могу согласиться. Я думаю мы даже в каком-то смысле говорим обо одном и том же, просто изначально вкладывая в понятие "простота" несколько разные смыслы.

Во-первых я бы не сказал что спорные заявления типа "в других языка нет каналов" это ответ по существу.

Во-вторых фразы "эко вас порвало", "жену кто увёл" говорят скорее о том, что "порвало" вас, раз вы не можете сохранить нормальный тон дисскусии и переходите на хамство. Вы бы еще про "мамку" что-нибудь написали, стыдно должно быть, вот он, уровень аргументации GO разработчиков.

  1. "Го - простой язык"

  2. Четыре абзаца текста про специфику, которую "надо знать, а не экстраполировать свой предыдущий опыт

Выглядит убедительно, да. Ну тогда и С++ простой язык, просто у него есть своя специфика, которую надо знать.

языке 21 ключевое слово

В брейнфаке 7 ключевых слов(символов). "Простота" программ на нем удивительна. Но вообще да, придумать собственное определение простоты и потом с ним заявлять что ты всех "победил" - отличный маркетинговый прием.

ровно 21 грабля

Если у вас на каждое ключевое слово в языке заложено по проблеме это не звучит как что-то хорошее. Ну и про "ровно" - особенности preemptive и cooperative шедулинга они к каком ключевому слову относятся? А network poller starvation на большом числе сокетов это какое слово?

С ними-то откуда непонимание, если у соседей их просто нет

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

Сколько грабель закопано в C#, Java, C++, PHP и т.д. - науке пока не известно.

Эти языки никто и не называет "удивительно простыми".

линукс это неприлично написаная система или что вы сказать хотели то?

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

Паскаль простой язык. Но да, вряд ли вы захотите на нем писать сложный энтерпрайз код.

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

Большое это сколько? Опять же, у меня есть знакомые, которые наоборот перешли с го на .net с аргументацией что на C# писать проще(за счет библиотек, синтакс сахара, linq и т.д.). А есть те, кто с го перешел на kotlin, тоже имея свои резонные причины. Мы так просто упремся в anecdotal evidence. На мой взгляд го это хороший инструмент для определенных задач и он точно внес свой вклад в развитие разработки как таковой, занял свою нишу, но его маркетинг склонен несколько преувеличивать его достоинства, вроде простоты разработки и универсальности.

Однако так ли велико количество и "глубина" этих подводных камней в сравнении с другими языками?

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

Смотрите, мы же начали с того, что "Go простой язык" и вы сами попросили примеры того, где все совсем не так просто. Речь тут не про то, что условный C# понятнее или нет, а про то, что широко рекламируемая "простота" Go обманчива и там тоже есть свои подводные камни, как и в других языках.

1) Так в первом примере что выведет, 2 или 4? И почему это ожидаемо?

2) Дело не в том пустой интерфейс или нет, а в том, что у него появляется значение, даже если туда присвоить пустой указатель. И это абсолютно неочевидно, очередной пункт, что надо просто "знать". И кейс с выстрелом себе в ногу может быть тривиальным и бытовым:

func do(in MyInterface) {
	fmt.Println(in == nil)
	if in != nil {
		in.Do()
	}
}

type MyInterface interface {
	Do()
}

type MyData struct {
	name string
}

func (c *MyData) Do() {
	fmt.Println("Do from MyData", c.name)
}

func main() {

	do(nil) // true
	var data *MyData = nil
	do(data) // false and panic
}

Да начиная от того, как работают каналы(что будет если прочитать/записать в закрытый канал, а если в nil) и заканчивая особенностями ΙΟ операций в горутинах, мультиплексером, парковой треда на сисколах и т.д. Да даже на уровне читабельности кода, есть вещи, про которые если не знаешь, то не догадаешься. Ну пример:

Что будет выведно на экран?

func main() {

  var i int = 1

  defer fmt.Println("result =>",func() int { return i * 2 }())

  i++ 

}

А тут?

func main() {
  var data *byte
  var in interface{}  
 
  fmt.Println(in, in == nil)
  
  in = data

  fmt.Println(data, data == nil)
  fmt.Println(in, in == nil)
  fmt.Println("eq", data == in)
}

Даже если создать миллион таких тасок, они займут минимальное количество памяти(чуть больше 24 мегабайт), так что в таком варианте теста .net всеравно будет выигрывать. Есть даже статья как раз с таким замером, но несовсем корретным кодом

https://pkolaczk.github.io/memory-consumption-of-async/

У вас принципиально разные алгоритмы. Один создает миллион горутин, по 2 килобайта каждая, это 2 гига памяти и выполняет на M:N шедулере, а другой выполняет стрим задач из генератора на пуле потоков размером в количество ядер, так что затраты на память и оркестрацию минимальны. В принципе из-за разной асинхроной модели сранить перфоманс го и .net очень сложно, в зависимости от вида бенчмарка будет выигрывать то один, то другой.

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

Это не полумера, так как сложность написания кода на языке с GC и без очень сильно различается

Ну измерения так всеравно не делают, надо делать показательную выборку и смотреть перцентили, модальность, ошибку, доверительный интервал, коэфф экцесса и т.д., а не только среднее и мин/макс.

Так у го нет виртуальной машины

А чем продиктовано такое решение?

А вторая на excel

Вы буквально хотите чтобы я вам бесплатно юридическую консультацию проводил с примерами реальных дел? Это с учем что дела по гостайне идут в закрытых слушаньях. И все это чтобы что-то вам доказать? Да живите как хотите, делайте что хотите и будьте уверены в своей правоте, заминусованый вы наш, мне глубоко плевать на вас, на вашу жизнь и ваш непрофессионализм. Удачи.

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

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

Привем тут среды окружения и отключение применения патчей безопастности нулевого дня на проде? Что значит "про среды знаю" - т.е. вы даже никогда не работали с ними, просто где-то слышали? Зачем вы вообще что-то тут пишите - идите учитесь.

Information

Rating
1,655-th
Location
Саха (Якутия), Россия
Date of birth
Registered
Activity