Тег для вопросов, связанных с дизайном любого аспекта языков программирования.

Подробнее про language-design...

[РЕДАКТИРОВАТЬ: этот вопрос не является дубликатом этого < / а>; Я задаю вопрос о языковом дизайне, т.е. почему это вообще так. Меня не смущает, как оно себя ведет, меня смущает, почему именно это поведение было принято вообще.] В Python (и некоторых других языках, например, Lua) логические ....
Недавно мне пришлось помочь устранить проблему, с которой кто-то столкнулся с возвратом из универсального метода, и, хотя было несколько проблем, которые нужно было решить, я понял и смог объяснить все из них - за исключением последнего препятствия, когда компилятор принимал возвращаемый тип . Хот....
28 Авг 2021 в 00:06
#include <compare> struct A { int n; auto operator<=>(A const& other) const { if (n < other.n) { return std::strong_ordering::less; } else if (n > other.n) { return std::strong_ordering::greater; } else ....
Я привык к Racket и пытаюсь изучить Common Lisp. В Racket символы оцениваются сами по себе, как показывает REPL доктора Ракета: > 'racket 'racket В Common Lisp, согласно литературе, символы также оценивают сами себя. Фактически, Правило оценки цитируемых объектов таково: Цитируемый объект оценив....
#include <map> int main() { auto coll = std::map<int, int>{{1, 2}}; auto pos = coll.begin(); (*pos).first; // OK. Conforming to the C++ standard. pos->first; // Does this conform to the C++ standard too? } Согласно cppref, объект-итератор pos должен гарантировать *pos и ++p....
4 Май 2021 в 20:10
В моем вводе строка, начинающаяся с *, является строкой комментария, если она не начинается с *+ или *-. Я могу игнорировать комментарии, но мне нужно получить остальные. Это мои правила лексического анализатора: WhiteSpaces : [ \t]+; Newlines : [\r\n]+; Commnent : '*' .*? Newlines -> skip ; ....
19 Мар 2021 в 02:42
Как написать шаг итерации для умножения, деления или создания какой-либо пользовательской функции итерации в Kotlin? Я знаю, что могу использовать вместо этого циклы while, но циклы for кажутся более ограниченными по объему, чем в других языках. Это задумано? Что доступно на большинстве других яз....
Для создания коллекций в Kotlin мы можем использовать фабричные функции listOf()/mapOf()/arrayOf(). Эти функции определены в «глобальной нотации» по сравнению со статической фабричной нотацией Java: List<>.of(). На мой взгляд, метод Java для создания статических коллекций более интуитивно понятен и....
16 Ноя 2020 в 20:16
В запросе SQL вы можете ссылаться на имя до того, как это имя будет объявлено. SELECT A.id FROM table_a A; Какова история этого поведения и как оно связано с языками программирования, которые требуют, чтобы вы присваивали переменным, прежде чем вы сможете ссылаться на них?....
6 Ноя 2020 в 00:53
Для некоторого объекта V, который является итерируемым, итерация по нему обычно использует этот синтаксис (здесь с std :: transform) std::transform(V.begin(), V.end(), V.begin(), /*somelamda*/ ); Здесь V указано 3 раза. Можно было бы подумать, что перегруженная (хотя и менее гибкая) функция может ....
7 Окт 2020 в 12:04
Я читал, что BASIC позволяет идентификаторам состоять только из заглавной буквы, числа, другой заглавной буквы и символа $. Почему это так? Связано ли это с тем, сколько памяти может вместить BASIC? Заранее спасибо.....
27 Сен 2020 в 10:58
В императивном программировании есть краткий синтаксический сахар для изменения части объекта, например присвоение полю: foo.bar = new_value Или к элементу массива, или в некоторых языках к списку в виде массива: a[3] = new_value В функциональном программировании идиома состоит не в том, чтобы изм....
Прежде чем снять зуд в кончиках пальцев, я уже понимаю: как и когда использовать ключевое слово try различия между ключевыми словами try, try? и try! Я хочу понять, что использование неукрашенного ключевого слова try дает мне (и вам, и всем нам) сверх того, что просто заглушает диагностику компилято....
17 Авг 2020 в 22:59
Начиная с R3.0, {{X0} } цикл возвращает NULL (как описано в документации): x <- for(i in 1:3) {i+1} x # NULL Однако, используя назначение стрелки вправо, похоже, возвращается последнее значение: for(i in 1:3) {i+1} -> x x # [1] 4 В документации нет комментариев. на -> и , как указал Бен Болкер ,....
16 Авг 2020 в 06:46
Читая документацию по модель выполнения Python, я понял, что свободные переменные Python делают Похоже, что у него нет свойства строгого позднего связывания , в котором связывание имени, происходящее в любом блоке кода, может использоваться для разрешения имен. Действительно, выполняя: def f(): ....
Это то, что меня всегда беспокоило как особенность лямбда-выражений C ++: тип лямбда-выражения C ++ уникален и анонимен, я просто не могу его записать. Даже если я создам две лямбда-выражения, которые синтаксически совершенно одинаковы, результирующие типы будут определены как разные. Следствием это....
30 Июл 2020 в 15:01
Каковы цели проектирования или технические ограничения, из-за которых возвращаемое значение std::fetch_add остается прежним?....
27 Июл 2020 в 05:58
В картах Java, когда нам нужно вставить некоторые значения, мы используем: map.put(key, value); В других языках, таких как карты C ++ или словари Python, мы можем использовать квадратные скобки: map['key'] = value Этот синтаксис недопустим с картами Java. Можем ли мы изменить этот синтаксис програ....
Я делаю свой собственный компилятор для моего собственного C-подобного языка (x86-64). Но я не понимаю, как можно скомпилировать фрагмент другого типа языка, а именно сборки x86-64, например: int main() { __asm { mov rcx, rsp call func } } Как только встречается __asm, он долже....
Я пытаюсь доказать лемму об ослаблении, аналогичную лемме Харпера из главы 4 PFPL. А именно weakening : {x : String} {Γ : Context} {e : Expr} {τ τ' : Type} → x ∉dom Γ → Γ ⊢ e ؛ τ' → (Γ , x ؛ τ) ⊢ e ؛ τ' Я адаптировал часть кода Вадлера, где он доказывает weaken ниже, но до сих пор не знаю, как док....
12 Июн 2020 в 02:23
Сегодня я столкнулся с неожиданным поведением компилятора TypeScript. Мне интересно, это ошибка или особенность. Возможно, он будет последним, но тогда я хотел бы знать его обоснование. Если я объявляю метод интерфейса с параметром, который может быть string | number, и создаю класс, реализующий э....
Официальная документация, а также множество статей в Интернете говорят, что 'some string' является примитивным значением, что означает, что оно создает копию каждый раз, когда мы присваиваем его переменной. Однако этот вопрос (и ответ на него) Как заставить JavaScript для глубокого копирования стро....
В этом классе struct A { ... void method() { static x=0; x++; ... } } Для каждого экземпляра A вызов method() будет увеличивать x для всех экземпляров. Я ожидал, что x будет увеличен для экземпляра, в котором вызывается только method(), и не повлияет на x для....
4 Апр 2020 в 12:49
Я знаю, что не могу написать язык ассемблера, который будет запускаться / компилироваться на всех машинах, потому что у них разные наборы команд, коды операций, регистры и т. Д. У меня такой вопрос, хотя набор инструкций будет другим, является ли синтаксис сборки (или язык само) одинаково для любой ....
4 Мар 2020 в 19:05
Почему я не могу использовать локальные переменные из main для использования в базовой asm inline? Это разрешено только в расширенном asm, но почему так? (Я знаю, что локальные переменные находятся в стеке после адреса возврата (и поэтому не могут использоваться после возврата функции), но это не до....
14 Фев 2020 в 17:09