Описание тега language-implementation

Связанные с проблемами, возникающими при реализации языка программирования.
2 ответа

Как foreach реализован в C#?

Как именно foreach реализовано в C#? Я представляю, что часть этого выглядит как: var enumerator = TInput.GetEnumerator(); while(enumerator.MoveNext()) { // do some stuff here } Однако я не уверен, что на самом деле происходит. Какая методология исп…
4 ответа

В Лиспе и других функциональных языках, почему длина не O(1)

Примитивы списка в Лиспе имеют длину оператора, определяемую следующим образом: (define (length lst) (if (null? lst) 0 (+ 1 (length (cdr lst))))) Почему разработчики некоторых Lisp не могут сделать длину примитивом, вычисленным за постоянное время? …
20 июн '11 в 20:32
4 ответа

Компиляция через C/C++ и ошибки / ограничения компилятора

Я смотрю на возможность реализации высокоуровневого (подобного Лиспу) языка путем компиляции через C (или, возможно, C++, если исключения оказываются достаточно полезными); Это стратегия, которую уже использовали несколько проектов. Конечно, это сге…
7 ответов

Существуют ли реализации Common Lisp для.Net?

Существуют ли реализации Common Lisp для.Net?
21 сен '08 в 07:00
1 ответ

Закрытый внутренний класс синтезирует неожиданный анонимный класс

Когда вы компилируете класс Java с закрытым внутренним классом, создается впечатление, что анонимный класс автоматически синтезируется вместе с ним по какой-то причине. Этого класса достаточно, чтобы воспроизвести его: public class SynthesizeAnonymo…
3 ответа

Реализация операции Shift в Java

Я недавно использовал операторы сдвига в Java и заметил, что >> оператор не имеет того же значения, что и оператор >> в C. В Java >> Сдвиг со знаком, который сохраняет первый бит на том же значении. В Java эквивалентом C shift явля…
15 мар '12 в 15:30
4 ответа

Haskell: Почему ++ не разрешен в сопоставлении с образцом?

Предположим, мы хотим написать наш собственный sum функция в Haskell: sum' :: (Num a) => [a] -> a sum' [] = 0 sum' (x:xs) = x + sum' xs Почему мы не можем сделать что-то вроде: sum' :: (Num a) => [a] -> a sum' [] = 0 sum' (xs++[x]) = x +…
2 ответа

Неожиданное поведение со списком в Python

Я полагаю, что меня укусила какая-то комбинация вложенных правил определения объема и понимания списка. Сообщение в блоге Джереми Хилтона наводит на размышления о причинах, но я не совсем понимаю реализацию CPython достаточно хорошо, чтобы понять, к…
1 ответ

В чем причина реализации метода get метода AtomicMarkableReference в Java?

В java AtomicMarkableReference может использоваться для атомарного обновления ссылки на объект вместе с битом метки. Javadoc утверждает: Замечание по реализации: Эта реализация поддерживает помечаемые ссылки, создавая внутренние объекты, представляю…
8 ответов

Почему точка входа основного метода в большинстве программ на C# статична?

Почему точка входа основного метода в большинстве программ на C# статична?
02 мар '10 в 21:34
1 ответ

Реализация Пролога на чистом функциональном языке

Я был бы очень признателен за простой алгоритм псевдокода для реализации Пролога, где псевдокод взят для чисто функционального языка.
4 ответа

Есть ли реализация схемы, которая распараллеливает?

Существует ли реализация Схемы R5RS или выше, которая выполняет распараллеливание? Например, если я скажу сделать: (map (lambda (x) (pure-functional-stuff x)) '(1 3 5 7 11 13)) будет ли обрабатывать 1, 3, 5 и 7 одновременно, если машина может это сд…
2 ответа

Как реализовать "letrec" ​​без использования "set!"?

Как может letrec быть реализованным без использования set!? Мне кажется, что set! является императивной программной конструкцией, и при ее использовании теряются преимущества функционального программирования.
0 ответов

Как реализовать unquote-splice из lisp в JavaScript

У меня есть базовый интерпретатор lisp, над которым я работаю https://codepen.io/jcubic/pen/gvvzdp?editors=1010 и у меня возникли проблемы со сплайсингом без кавычек и кодом lisp: (print `(,@(list 1 2 3))) Структура выходного списка этого кода из си…
1 ответ

Почему вы можете опустить окружающие скобки для генераторов в Python при передаче их в функцию?

Я просто экспериментировал в Python с другим синтаксисом для передачи генератора в качестве аргумента функции, и я понял, что хотя я делал это, >>> sum((j for j in xrange(5))) 10 это работает также: >>> sum(j for j in xrange(5)) 10…
2 ответа

Как реализованы массивы в Perl?

Массив Perl - это абстрактный тип данных. Каков внутренний механизм для массива Perl? Это реализовано с динамическим массивом или связанным списком? Поскольку элементы массива имеют произвольный доступ, я бы предположил, что динамический массив указ…
1 ответ

Почему реализация `vector` имеет несколько случаев?

Вот определение clojure vector: (defn vector "Creates a new vector containing the args." {:added "1.0" :static true} ([] []) ([a] [a]) ([a b] [a b]) ([a b c] [a b c]) ([a b c d] [a b c d]) ([a b c d & args] (. clojure.lang.LazilyPersistentVector…
04 июл '12 в 11:37
1 ответ

Как мне узнать, какую реализацию Python я использую?

Есть ли простой способ, такой как одна команда, который позволит мне узнать, какую реализацию Python я использую (CPython, JPython и т. Д.)?
17 янв '16 в 05:43
1 ответ

Вопрос реализации Javascript: как заставить эту функцию отображать значения

Пожалуйста, прости меня, но я знаю основы js и как написать / вызвать базовую функцию, но в этом случае я пытаюсь сопоставить отсортированный по альфа списку категорий из БД, чтобы он соответствовал моему заданному (не альфа) порядку указанных катег…
16 авг '10 в 22:32
3 ответа

Почему Python имеет ограничение на количество статических блоков, которые могут быть вложены?

Количество статически вложенных блоков в Python ограничено 20. То есть вложенность 19 for петли будут в порядке (хотя и чрезмерно трудоемкими; O(n^19) это безумие), но вложение 20 не удастся: SyntaxError: too many statically nested blocks Какова осн…