Так что "искусственность" вызвана лишь тем, что за последние 40 лет просто ничего лучше не придумали.
Что до Go - у этого языка весьма специфическая сфера применения - это в основном web, распределенные системы и все что связано с эффективной работой с I/O.
А вот для вычислений пока круче Си ничего нет, увы.
Убедили посмотреть в сторону Go, какие там проблемы могут возникнуть
package main
import "fmt"
func f() int
{
return 1
}
func main() {
fmt.Println(f())
}
go fmt
Никакую шлифовку С годами не проходил. Так как должен был сделовать единожды придуманном правилам.
И сделали это весьма неаккуратно. В результате порождена целая плеяда подстандартов - и в настоящее время одна и та же программа может даже не скопилироваться на различных компиляторах.
Пожалуйста, скомпилируйте это под FreeBSD 10
Requirements
C++11/14/17 compiler (yep, using C++17 opens additional functionalities).
Boost.Thread - for TLS.
Ага. Отстрелить себе ногу с помощью Си - расхожая программистская пословица.
Сам же язык весьма и весьма ограничен в изменениях - иначе не будет совместимости.
Тому кто всю жизнь пишет ХелоуВорды - не понять реальные проблемы.
Большие серьезные программы читает множество людей.
Программные библиоки - читает множество людей.
Программу нужно писать так, чтобы ее легко читали другие люди - твои коллеги.
Вы, очевидно, не работали в коллективах, где уделяют внимание взаимозаменяемости программистов
Во многих компаниях есть еще более жесткие правила - например, обязательное именование переменных в camelCase.
У нас пока программа не пройдет проверку линтерами, которые еще более жесткие ограничения ставят на стиль - ты просто не имеешь право претендовать на зарплату.
Ты попробуй напиши хоть одну программу, которая проживёт хотя бы лет пять. У тебя не получится, любой первый конкурент (если они вообще будут) выместит твою программу своей более улучшенной.
Ты попробуй напиши хоть одну программу, которая проживёт хотя бы лет пять. У тебя не получится, любой первый конкурент (если они вообще будут) выместит твою программу своей более улучшенной.
В том-то и дело, что во многих компаниях ты можешь подобрать себе удобный стиль и принять его. А здесь тебе просто берут и предлагают топорные свои личные предпочтения, которые невозможно поменять (через настройки), и надо писать свои средства. А у меня нет на это времени - сидеть и за них писать. Так встроенные утилиты можно просто выкинуть, потому что они не меняются, они для толпы сделаны, для среднестатистического школоло.
Ну, и правильно сделано, а то какой-нибудь дворник во время перерыва вклинится и станет писать что-нибудь от имени члена команды.
Докажи что у C все хорошо со стандартизованностью.
Скопилируй под FreeBSD 10
Это вполне рабочий проект - используется в Yandex в production.
На Go даже более объемные вещи компилируются с полпинка.
Фактически, MSVC - один из самых значимых компиляторов.
Кроме формальных стандартов есть еще и неследование компиляторов этим стандартам.
struct x {
int x;
};
C Go подобное проходит с полпинка. И даже под MacOSX и Windows.
Ну, возьми каталог /bin у себя в системе, вот он на C практически весь. Воспроизведи его на Go - и ты поймёшь, что когда десять маленьких программок весят двадцать мегабайт - это как-то не того. А на C они весят сто килобайт. Это вот тоже новшество Go, а вопрос такой - а почему это не настраивается? Может, я не хочу метровые программки.
Вот они его и выпустили наскоряк, так как уже старые и побоялись, что могут просто не успеть на старость лет выпустить шедевр. Плюс ещё всё это под эгидой Google, а Google свою бизнес-политику ведёт по принципу, как бы захватить рынок того и сего. Понимаешь, тут о качестве речь не идёт, ими движут совсем другие мотивы. Потому-то всё и сделано через одно место.
А чем ты объяснишь мотивацию независимых от Google крупных корпораций?
Почему "не пошла"? Plan 9 уж лет 30 как существует.
Программы, написанные на Си, маленькие только с одного бока - они тянут за собой при запуске здоровенные библиотеки *.so/*.dll.
Есть мода на всё новое. Вот сейчас выходит Swift - тоже сырая очередная фигня. Но его сейчас тоже начнут активно юзать. Это как джинсы клёш. Что они гораздо лучше других штанов? Да ничего подобного, поэтому сегодня в них никто и не ходит.
Они ссылаются на то, что якобы разные версии библиотек доставляют проблемы, поэтому они всё включают в каждую программу (слитно/раздельно - неважно). Но почему я не могу выбрать, как мне удобно? Почему какой-то дядька (который идёт ещё и в ногу с Google'ом - далеко не гуманитарной компанией) за меня решает, как мне программы писать и распространять?
Я пытался поставить, она не встала на железо. Это говорит о чём?
Использование компилятора cgo вместо компилятора go позволяет получать маленькие программы, написанные на Go, которые также как и программы на Си, будут требовать для своего запуска библиотек *.so/*.dll
Такие распростаненные ОС как VmWare ESX или MacOSX или Solaris - тоже далеко не на всяком железе запускаются.
А у меня вот не завелась на ноутбуке MacOSX.
Стив Джобс плохой или все же тот, кто не смог запустить его ОС недостаточно квалифицирован?
Роб Пайк плохой или все же тот, кто не смог запустить его ОС недостаточно квалифицирован?
Так это предлагается писать в Go на C для запуска кода из сишных библиотек.
То есть это не написание кода на Go с библиотеками на Go. Вот сделай десять программ на Go с одной разделяемой библиотекой, которая тоже должна быть на Go и использовать многопоточность. Вот этого нет. А вместо этого ты должен делать что? Правильно, сишную прослойку.
Вот сделай десять программ на Go с одной разделяемой библиотекой, которая тоже должна быть на Go и использовать многопоточность. Вот этого нет.
Как-то похоже это больше на надстройку. Мелковата она для ОС.
Haskell, Erlang - функциональные концепцИИ, далеко оторваннЫЕ от массового программированИЯ, которОЕ в большинстве своем императивное.
Не выдумывайте. Это всего лишь компилятор.
Cgo enables the creation of Go packages that call C code.
Хочешь уменьшить размер бинарного файла, используя тот же метод как и Си - с dll/so - используй один компилятор.
Доводы кончаются? Начали с размеров файлов, атеперь вам многопоточность не нравится?
Не выдумывайте, то, чего не знаете.
Но тем не менее, вам никто не мешает использовать раздельные пакеты и на серверах, возможность это в компиляторе присутствует. Будете единственным оригиналом.
Разумеется, если ты хочешь использовать модель многопоточности Go то это должны быть пакеты именно на Go
А вы прочитали раздел "требования к железу" к Plan 9?
Все до единой Linux какими бы непохожими они не были - строго говоря не ОС, а надстройки над общим для всех ядром Linux
Ну, там же написано
Cgo enables the creation of Go packages that call C code.
Или ты ещё и перевести не в состоянии?
Cgo enables the creation of Go packages that call C code.
Так мне не нужны сишные библиотеке в Go, мне нужны нативные библиотеки - чтобы и основной код на Go писался, и код библиотеки на Go писался. А потом всё это собиралось и связывалось.
Я могу её поставить, но нужно ли это, если она не встаёт туда, куда встаёт десять не самых распространённых систем? Значит, там и внутри не густо.
У тебя есть одна библиотека, а пользоваться ею могут тысячи программ. За счёт этого тебе не нужно включать код библиотеки тысячу раз. А место на дисках я лучше использую для чего-нибудь более полезного. Если ты не понимаешь, что у тебя должен быть выбор и что программа должна быть компактна, - ну, покупай себе диски постоянно, купи себе целую компьютерную сеть и кабинет к ней, а то не хватит.
Ну, что ты ахинею несёшь-то? Ты не понимаешь, что тот же набор программ из /bin такой небольшой по размеру только потому, что использует общие библиотеки? Открой для себя программу ldd.
Учи лучше Хаскель - то отточен гораздо лучше, долгими десятилетиями и имеет меньше архитектурых косяков.
Восторгаться красотой языка ради самого языка - это удел новичков.
Не закапывайтесь в накоплении знаний, в изучении 100500 языков. Прикладывайте ваши знания к настоящему делу.
Путаетесь. Временем проверен совсем не язык, а компилятор.
Не работающий над большими проектами и не знающий о боли в них, которую привносит скобка не на той строчке.
Привыкай, ты пишешь не для себя. Ты пишешь, чтобы твой код читали. Другие разработчики.
Без прохождения этого линтера твою программу не примут, например
и в базовый комплект входит go fmt - очень облечает жизнь.
Ты мыслишь мерками прошлого века - как раз тех времен, когда был придуман Си.
Во всей современной разработки ПО наводят единообразие. Для всех языков. Это существенно повышает производительность труда.
Это позволяет разработчикам не решать одни и те же проблемы по тысячу раз
Я думаю, если тебе для этого надо компилятор специальный (в котором это даже отменить нельзя), то не так уж всё прекрасно в королевстве датском.
А у тебя другие разработчики так же пишут, как и ты? Прямо сидите в клетках и пишете всё так, как скажут? Запомни, программирование - это свобода. А когда ты пишешь по указке всегда и всё время, то твои проекты рано или поздно закрывают как нерациональные. Ты писал что-то пять лет, а какой-то менеджер решил это выкинуть - ну, я поздравляю тебя. Ты - как бомж, собирающий картон на свалке. Твой код - это просто картон, который нахрен никому не нужен. Ну, выплатят копейки тебе, но, по сути, что ты сделал за эти пять лет?
Да мне похрену, как ты не можешь понять. Я запустил свою программу и пользуюсь ею годами. Кому-то ещё передал и люди пользуюутся ею и дела свои решают со стократной скоростью. Вот я тебе привёл jabber в пример - это вообще свободная программа, никакие линтеры там не нужны, а работает и безотказно. А другой парень придумал язык, на котором всё это написано, тоже без всяких линтеров. Открой для себя программирование. Программирование - это создание программ, а не когда ты там кому-то что-то на блюдечке преподносишь и тебя хвалят.
Этот fmt практически никак не настраивается. Это программа, она должна настраиваться по максимуму, но они не стали её делать такой, они её быстро выпустили, чтобы было похоже на правду.
Длинные, километровые строки повышают производительность труда? По-моему, их, наоборот, сложно воспринимать. А когда ты сидишь и думаешь, куда поставить скобку у функции - это как-то не того. Когда синтаксис от кода отвлекает. Нет, ты должен думать, куда поставить скобку, а не как алгоритм оптимальнее реализовать. А ты не пробовал перебрать двумерный массив двумя циклами for? Там очень много букв для этого надо писать. Кстати, на Go очень много надо вручную писать, потому что готовых вещей нет, прямо как в C было всегда, странное совпадение, да? Вроде всё так современно, а вроде и не очень. Прямо такой граф в трусах и шляпе. С одной стороны - новейшие интерфейсы, прорывная технология, с другой стороны - нельзя отнаследовать какой-нибудь сложный тип. Хочешь отнаследовать - пиши новую сложную копию. Исключений нет - это прорыв, но тут же надо сидеть и думать, как обработать ошибку, которой там нет вообще (затычки в виде подчёркиваний остаются по всему коду).
Никто не мечтает ковырать твой уникальный код. Его просто выкинут. Вместе с тобой.
С одной стороны - новейшие интерфейсы, прорывная технология, с другой стороны - нельзя отнаследовать какой-нибудь сложный тип. Хочешь отнаследовать - пиши новую сложную копию. Исключений нет - это прорыв, но тут же надо сидеть и думать, как обработать ошибку, которой там нет вообще (затычки в виде подчёркиваний остаются по всему коду).
type A struct { aaa int } type B struct { A bbb string } var z B z.aaa = 5 z.bbb = "aaa"
Хорошие пояснения, почему в Go так, а не иначе по сравнению с другими языками
Скажи, начинающий программист, тебя не смутило, что все эти вещи уже существуют в других языках и изобретать-то ничего и не нужно? То есть отказались от них осознанно.
Мне вот, программировавшему много лет на языках
Я помню как прёт от программирование в начале изучения. Какое чувство, что можешь перевернуть мир.
И те, кто придумали все эти линтеры и пр. - придумали их не с бухты барахты.
Но то, что имеет отношение к сдаче результата в определенной форме, то, что проходит автоматическое тестирование - здесь вольности невозможны.
Ты не понял идею. Он и не должен настраиваться.
Это я читал давно, рассуждения в плане "нужно отказаться от ООП, не так уж оно и хорошо". Они отказались от ООП потому, что на его разработку нужно много времени. Кстати, Rust не отказывался от ООП, исключений и так далее, потому что им не жалко на это времени. Лучше один раз хорошо написать, чтобы потом не доделывать.
Давай, от человека, который может ходить, отнаследуй человека студента и человека старика, а от человека студента отнаследуй хромого студента, а от человека старика отнаследуй человека старика с палочкой, на которую он опирается. И потом от человека старика с палочкой отнаследуй хромого человека старика с палочкой. Посмеёмся вместе, методы не забудь.
А потом с людей всё это измени на машины (ты же не должен для машин всё заново писать).
А ты видео не смотрел, где у Пайка спрашивают, как обрабатывать ошибки, если код становится чуть посложнее? Они там у него спросили, как бы всё проверить сразу, а не писать на каждую проверку if, и он им там предложил структуру создать, которая включает ошибки и накапливает результат (имеет побочный эффект). В общем, посмотри, там есть где посмеяться.
Ну, оно у тебя не задалось - ты пошёл на работу, которая съедает всё время, где творчество не нужно. Можно с важным видом ходить только и говорить, что программировал N лет.
Но ты-то не придумал линтер, ты пользуешься чужим линтером. Своих программ у тебя нет и не будет. Для этого нужен опыт, а для опыта нужно время. А ты его вбухиваешь в чужие дела. Поэтому ты никогда не будешь слитно писать. А уж говорить о своём браузере тем более не приходится, для этого не только опыт нужен, но и большое количество времени на саму разработку. А у тебя нет ни того, ни другого. Как ты думал, у тебя само собой появится что-нибудь?
Программа должна настраиваться по максимуму. Максимальная параметризация должна быть, чтобы можно было настроить всё и про всё. Тогда она становится достаточно гибкой для встраивания во всевозможные системы. Ну, давай, подай на go fmt по каналу исходник так, чтобы на выходе (в поток вывода) он оттранслировался таким образом, чтобы отступ был двухпробельный. Сначала табуляцию в два пробела, а потом два пробела в табуляцию. Ведь даже такое простое действие не сделаешь.
package main
import "fmt"
type A struct {
n int
}
type B struct {
A
s string
}
func (self A) F() string {
return "f"
}
func (self B) G() string {
return "g"
}
func main() {
var b B
b.n = 1
b.s = "a"
fmt.Printf("Test %v %v %v %v\n", b.n, b.s, b.F(), b.G())
}
[guest@localhost go]$ go run inh.go
Test 1 a f g
[guest@localhost go]$
[guest@localhost go]$ go run inh.go
# command-line-arguments
./inh.go:25: cannot use 1 (type int) as type A in field value
[guest@localhost go]$
b = B{1, "a"}
Из опыта программирования на разных языках, говорю тебе, что гораздо чаще используешь чужие классы. Свои не особо и нужны.
Даже не вникал. Давай, ты свои зачеты/экзамены сам будешь решать.
Мне так удобнее.
Да-да-да, не решать одну и ту же проблему, особенно простой перебор какой-нибудь чего-нибудь. Ввод строки из консоли. Ну, напиши простую grep на Go, выложи код, посмеёмся вместе (если тебе начальник разрешит твоё время потратить).
А это обычное явление для Go - он просто кривой. И такая кривизна там повсюду, это не единственное место.
Лови готовый. Grep на стероидах, написанный на Go.
1> io:get_line([]).
abc def ghi
"abc def ghi\n"
2>
Как-то пришло ко мне на работу 2 начинающих программиста.
Один - полная копия вас.
во-вторых, вы не угадали - 20 лет в ИТ.
Собственно, что вы хотите доказать дураку, пусть стоит на своём, проще оставить его чем тратить своё время
Сложилось мнение, что ты постоянно хочешь какого опустить или доказать, что он не соответствует тому уровню о котором заявляет