Как статический контроль типов ограничивает макросы?

use strict;

use Fcntl ':flock'; # Import LOCK_* constants

# We will use this file path in error messages and function calls.
# Don't type it out more than once in your code.  Use a variable.
my $file = '/path/to/some/file';

# Open the file for appending.  Note the file path is in quoted
# in the error message.  This helps debug situations where you
# have a stray space at the start or end of the path.
open(my $fh, '>>', $file) or die "Could not open '$file' - $!";

# Get exclusive lock (will block until it does)
flock($fh, LOCK_EX);


# Do something with the file here...


# Do NOT use flock() to unlock the file if you wrote to the
# file in the "do something" section above.  This could create
# a race condition.  The close() call below will unlock it
# for you, but only after writing any buffered data.

# In a world of buffered i/o, some or all of your data will not 
# be written until close() completes.  Always, always, ALWAYS 
# check the return value on close()!
close($fh) or die "Could not write '$file' - $!";
10
задан Greg Bacon 1 December 2009 в 23:41
поделиться

3 ответа

Статическая типизация не исключает макросы. Например, язык Boo со статической типизацией имеет макросы . То же самое и с Nemerle .

Однако это зависит от того, что Грэм подразумевает под «истинными» макросами. Возможно, макросы Boo и Nemerle «ложны» по его стандартам.

9
ответ дан 3 December 2019 в 23:50
поделиться

На самом деле неверно, что статическая типизация исключает макросы, но обычно это означает, что макросистема должна быть более сложной чем привычные многим негигиеничные макросы подстановки текста. Я не совсем уверен, что здесь пытается понять Грэм, или что он подразумевает под «истинными» макросами.

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

2
ответ дан 3 December 2019 в 23:50
поделиться

Конечно, Haskell, но на самом деле все следующее действительно изменило мои взгляды:

Я начал с GWBasic много лет назад, когда был ребенком, поэтому я естественным образом тяготел к процедурным языкам.

Моя карьера началась с C ++, и это фундамент, на котором я строю.

  • JavaScript - познакомил меня с функциями первого класса, замыканиями, динамической типизацией.
  • Python - познакомил меня с более простым синтаксисом и динамическими языками в целом.
  • SQL - познакомил меня с языками, которые «есть», по сравнению с языками, которые «работают», код «есть» ответ.
0
ответ дан 3 December 2019 в 23:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: