Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!

for (Refer refer: list){if (refer != null && refer.isNotEmpty()){if (id.length() != 0) id.append("-"); id.append(refer.getId());if (hierarchy.length() != 0) hierarchy.insert(0, " / ");hierarchy.insert(0, name); name = refer.getName();}}
WHILE ch # 0X DO WHILE (ch > 0X) & (ch < 0FCX) DO INC(ad, ORD(ch)); INC(ref); RefNum(ref, d); IF ad > codePos THEN RETURN pos END; INC(pos, d); S.GET(ref, ch) END; IF ch = 0FCX THEN INC(ref); RefNum(ref, d); RefName(ref, name); S.GET(ref, ch) END; WHILE ch >= 0FDX DO (* skip variables *) INC(ref); RefCh(ref, ch); IF ch = 10X THEN INC(ref, 4) END; RefNum(ref, d); RefName(ref, name); S.GET(ref, ch) END END;
о черт. сломал глаза.Покритикуй Оберон со строчной буквы в начале предложения — получи +2.
if()
{
abc;
def;
ghi;
}
else
{
abc;
def;
}
if .. then
begin
abc;
def;
ghi;
end
else
begin
abc;
def;
end;
Отсутствие отступов не подтасовка если отступы управляются человеком. Человек может ошибиться.
if condition
then
begin
op1;
op2;
end
else
begin
op3;
op4;
end;
Потому что как это так, разве можно выкидывать из языка фичи
Кто хочет увидеть образец совершенства,
Тот мечтает о том, чего никогда не было, нет и не будет.
вместо того, чтобы возиться с памятью, программист теперь учит, что такое управляемый код, как работает GC
Посмотрите на математиков/физиков — практически у каждого свой наработанный и вылизанный до идеала фреймворк с которым они и работают. Ситуации когда у них что-то рушится по причине неправильной работы фреймворка очень редки. А всё от чего — они не спешат сломя голову
Если бы ORM решала все проблемы, то абстрагирование от сервера БД было бы полным и вас бы не беспокоили особенности генерации SQL-запросов.
ваш автоматический объектный код в ORM-прослойке никогда не сможет всегда эффективно работать со множествами
Да, есть некоторые ограничения: нужно использовать методы Where(), Select() и прочее.То есть, вы в императивный язык тащите декларативные куски, чтобы склеить концептуальный разлом.
Давайте научим ORM создавать индексы.Что здесь сложного и почему вы про это говорите сейчас, когда существуют тонны ORM-фреймворков?
То есть, вы в императивный язык тащите декларативные куски, чтобы склеить концептуальный разлом.
(where (select Model1) :name "example")Файловая система — хорошая, не протекающая абстракция.
Любая система, зависящая от человеческой надежности, ненадежна.
с разрушением дисковой памяти
1) for(var i in [1,2,3]) { sum += 2*i }
2) [1,2,3].map(function(a) {return 2*a}).reduce(function(a, b) { return a+b }, 0)
var sum = 0; for (let i of [1, 2, 3]) sum += 2 * i;
var sum = [1, 2, 3].map(a => 2 * a).reduce((a, b) => a + b, 0)
практикующие программисты знают
template<class T, int N>
struct Array
{
T data[N];
}; модульный на уровне описания язык программирования,Ага, и потом у каждой компании, а точнее — на каждом проекте будет свой язык программирования, со своим синтаксисом. Нет, спасибо.
А такие вещи как async/await вообще половина «баринов» реализует через одно место просто в силу их сложности.Кажется, это называется патернализм, когда надежда на решение крупных проблем возлагается субъектом на Отца-корпорацию, у которой сил уж точно хватит. Не хватает, как мы видим. А если и дальше языки усложнять, то и не хватит никогда.
Foreach не нужен.А чем он мешает? Может еще и лямбды не нужны? async/await не нужен? А шаблоны/Generic'и? Так мы до ассемблера скатимся.
Борланд заказывала виртуальную джава-машину оберонщикамЭто как раз подтверждает мое высказывание про 1.5 человека. Где сейчас борланд? И где сейчас оберон? Посмотрите количество вакансий по оберону, ну или количество конференций где о нем говорят. Теперь сравните с Java/C#/C++. Вероятно вам потребуется точность double чтобы выразить отношение.
Ведь всё можно легко подсчитать. Как именно экономятся усилия программиста. Я для оберона вёл статистику работы — и получалось, что именно на набор кода, клики и возню мышкой тратится совсем небольшая часть времени. Львиная часть трудозатрат идёт на обдумывания. Когда проблема понятна, кодирование быстрое и продуктивное.Вы когда нибудь сравнивали например асинхронную работу с итераторами через async/await/yield/foreach и без всего этого? Особенно если идет несколько continuation'ов. Растет не просто количество кода, растет его сложность, увеличивается шанс допустить ошибку, растет время на понимание кода (а читают его гораздо чаще чем пишут).
Избавление от ошибок на самом старте — это очень и очень дорогая вещь.Так он не избавляет от ошибок, а привносит их, потому что вместо пользования более высокоуровневыми примитивами языка приходится вручную все делать.
что именно на набор кода, клики и возню мышкой тратится совсем небольшая часть времениЭто даже, я бы сказал, смешной аргумент (у меня улыбку вызвало). Так может все же ассемблер? Все равно на «набор кода» меньше времени тратится, а то что будет тратиться горзадо больше времени на обдумывание того как правильно и красиво сделать все низкоуровневыми примитивами — это ничего, это мы выкинем из рассмотрения, связанные с этим ошибки тоже.
Следующий шаг на этом пути — наглухо завесить сборку мусора тоннами динамических сущностей,… Или, например, регулярные крэши среды, написанной на С++.Это всего лишь неумение использовать инструменты. Сборка мусора очень помогает в 99% случаев, важно просто уметь выделить тот 1% случаев когда надо писать код с оглядкой на то как она работает или писать код в среде без GC. Это управление сложностью. Мы красим стену валиком, и подкрашиваем кисточкой те места, куда валик не достает, это делает нас более продуктивными. Говорить то что «валик не везде может покрасить» поэтому давайте везде красить кисточкой — странно. Да, покрасить кисточкой можно, но зачем? Оставим ее только для тех мест, где более высокоуровневые инструменты не справляются.
Метрики приведите. Статистику работы. Числа. Ведь работа программиста выражается именно в том, сколько дела он сделает за определённое количество нажатий клавиш.Совершенно нет. Работа в том сколько человек сделает за определенное время (не важно сколько он кнопок нажал), насколько качественно будет система работать, насколько быстро сможет другой человек в ней разобраться, и прочее подобное. foreach не просто сокращает количество строк кода — он уменьшает сложность, с которой нам приходится работать.
Сначала мне говорят про человеческий фактор, мол человек всегда делает ошибки. Теперь оказывается, что человеку подсовывают такие инструменты, с помощью которых можно делать ошибки.Как раз создаются инструменты с которыми все сложнее и сложнее выстрелить себе в ногу.
Совершенно нет. Работа в том сколько человек сделает за определенное время (не важно сколько он кнопок нажал)А он как это делает, силой мысли? :)))))Это шутка или вы не понимаете что количество нажатых кнопок значения не имеет? Оно, к слову, на более высокоуровневом языке будет меньше, так что тут вы тоже проиграли. Значение имеет время, и чем более низкоуровневый язык — тем больше времени тратится на то, чтобы придумать как написать код для той или иной задачи.
просто делаете, без ошибок и без последующей отладки.Какой волшебный язык, я прямо не устаю удивляться, и без ошибок, и без отладки. А кожу мою он сделает мягкой и сияющей?
Я же говорю, вы плохо представляете себе ситуацию и совсем не знаете истории ИТ :)Как и весь рынок, да? Вы в меньшинстве, если что.
Да, расскажите про неумение использовать инструменты создателям Unity3d, например., которая следовала в ответ на Ваш коммент про GC, который следовал в ответ на коммент про регулярные креши решений на C++ в доме, который построил Джек.
Unity Technologies was founded in 2004 by David Helgason (CEO), Nicholas Francis (CCO), and Joachim Ante (CTO) in Copenhagen, Denmark after their first game, GooBall, failed to gain success. The three recognized the value in engine and tools development and set out to create an engine that any and all could use for an affordable price. Unity Technologies has received funding from the likes of Sequoia Capital, WestSummit Capital, and iGlobe Partners.
А вот они взяли и сделали Unity3d.А что они при этом кушали?
Теперь, что оберон-методология даёт взамен. Избавление от ошибок на самом старте — это очень и очень дорогая вещь.
PROCEDURE Deposit*;
VAR pat: ARRAY 32 OF INTEGER;
BEGIN
pat[0] := 000000000H; pat[1] := 0DCDDDD5DH;
pat[2] := 0BABBBB3BH; pat[3] := 076777777H;
pat[4] := 0EEEEEE6EH; pat[5] := 0DCDDDD5DH;
pat[6] := 0BABBBB3BH; pat[7] := 076777777H;
pat[8] := 0EEEEEE6EH; pat[9] := 0DCDDDD5DH;
pat[10] := 0BABBBB3BH; pat[11] := 076777777H;
pat[12] := 0EEEEEE6EH; pat[13] := 0DCDDDD5DH;
pat[14] := 0BABBBB3BH; pat[15] := 076777777H;
pat[16] := 0EEEEEE6EH; pat[17] := 0DCDDDD5DH;
pat[18] := 0BABBBB3BH; pat[19] := 076777777H;
pat[20] := 0EEEEEE6EH; pat[21] := 0DCDDDD5DH;
pat[22] := 0BABBBB3BH; pat[23] := 076777777H;
pat[24] := 0EEEEEE6EH; pat[25] := 0DCDDDD5DH;
pat[26] := 0BABBBB3BH; pat[27] := 076777777H;
pat[28] := 0EEEEEE6EH; pat[29] := 0DCDDDD5DH;
pat[30] := 0BABBBB3BH; pat[31] := 000000000H;Если вам предложат попрограммировать на Обероне, вы скажете «Фи. А где тут бесплатная инфраструктура, которую построила большая западная компания за сто миллионов денег?».
PROCEDURE Draw* (f : Figure);
BEGIN
f.if.draw(f);
END Draw; // <- Нахрена в такой маленькой функции еще раз писать ее имя?
foreach (var client in Clients.Where(x => x.Balance > 100))
{
Console.WriteLine(string.Format("Client: {0} Balance: {1} ", client.FullName, client.Balance);
}
clients | where Balance -gt 100 | foreach { "Client: $($_.FullName) Balance:$($_.Balance)" }
clients |> seq.filter (fun x -> x.Balance > 100) |> Seq.iter (fun x -> sprintf "%A %A" x.FullName x.Balance}
Спор о преимуществах foreach свёлся к объективной неочевидности и неощутимости этих самых преимуществ.
Ваши слова совершенно справедливы для языков с вытребеньками типа j++.
index := index + 1;p := p.next)В сишарпе, например, приходится тратить дополнительные усилия, чтоб отыскивать конец метода среди этих плохо различимых фигурных скобочек.

Что-что, мышку надо двигать, чтобы прочитать код, который УЖЕ на экране?
Вам оберон и не может помочь, ведь вы его не используете.Так я и прошу описать как бы он мог мне помочь, но похоже аргументов просто нету, потому что помочь он никак не может.
продолжаете путать простоту с примитивностью.Формальное описание разницы между простотой и примитивностью в студию пожалуйста, желательно с доказательством. Мое мнение хотябы подкреплено историей, логикой работы рынка и большинством программистов, которые делают выбор в пользу богатых языков.
Скажу только, что вы делаете большую ошибку, хотя и естественную для всех программистов,Т.е. все ошибаются, один вы Д'Артаньян?
А рефлексия не нужна в составе языка.
Борьба со сложностью задач сложностью инструментов, с помощью которых эти задачи решаются. Конечно, многие от этого выигрывают. Зарплаты растут.
Библиотечных функций достаточно, на самом деле. Даже лучше, если такой хитрый механизм будет изолирован от языка
. Но при этом никак не оговаривается, что нужно это делать средствами языка или компилятора.
Бьёрн Страуструп:
«Язык программирования служит двум связанным между собой целям: он является выразительным средством программиста для указания действий, которые надо выполнить, а также набором концепций, которыми пользуется программист при решении проблемы.»
добыть процедуру по имени
Appendix D: Mandatory Requirements for Environment
The Component Pascal definition implicitly relies on four fundamental assumptions.
1) There exists some run-time type information that allows to check the dynamic type of an object. This is necessary to implement type tests and type guards.
myObject.GetType().GetMethod("SomeMethod").Invoke(myObject, paramsArray);
typeof(myType).GetMethod("SomeStaticMethod").Invoke(paramsArray);И эти факторы (помимо актуальности задач) успешнее достигаются, как ни странно, квалифицированными программистами, владеющими нужными инструментами.Это т.н. систематическая ошибка выжившего. Ни вы, ни я не знаем реальных раскладок вложений ресурсов в продвижение на начальных этапах таких языков как Java или С++ (Микрософт по слухам вкладывалась в его продвижение с самого начала Windows), то, что они благодаря скрытым механизмам выжили и получили ресурсы на полноценное развитие не делает их более пригодными для решения задач. Даже квалифицированными программистами. Очень позитивный сценарий вы описали.
то, что они благодаря скрытым механизмам выжили и получили ресурсы на полноценное развитие не делает их более пригодными для решения задач
Пайтон (что, на мой взгляд, не так уж сильно отличается от JavaScript)
О бытовом заблуждении